##// END OF EJS Templates
patch: support diff data loss detection and upgrade...
patch: support diff data loss detection and upgrade In worst case, generating diff in upgrade mode can be two times more expensive than generating it in git mode directly: we may have to regenerate the whole diff again whenever a git feature is detected. Also, the first diff attempt is completely buffered instead of being streamed. That said, even without having profiled it yet, I am convinced we can fast-path the upgrade mode if necessary were it to be used in regular diff commands, and not only in mq where avoiding data loss is worth the price.

File last commit:

r6266:9f76df0e default
r10189:e451e599 default
Show More
test-ssh
111 lines | 2.3 KiB | text/plain | TextLexer
#!/bin/sh
cp "$TESTDIR"/printenv.py .
# This test tries to exercise the ssh functionality with a dummy script
cat <<EOF > dummyssh
import sys
import os
os.chdir(os.path.dirname(sys.argv[0]))
if sys.argv[1] != "user@dummy":
sys.exit(-1)
if not os.path.exists("dummyssh"):
sys.exit(-1)
os.environ["SSH_CLIENT"] = "127.0.0.1 1 2"
log = open("dummylog", "ab")
log.write("Got arguments")
for i, arg in enumerate(sys.argv[1:]):
log.write(" %d:%s" % (i+1, arg))
log.write("\n")
log.close()
r = os.system(sys.argv[2])
sys.exit(bool(r))
EOF
cat <<EOF > badhook
import sys
sys.stdout.write("KABOOM\n")
EOF
echo "# creating 'remote'"
hg init remote
cd remote
echo this > foo
echo this > fooO
hg ci -A -m "init" -d "1000000 0" foo fooO
echo '[server]' > .hg/hgrc
echo 'uncompressed = True' >> .hg/hgrc
echo '[hooks]' >> .hg/hgrc
echo 'changegroup = python ../printenv.py changegroup-in-remote 0 ../dummylog' >> .hg/hgrc
cd ..
echo "# repo not found error"
hg clone -e "python ./dummyssh" ssh://user@dummy/nonexistent local
echo "# clone remote via stream"
hg clone -e "python ./dummyssh" --uncompressed ssh://user@dummy/remote local-stream 2>&1 | \
sed -e 's/[0-9][0-9.]*/XXX/g' -e 's/[KM]\(B\/sec\)/X\1/'
cd local-stream
hg verify
cd ..
echo "# clone remote via pull"
hg clone -e "python ./dummyssh" ssh://user@dummy/remote local
echo "# verify"
cd local
hg verify
echo '[hooks]' >> .hg/hgrc
echo 'changegroup = python ../printenv.py changegroup-in-local 0 ../dummylog' >> .hg/hgrc
echo "# empty default pull"
hg paths
hg pull -e "python ../dummyssh"
echo "# local change"
echo bleah > foo
hg ci -m "add" -d "1000000 0"
echo "# updating rc"
echo "default-push = ssh://user@dummy/remote" >> .hg/hgrc
echo "[ui]" >> .hg/hgrc
echo "ssh = python ../dummyssh" >> .hg/hgrc
echo "# find outgoing"
hg out ssh://user@dummy/remote
echo "# find incoming on the remote side"
hg incoming -R ../remote -e "python ../dummyssh" ssh://user@dummy/local
echo "# push"
hg push
cd ../remote
echo "# check remote tip"
hg tip
hg verify
hg cat -r tip foo
echo z > z
hg ci -A -m z -d '1000001 0' z
# a bad, evil hook that prints to stdout
echo 'changegroup.stdout = python ../badhook' >> .hg/hgrc
cd ../local
echo r > r
hg ci -A -m z -d '1000002 0' r
echo "# push should succeed even though it has an unexpected response"
hg push
hg -R ../remote heads
cd ..
cat dummylog