changeset 12426:dd600141616d

tests: unify test-fetch
author Matt Mackall <mpm@selenic.com>
date Sun, 26 Sep 2010 13:41:32 -0500
parents fcf55506c2f4
children f933b99eeb14
files tests/test-fetch tests/test-fetch.out tests/test-fetch.t
diffstat 3 files changed, 417 insertions(+), 432 deletions(-) [+]
line wrap: on
line diff
--- a/tests/test-fetch	Sun Sep 26 13:41:32 2010 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,216 +0,0 @@
-#!/bin/sh
-
-# adjust to non-default HGPORT, e.g. with run-tests.py -j
-hideport() { sed "s/localhost:$HGPORT/localhost:\$HGPORT/"; }
-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'
-
-echo
-echo % test issue2047
-hg -q init i2047a
-cd i2047a
-echo a > a
-hg -q ci -Am a
-hg -q branch stable
-echo b > b
-hg -q ci -Am b
-cd ..
-hg -q clone -r 0 i2047a i2047b
-cd i2047b
-hg fetch ../i2047a
-
-"$TESTDIR/killdaemons.py"
-
-true
--- a/tests/test-fetch.out	Sun Sep 26 13:41:32 2010 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,216 +0,0 @@
-% test fetch with default branches only
-adding a
-updating to branch default
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-updating to branch default
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-adding b
-1:97d72e5f12c7
-% should pull one change
-pulling from ../a
-searching for changes
-adding changesets
-adding manifests
-adding file changes
-added 1 changesets with 1 changes to 1 files
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-1:97d72e5f12c7
-adding c
-updating to branch default
-2 files updated, 0 files merged, 0 files removed, 0 files unresolved
-updating to branch default
-2 files updated, 0 files merged, 0 files removed, 0 files unresolved
-% should merge c into a
-pulling from ../a
-searching for changes
-adding changesets
-adding manifests
-adding file changes
-added 1 changesets with 1 changes to 1 files (+1 heads)
-updating to 2:97d72e5f12c7
-1 files updated, 0 files merged, 1 files removed, 0 files unresolved
-merging with 1:5e056962225c
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-new changeset 3:cd3a41621cf0 merges remote changes with local
-a
-b
-c
-% fetch over http, no auth
-pulling from http://localhost:$HGPORT/
-searching for changes
-adding changesets
-adding manifests
-adding file changes
-added 1 changesets with 1 changes to 1 files (+1 heads)
-updating to 2:97d72e5f12c7
-1 files updated, 0 files merged, 1 files removed, 0 files unresolved
-merging with 1:5e056962225c
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-new changeset 3:... merges remote changes with local
-Automated merge with http://localhost:$HGPORT/
-% fetch over http with auth (should be hidden in desc)
-pulling from http://user:***@localhost:$HGPORT/
-searching for changes
-adding changesets
-adding manifests
-adding file changes
-added 1 changesets with 1 changes to 1 files (+1 heads)
-updating to 2:97d72e5f12c7
-1 files updated, 0 files merged, 1 files removed, 0 files unresolved
-merging with 1:5e056962225c
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-new changeset 3:... merges remote changes with local
-Automated merge with http://localhost:$HGPORT/
-updating to branch default
-2 files updated, 0 files merged, 0 files removed, 0 files unresolved
-updating to branch default
-2 files updated, 0 files merged, 0 files removed, 0 files unresolved
-adding f
-adding g
-% should merge f into g
-pulling from ../f
-searching for changes
-adding changesets
-adding manifests
-adding file changes
-added 1 changesets with 1 changes to 1 files (+1 heads)
-0 files updated, 0 files merged, 0 files removed, 0 files unresolved
-merging with 3:cc6a3744834d
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-new changeset 4:55aa4f32ec59 merges remote changes with local
-% should abort, because i is modified
-abort: working directory is missing some files
-% test fetch with named branches
-adding a
-marked working directory as branch a
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-marked working directory as branch b
-adding b
-
-% pull in change on foreign branch
-updating to branch default
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-updating to branch default
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-pulling from n1
-searching for changes
-adding changesets
-adding manifests
-adding file changes
-added 1 changesets with 1 changes to 1 files
-% parent should be 2 (no automatic update)
-2
-
-% pull in changes on both foreign and local branches
-updating to branch default
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-updating to branch default
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-2 files updated, 0 files merged, 0 files removed, 0 files unresolved
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-pulling from n1
-searching for changes
-adding changesets
-adding manifests
-adding file changes
-added 2 changesets with 2 changes to 2 files
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-% parent should be 4 (fast forward)
-4
-
-% pull changes on foreign (2 new heads) and local (1 new head) branches
-% with a local change
-updating to branch default
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-updating to branch default
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-2 files updated, 0 files merged, 0 files removed, 0 files unresolved
-1 files updated, 0 files merged, 1 files removed, 0 files unresolved
-created new head
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-adding c
-pulling from n1
-searching for changes
-adding changesets
-adding manifests
-adding file changes
-added 3 changesets with 3 changes to 2 files (+2 heads)
-updating to 5:708c6cce3d26
-1 files updated, 0 files merged, 1 files removed, 0 files unresolved
-merging with 3:d83427717b1f
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-new changeset 7:48f1a33f52af merges remote changes with local
-% parent should be 7 (new merge changeset)
-7
-% pull in changes on foreign (merge of local branch) and local (2 new
-% heads) with a local change
-updating to branch default
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-updating to branch default
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-(branch merge, don't forget to commit)
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-created new head
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-pulling from n1
-searching for changes
-adding changesets
-adding manifests
-adding file changes
-added 3 changesets with 2 changes to 1 files (+2 heads)
-not merging with 1 other new branch heads (use "hg heads ." and "hg merge" to merge them)
-% parent should be 3 (fetch did not merge anything)
-3
-% pull in change on different branch than dirstate
-adding a
-updating to branch default
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-marked working directory as branch topic
-abort: working dir not at branch tip (use "hg update" to check out branch tip)
-% parent should be 0 (fetch did not update or merge anything)
-0
-% test fetch with inactive branches
-adding a
-marked working directory as branch second
-adding b
-marked working directory as branch default
-adding c
-created new head
-updating to branch default
-3 files updated, 0 files merged, 0 files removed, 0 files unresolved
-% fetch should succeed
-pulling from ../ib1
-searching for changes
-no changes found
-% test issue1726
-adding a
-updating to branch default
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-pulling from ../i1726r1
-searching for changes
-adding changesets
-adding manifests
-adding file changes
-added 1 changesets with 1 changes to 1 files (+1 heads)
-updating to 2:7837755a2789
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-merging with 1:d1f0c6c48ebd
-merging a
-0 files updated, 1 files merged, 0 files removed, 0 files unresolved
-new changeset 3 merges remote changes with local
-3
-
-% test issue2047
-pulling from ../i2047a
-searching for changes
-adding changesets
-adding manifests
-adding file changes
-added 1 changesets with 1 changes to 1 files
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-fetch.t	Sun Sep 26 13:41:32 2010 -0500
@@ -0,0 +1,417 @@
+adjust to non-default HGPORT, e.g. with run-tests.py -j
+
+  $ echo "[extensions]" >> $HGRCPATH
+  $ echo "fetch=" >> $HGRCPATH
+
+test fetch with default branches only
+
+  $ hg init a
+  $ echo a > a/a
+  $ hg --cwd a commit -d '1 0' -Ama
+  adding a
+  $ hg clone a b
+  updating to branch default
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ hg clone a c
+  updating to branch default
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ echo b > a/b
+  $ hg --cwd a commit -d '2 0' -Amb
+  adding b
+  $ hg --cwd a parents -q
+  1:97d72e5f12c7
+
+should pull one change
+
+  $ hg --cwd b fetch ../a
+  pulling from ../a
+  searching for changes
+  adding changesets
+  adding manifests
+  adding file changes
+  added 1 changesets with 1 changes to 1 files
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ hg --cwd b parents -q
+  1:97d72e5f12c7
+  $ echo c > c/c
+  $ hg --cwd c commit -d '3 0' -Amc
+  adding c
+  $ hg clone c d
+  updating to branch default
+  2 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ hg clone c e
+  updating to branch default
+  2 files updated, 0 files merged, 0 files removed, 0 files unresolved
+
+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.
+should merge c into a
+
+  $ hg --cwd c fetch -d '4 0' -m 'automated merge' ../a
+  pulling from ../a
+  searching for changes
+  adding changesets
+  adding manifests
+  adding file changes
+  added 1 changesets with 1 changes to 1 files (+1 heads)
+  updating to 2:97d72e5f12c7
+  1 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  merging with 1:5e056962225c
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  new changeset 3:cd3a41621cf0 merges remote changes with local
+  $ ls c
+  a
+  b
+  c
+  $ netstat -tnap 2>/dev/null | grep $HGPORT | grep LISTEN
+  [1]
+  $ hg --cwd a serve -a localhost -p $HGPORT -d --pid-file=hg.pid
+  $ cat a/hg.pid >> "$DAEMON_PIDS"
+
+fetch over http, no auth
+
+  $ hg --cwd d fetch -d '5 0' http://localhost:$HGPORT/
+  pulling from http://localhost:*/ (glob)
+  searching for changes
+  adding changesets
+  adding manifests
+  adding file changes
+  added 1 changesets with 1 changes to 1 files (+1 heads)
+  updating to 2:97d72e5f12c7
+  1 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  merging with 1:5e056962225c
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  new changeset 3:0b6439e938f9 merges remote changes with local
+  $ hg --cwd d tip --template '{desc}\n'
+  Automated merge with http://localhost:*/ (glob)
+
+fetch over http with auth (should be hidden in desc)
+
+  $ hg --cwd e fetch -d '5 0' http://user:password@localhost:$HGPORT/
+  pulling from http://user:***@localhost:*/ (glob)
+  searching for changes
+  adding changesets
+  adding manifests
+  adding file changes
+  added 1 changesets with 1 changes to 1 files (+1 heads)
+  updating to 2:97d72e5f12c7
+  1 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  merging with 1:5e056962225c
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  new changeset 3:0b6439e938f9 merges remote changes with local
+  $ hg --cwd e tip --template '{desc}\n'
+  Automated merge with http://localhost:*/ (glob)
+  $ hg clone a f
+  updating to branch default
+  2 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ hg clone a g
+  updating to branch default
+  2 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ echo f > f/f
+  $ hg --cwd f ci -d '6 0' -Amf
+  adding f
+  $ echo g > g/g
+  $ hg --cwd g ci -d '6 0' -Amg
+  adding g
+  $ hg clone -q f h
+  $ hg clone -q g i
+
+should merge f into g
+
+  $ hg --cwd g fetch -d '7 0' --switch -m 'automated merge' ../f
+  pulling from ../f
+  searching for changes
+  adding changesets
+  adding manifests
+  adding file changes
+  added 1 changesets with 1 changes to 1 files (+1 heads)
+  0 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  merging with 3:cc6a3744834d
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  new changeset 4:55aa4f32ec59 merges remote changes with local
+  $ rm i/g
+
+should abort, because i is modified
+
+  $ hg --cwd i fetch ../h
+  abort: working directory is missing some files
+  [255]
+
+test fetch with named branches
+
+  $ hg init nbase
+  $ echo base > nbase/a
+  $ hg -R nbase ci -d '1 0' -Am base
+  adding a
+  $ hg -R nbase branch a
+  marked working directory as branch a
+  $ echo a > nbase/a
+  $ hg -R nbase ci -d '2 0' -m a
+  $ hg -R nbase up -C 0
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ hg -R nbase branch b
+  marked working directory as branch b
+  $ echo b > nbase/b
+  $ hg -R nbase ci -Ad '3 0' -m b
+  adding b
+  $ echo
+  
+
+pull in change on foreign branch
+
+  $ hg clone nbase n1
+  updating to branch default
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ hg clone nbase n2
+  updating to branch default
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ hg -R n1 up -C a
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ echo aa > n1/a
+  $ hg -R n1 ci -d '4 0' -m a1
+  $ hg -R n2 up -C b
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ hg -R n2 fetch -d '9 0' -m 'merge' n1
+  pulling from n1
+  searching for changes
+  adding changesets
+  adding manifests
+  adding file changes
+  added 1 changesets with 1 changes to 1 files
+
+parent should be 2 (no automatic update)
+
+  $ hg -R n2 parents --template '{rev}\n'
+  2
+  $ rm -fr n1 n2
+  $ echo
+  
+
+pull in changes on both foreign and local branches
+
+  $ hg clone nbase n1
+  updating to branch default
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ hg clone nbase n2
+  updating to branch default
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ hg -R n1 up -C a
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ echo aa > n1/a
+  $ hg -R n1 ci -d '4 0' -m a1
+  $ hg -R n1 up -C b
+  2 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ echo bb > n1/b
+  $ hg -R n1 ci -d '5 0' -m b1
+  $ hg -R n2 up -C b
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ hg -R n2 fetch -d '9 0' -m 'merge' n1
+  pulling from n1
+  searching for changes
+  adding changesets
+  adding manifests
+  adding file changes
+  added 2 changesets with 2 changes to 2 files
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+
+parent should be 4 (fast forward)
+
+  $ hg -R n2 parents --template '{rev}\n'
+  4
+  $ rm -fr n1 n2
+  $ echo
+  
+
+pull changes on foreign (2 new heads) and local (1 new head) branches
+with a local change
+
+  $ hg clone nbase n1
+  updating to branch default
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ hg clone nbase n2
+  updating to branch default
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ hg -R n1 up -C a
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ echo a1 > n1/a
+  $ hg -R n1 ci -d '4 0' -m a1
+  $ hg -R n1 up -C b
+  2 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ echo bb > n1/b
+  $ hg -R n1 ci -d '5 0' -m b1
+  $ hg -R n1 up -C 1
+  1 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  $ echo a2 > n1/a
+  $ hg -R n1 ci -d '6 0' -m a2
+  created new head
+  $ hg -R n2 up -C b
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ echo change >> n2/c
+  $ hg -R n2 ci -Ad '7 0' -m local
+  adding c
+  $ hg -R n2 fetch -d '9 0' -m 'merge' n1
+  pulling from n1
+  searching for changes
+  adding changesets
+  adding manifests
+  adding file changes
+  added 3 changesets with 3 changes to 2 files (+2 heads)
+  updating to 5:708c6cce3d26
+  1 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  merging with 3:d83427717b1f
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  new changeset 7:48f1a33f52af merges remote changes with local
+
+parent should be 7 (new merge changeset)
+
+  $ hg -R n2 parents --template '{rev}\n'
+  7
+  $ rm -fr n1 n2
+
+pull in changes on foreign (merge of local branch) and local (2 new
+heads) with a local change
+
+  $ hg clone nbase n1
+  updating to branch default
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ hg clone nbase n2
+  updating to branch default
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ hg -R n1 up -C a
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ hg -R n1 merge b
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  (branch merge, don't forget to commit)
+  $ hg -R n1 ci -d '4 0' -m merge
+  $ hg -R n1 up -C 2
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ echo c > n1/a
+  $ hg -R n1 ci -d '5 0' -m c
+  $ hg -R n1 up -C 2
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ echo cc > n1/a
+  $ hg -R n1 ci -d '6 0' -m cc
+  created new head
+  $ hg -R n2 up -C b
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ echo change >> n2/b
+  $ hg -R n2 ci -Ad '7 0' -m local
+  $ hg -R n2 fetch -d '9 0' -m 'merge' n1
+  pulling from n1
+  searching for changes
+  adding changesets
+  adding manifests
+  adding file changes
+  added 3 changesets with 2 changes to 1 files (+2 heads)
+  not merging with 1 other new branch heads (use "hg heads ." and "hg merge" to merge them)
+
+parent should be 3 (fetch did not merge anything)
+
+  $ hg -R n2 parents --template '{rev}\n'
+  3
+  $ rm -fr n1 n2
+
+pull in change on different branch than dirstate
+
+  $ hg init n1
+  $ echo a > n1/a
+  $ hg -R n1 ci -Am initial
+  adding a
+  $ hg clone n1 n2
+  updating to branch default
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ echo b > n1/a
+  $ hg -R n1 ci -m next
+  $ hg -R n2 branch topic
+  marked working directory as branch topic
+  $ hg -R n2 fetch -d '0 0' -m merge n1
+  abort: working dir not at branch tip (use "hg update" to check out branch tip)
+  [255]
+
+parent should be 0 (fetch did not update or merge anything)
+
+  $ hg -R n2 parents --template '{rev}\n'
+  0
+  $ rm -fr n1 n2
+
+test fetch with inactive branches
+
+  $ hg init ib1
+  $ echo a > ib1/a
+  $ hg --cwd ib1 ci -Am base
+  adding a
+  $ hg --cwd ib1 branch second
+  marked working directory as branch second
+  $ echo b > ib1/b
+  $ hg --cwd ib1 ci -Am onsecond
+  adding b
+  $ hg --cwd ib1 branch -f default
+  marked working directory as branch default
+  $ echo c > ib1/c
+  $ hg --cwd ib1 ci -Am newdefault
+  adding c
+  created new head
+  $ hg clone ib1 ib2
+  updating to branch default
+  3 files updated, 0 files merged, 0 files removed, 0 files unresolved
+
+fetch should succeed
+
+  $ hg --cwd ib2 fetch ../ib1
+  pulling from ../ib1
+  searching for changes
+  no changes found
+  $ rm -fr ib1 ib2
+
+test issue1726
+
+  $ hg init i1726r1
+  $ echo a > i1726r1/a
+  $ hg --cwd i1726r1 ci -Am base
+  adding a
+  $ hg clone i1726r1 i1726r2
+  updating to branch default
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ 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
+  pulling from ../i1726r1
+  searching for changes
+  adding changesets
+  adding manifests
+  adding file changes
+  added 1 changesets with 1 changes to 1 files (+1 heads)
+  updating to 2:7837755a2789
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  merging with 1:d1f0c6c48ebd
+  merging a
+  0 files updated, 1 files merged, 0 files removed, 0 files unresolved
+  new changeset 3:* merges remote changes with local (glob)
+  $ hg --cwd i1726r2 heads default --template '{rev}\n'
+  3
+  $ echo
+  
+
+test issue2047
+
+  $ hg -q init i2047a
+  $ cd i2047a
+  $ echo a > a
+  $ hg -q ci -Am a
+  $ hg -q branch stable
+  $ echo b > b
+  $ hg -q ci -Am b
+  $ cd ..
+  $ hg -q clone -r 0 i2047a i2047b
+  $ cd i2047b
+  $ hg fetch ../i2047a
+  pulling from ../i2047a
+  searching for changes
+  adding changesets
+  adding manifests
+  adding file changes
+  added 1 changesets with 1 changes to 1 files
+  $ "$TESTDIR/killdaemons.py"