1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
|
#!/usr/bin/env bash
set -ev
if [ x${REMOTE_DIR} = x ]; then
REMOTE_DIR=sshtest
fi
if [ x"${USE_PUTTY}" != x ]; then
DARCS_SSH=plink
export DARCS_SSH
DARCS_SCP=pscp
export DARCS_SCP
DARCS_SFTP=psftp
export DARCS_SFTP
fi
if [ x"${USE_CONTROL_MASTER}" != x ]; then
DARCS_SSH_FLAGS="--ssh-cm"
export DARCS_SSH_FLAGS
fi
if [ x"${DARCS_SSH}" = x ]; then
SSH=ssh
else
SSH=${DARCS_SSH}
fi
rm -rf tempssh
mkdir tempssh
cd tempssh
cleanup () {
cd ..
rm -rf tempssh
}
if [ x${REMOTE} = x ]; then
echo
echo "Note: to enable full SSH testing, set REMOTE to some SSH path first,"
echo " e.g. REMOTE=you@server.org $0"
cleanup
exit 0 # exit normally in case we are being run from the shell harness
fi
# ================ Setting up remote repositories ===============
${SSH} ${REMOTE} "\
rm -rf ${REMOTE_DIR}; \
mkdir ${REMOTE_DIR}; \
cd ${REMOTE_DIR}; \
\
mkdir testrepo; cd testrepo; \
darcs init; \
echo moi > _darcs/prefs/author; \
touch a; darcs add a; darcs record a --ignore-times -am 'add file a'; \
echo 'first line' > a; darcs record a --ignore-times -am 'add first line to a'; \
cd ..; \
\
darcs get testrepo testrepo-pull; \
cd testrepo-pull; \
echo moi > _darcs/prefs/author; \
touch b; darcs add b; darcs record b --ignore-times -am 'add file b'; \
echo 'other line' > b; darcs record b --ignore-times -am 'add other line to b'; \
cd ..; \
\
darcs get testrepo testrepo-push; \
darcs get testrepo testrepo-send; \
"
# ================ Settings ===============
echo ${DARCS_SSH_FLAGS}
echo ${DARCS_SSH}
echo ${DARCS_SCP}
echo ${DARCS_SFTP}
# ================ Checking darcs get ==================
${DARCS} get ${DARCS_SSH_FLAGS} ${REMOTE}:${REMOTE_DIR}/testrepo ${DARCS_SSH_FLAGS}
# check that the test repo made it over
[ -d testrepo ]
[ -d testrepo/_darcs ]
[ -f testrepo/a ]
# if the above test is disabled we just init a blank repo
# so that the other tests can continue
if [ ! -d testrepo ]; then
mkdir testrepo
cd testrepo
darcs init
cd ..
fi
# ================ Checking darcs pull =================
${DARCS} get ${DARCS_SSH_FLAGS} testrepo testrepo-pull
cd testrepo-pull
echo yy | ${DARCS} pull ${DARCS_SSH_FLAGS} ${REMOTE}:${REMOTE_DIR}/testrepo-pull
# see if the changes got pulled over
grep "other line" b
cd ..
# ================ Checking darcs push and send ================="
${DARCS} get ${DARCS_SSH_FLAGS} testrepo testrepo-push
cd testrepo-push
echo moi > _darcs/prefs/author
echo "second line" >> a; ${DARCS} record a --ignore-times -am "add second line to a"
touch c; ${DARCS} add c
${DARCS} record --ignore-times -am "add file c" c
echo yy | ${DARCS} push ${DARCS_SSH_FLAGS} ${REMOTE}:${REMOTE_DIR}/testrepo-push
# check that the file c got pushed over
${SSH} ${REMOTE} "[ -f ${REMOTE_DIR}/testrepo-push/c ]"
echo yy | ${DARCS} send ${DARCS_SSH_FLAGS} ${REMOTE}:${REMOTE_DIR}/testrepo-send -o mybundle.dpatch
# check that the bundle was created
grep "add file c" mybundle.dpatch
cd ..
# ================ Checking darcs put =================="
cd testrepo
${DARCS} put ${DARCS_SSH_FLAGS} ${REMOTE}:${REMOTE_DIR}/testrepo-put
# check that the put was successful
${SSH} ${REMOTE} "[ -d ${REMOTE_DIR}/testrepo-put/_darcs ]"
${SSH} ${REMOTE} "[ -f ${REMOTE_DIR}/testrepo-put/a ]"
cd ..
# ======== Checking push over ssh with a conflict ========="
${SSH} ${REMOTE} "echo apply no-allow-conflicts >> ${REMOTE_DIR}/testrepo-put/_darcs/prefs/defaults"
cd testrepo
echo 'change for remote' > a
darcs record --ignore-times -am 'change for remote'
darcs push -a
darcs ob --last 1 -a
echo 'change for local' > a
darcs record --ignore-times -am 'change for local'
if darcs push -a 2>&1 | grep -q 'conflicts options to apply' ; then
# do nothing.
echo "OK";
else
exit 1;
fi
cd ..
cleanup
|