#!/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 "$TESTDIR/killdaemons.py" true