|
|
#!/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
|
|
|
|
|
|
echo % test issue1726
|
|
|
hg init i1726r1
|
|
|
echo a > i1726r1/a
|
|
|
hg --cwd i1726r1 ci -Am base
|
|
|
hg clone i1726r1 i1726r2
|
|
|
echo b > i1726r1/a
|
|
|
hg --cwd i1726r1 ci -m second
|
|
|
echo c > i1726r2/a
|
|
|
hg --cwd i1726r2 ci -m third
|
|
|
HGMERGE=true hg --cwd i1726r2 fetch ../i1726r1 | sed 's/new changeset 3:[0-9a-zA-Z]\+/new changeset 3/'
|
|
|
hg --cwd i1726r2 heads default --template '{rev}\n'
|
|
|
|
|
|
"$TESTDIR/killdaemons.py"
|
|
|
|
|
|
true
|
|
|
|