darcs-2.1.2.1: tests/ssh.sh
#!/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