##// END OF EJS Templates
issue1577: fix broken test by assuming less about CVS output....
issue1577: fix broken test by assuming less about CVS output. Specifically, output of "cvs ci" varies unpredictably across CVS versions, so any test that includes the output of "cvs ci" is doomed to fail some of the time. This fixes that by discarding the output of "cvs ci".

File last commit:

r7855:aa1a87f7 default
r8081:6c3b8132 default
Show More
test-fetch
190 lines | 4.3 KiB | text/plain | TextLexer
#!/bin/sh
# adjust to non-default HGPORT, e.g. with run-tests.py -j
hideport() { sed "s/localhost:$HGPORT/localhost:20059/"; }
hidehash() { sed "s/changeset 3:............ merges/changeset 3:... merges/"; }
echo "[extensions]" >> $HGRCPATH
echo "fetch=" >> $HGRCPATH
echo % test fetch with default branches only
hg init a
echo a > a/a
hg --cwd a commit -d '1 0' -Ama
hg clone a b
hg clone a c
echo b > a/b
hg --cwd a commit -d '2 0' -Amb
hg --cwd a parents -q
echo % should pull one change
hg --cwd b fetch ../a
hg --cwd b parents -q
echo c > c/c
hg --cwd c commit -d '3 0' -Amc
hg clone c d
hg clone c e
# We cannot use the default commit message if fetching from a local
# repo, because the path of the repo will be included in the commit
# message, making every commit appear different.
echo % should merge c into a
hg --cwd c fetch -d '4 0' -m 'automated merge' ../a
ls c
netstat -tnap 2>/dev/null | grep $HGPORT | grep LISTEN
hg --cwd a serve -a localhost -p $HGPORT -d --pid-file=hg.pid
cat a/hg.pid >> "$DAEMON_PIDS"
echo '% fetch over http, no auth'
hg --cwd d fetch -d '5 0' http://localhost:$HGPORT/ | hideport | hidehash
hg --cwd d tip --template '{desc}\n' | hideport
echo '% fetch over http with auth (should be hidden in desc)'
hg --cwd e fetch -d '5 0' http://user:password@localhost:$HGPORT/ | hideport | hidehash
hg --cwd e tip --template '{desc}\n' | hideport
hg clone a f
hg clone a g
echo f > f/f
hg --cwd f ci -d '6 0' -Amf
echo g > g/g
hg --cwd g ci -d '6 0' -Amg
hg clone -q f h
hg clone -q g i
echo % should merge f into g
hg --cwd g fetch -d '7 0' --switch -m 'automated merge' ../f
rm i/g
echo % should abort, because i is modified
hg --cwd i fetch ../h
echo % test fetch with named branches
hg init nbase
echo base > nbase/a
hg -R nbase ci -d '1 0' -Am base
hg -R nbase branch a
echo a > nbase/a
hg -R nbase ci -d '2 0' -m a
hg -R nbase up -C 0
hg -R nbase branch b
echo b > nbase/b
hg -R nbase ci -Ad '3 0' -m b
echo
echo % pull in change on foreign branch
hg clone nbase n1
hg clone nbase n2
hg -R n1 up -C a
echo aa > n1/a
hg -R n1 ci -d '4 0' -m a1
hg -R n2 up -C b
hg -R n2 fetch -d '9 0' -m 'merge' n1
echo '% parent should be 2 (no automatic update)'
hg -R n2 parents --template '{rev}\n'
rm -fr n1 n2
echo
echo % pull in changes on both foreign and local branches
hg clone nbase n1
hg clone nbase n2
hg -R n1 up -C a
echo aa > n1/a
hg -R n1 ci -d '4 0' -m a1
hg -R n1 up -C b
echo bb > n1/b
hg -R n1 ci -d '5 0' -m b1
hg -R n2 up -C b
hg -R n2 fetch -d '9 0' -m 'merge' n1
echo '% parent should be 4 (fast forward)'
hg -R n2 parents --template '{rev}\n'
rm -fr n1 n2
echo
echo '% pull changes on foreign (2 new heads) and local (1 new head) branches'
echo % with a local change
hg clone nbase n1
hg clone nbase n2
hg -R n1 up -C a
echo a1 > n1/a
hg -R n1 ci -d '4 0' -m a1
hg -R n1 up -C b
echo bb > n1/b
hg -R n1 ci -d '5 0' -m b1
hg -R n1 up -C 1
echo a2 > n1/a
hg -R n1 ci -d '6 0' -m a2
hg -R n2 up -C b
echo change >> n2/c
hg -R n2 ci -Ad '7 0' -m local
hg -R n2 fetch -d '9 0' -m 'merge' n1
echo '% parent should be 7 (new merge changeset)'
hg -R n2 parents --template '{rev}\n'
rm -fr n1 n2
echo '% pull in changes on foreign (merge of local branch) and local (2 new'
echo '% heads) with a local change'
hg clone nbase n1
hg clone nbase n2
hg -R n1 up -C a
hg -R n1 merge b
hg -R n1 ci -d '4 0' -m merge
hg -R n1 up -C 2
echo c > n1/a
hg -R n1 ci -d '5 0' -m c
hg -R n1 up -C 2
echo cc > n1/a
hg -R n1 ci -d '6 0' -m cc
hg -R n2 up -C b
echo change >> n2/b
hg -R n2 ci -Ad '7 0' -m local
hg -R n2 fetch -d '9 0' -m 'merge' n1
echo '% parent should be 3 (fetch did not merge anything)'
hg -R n2 parents --template '{rev}\n'
rm -fr n1 n2
echo % pull in change on different branch than dirstate
hg init n1
echo a > n1/a
hg -R n1 ci -Am initial
hg clone n1 n2
echo b > n1/a
hg -R n1 ci -m next
hg -R n2 branch topic
hg -R n2 fetch -d '0 0' -m merge n1
echo '% parent should be 0 (fetch did not update or merge anything)'
hg -R n2 parents --template '{rev}\n'
rm -fr n1 n2
echo % test fetch with inactive branches
hg init ib1
echo a > ib1/a
hg --cwd ib1 ci -Am base
hg --cwd ib1 branch second
echo b > ib1/b
hg --cwd ib1 ci -Am onsecond
hg --cwd ib1 branch -f default
echo c > ib1/c
hg --cwd ib1 ci -Am newdefault
hg clone ib1 ib2
echo % fetch should succeed
hg --cwd ib2 fetch ../ib1
rm -fr ib1 ib2
"$TESTDIR/killdaemons.py"
true