changeset 3290:ae8583e746f1

merged now fully working base85 codec, though currently unused.
author Thomas Arendsen Hein <thomas@intevation.de>
date Sun, 08 Oct 2006 10:56:21 +0200
parents 48ae77d1e083 (diff) e93c926e069e (current diff)
children 0b5d626b354e
files
diffstat 7 files changed, 880 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/commands.py	Sat Oct 07 16:21:33 2006 -0700
+++ b/mercurial/commands.py	Sun Oct 08 10:56:21 2006 +0200
@@ -766,9 +766,12 @@
 def bundle(ui, repo, fname, dest=None, **opts):
     """create a changegroup file
 
-    Generate a compressed changegroup file collecting all changesets
+    Generate a compressed changegroup file collecting changesets.
     not found in the other repository.
 
+    If no destination repository is specified the destination is
+    assumed to have all the node specified by --base.
+
     This file can then be transferred using conventional means and
     applied to another repository with the unbundle command. This is
     useful when native push and pull are not available or when
@@ -778,11 +781,34 @@
     Unlike import/export, this exactly preserves all changeset
     contents including permissions, rename data, and revision history.
     """
-    dest = ui.expandpath(dest or 'default-push', dest or 'default')
-    setremoteconfig(ui, opts)
-    other = hg.repository(ui, dest)
-    o = repo.findoutgoing(other, force=opts['force'])
-    cg = repo.changegroup(o, 'bundle')
+    revs = opts.get('rev') or None
+    if revs:
+        revs = [repo.lookup(rev) for rev in revs]
+    base = opts.get('base')
+    if base:
+        if dest:
+            raise util.Abort(_("--base is incompatible with specifiying "
+                               "a destination"))
+        o = []
+        for n in base:
+            o.extend(repo.changelog.children(repo.lookup(n)))
+        # add common ancestor
+        if revs:
+            all = o + revs
+        else:
+            all = o + repo.changelog.heads()
+        ancestor = reduce(lambda a, b: repo.changelog.ancestor(a, b), all)
+        o.append(ancestor)
+    else:
+        setremoteconfig(ui, opts)
+        dest = ui.expandpath(dest or 'default-push', dest or 'default')
+        other = hg.repository(ui, dest)
+        o = repo.findoutgoing(other, force=opts['force'])
+
+    if revs:
+        cg = repo.changegroupsubset(o, revs, 'bundle')
+    else:
+        cg = repo.changegroup(o, 'bundle')
     write_bundle(cg, fname)
 
 def cat(ui, repo, file1, *pats, **opts):
@@ -2789,8 +2815,12 @@
         (bundle,
          [('f', 'force', None,
            _('run even when remote repository is unrelated')),
+          ('r', 'rev', [],
+           _('a changeset you would like to bundle')),
+          ('', 'base', [],
+           _('a base changeset to specify instead of a destination')),
          ] + remoteopts,
-         _('hg bundle FILE DEST')),
+         _('hg bundle [--base REV]... [--rev REV]... FILE [DEST]')),
     "cat":
         (cat,
          [('o', 'output', '', _('print output to file with formatted name')),
--- a/mercurial/merge.py	Sat Oct 07 16:21:33 2006 -0700
+++ b/mercurial/merge.py	Sun Oct 08 10:56:21 2006 +0200
@@ -248,11 +248,11 @@
             continue
         if f in copy:
             f2 = copy[f]
-            if f2 in ma or f2 in m1: # already seen
+            if f2 not in m2: # already seen
                 continue
             # rename case 1, A/A,B/A
             act("remote copied",
-                f, "c", f2, f, m1[f2], m2[f], fmerge(f2, f, f2), False)
+                f2, "c", f, f, m1[f2], m2[f], fmerge(f2, f, f2), False)
         elif f in ma:
             if overwrite or backwards:
                 act("recreating", f, "g", m2.execf(f), n)
@@ -285,6 +285,7 @@
             removed +=1
         elif m == "c": # copy
             f2, fd, my, other, flag, move = a[2:]
+            repo.ui.status(_("merging %s and %s to %s\n") % (f, f2, fd))
             if filemerge(repo, f, f2, fd, my, other, xp1, xp2, move):
                 unresolved += 1
             util.set_exec(repo.wjoin(fd), flag)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-bundle-r	Sun Oct 08 10:56:21 2006 +0200
@@ -0,0 +1,93 @@
+#!/bin/sh
+
+hg init test
+cd test
+cat >>afile <<EOF
+0
+EOF
+hg add afile
+hg commit -m "0.0" -d "1000000 0"
+cat >>afile <<EOF
+1
+EOF
+hg commit -m "0.1" -d "1000000 0"
+cat >>afile <<EOF
+2
+EOF
+hg commit -m "0.2" -d "1000000 0"
+cat >>afile <<EOF
+3
+EOF
+hg commit -m "0.3" -d "1000000 0"
+hg update -C 0
+cat >>afile <<EOF
+1
+EOF
+hg commit -m "1.1" -d "1000000 0"
+cat >>afile <<EOF
+2
+EOF
+hg commit -m "1.2" -d "1000000 0"
+cat >fred <<EOF
+a line
+EOF
+cat >>afile <<EOF
+3
+EOF
+hg add fred
+hg commit -m "1.3" -d "1000000 0"
+hg mv afile adifferentfile
+hg commit -m "1.3m" -d "1000000 0"
+hg update -C 3
+hg mv afile anotherfile
+hg commit -m "0.3m" -d "1000000 0"
+hg debugindex .hg/data/afile.i
+hg debugindex .hg/data/adifferentfile.i
+hg debugindex .hg/data/anotherfile.i
+hg debugindex .hg/data/fred.i
+hg debugindex .hg/00manifest.i
+hg verify
+cd ..
+for i in 0 1 2 3 4 5 6 7 8; do
+   mkdir test-"$i"
+   hg --cwd test-"$i" init
+   hg -R test bundle -r "$i" test-"$i".hg test-"$i"
+   cd test-"$i"
+   hg unbundle ../test-"$i".hg
+   hg verify
+   hg tip -q
+   cd ..
+done
+cd test-8
+hg pull ../test-7
+hg verify
+hg rollback
+cd ..
+
+echo % should fail
+hg -R test bundle --base 2 -r tip test-bundle-branch1.hg test-3
+hg -R test bundle -r tip test-bundle-branch1.hg
+
+hg -R test bundle --base 2 -r tip test-bundle-branch1.hg
+hg -R test bundle --base 2 -r 7 test-bundle-branch2.hg
+hg -R test bundle --base 2 test-bundle-all.hg
+hg -R test bundle --base 3 -r tip test-bundle-should-fail.hg
+cd test-2
+echo % 2
+hg tip -q
+hg unbundle ../test-bundle-should-fail.hg
+echo % 2
+hg tip -q
+hg unbundle ../test-bundle-all.hg
+echo % 8
+hg tip -q
+hg rollback
+echo % 2
+hg tip -q
+hg unbundle ../test-bundle-branch1.hg
+echo % 4
+hg tip -q
+hg unbundle ../test-bundle-branch2.hg
+echo % 8
+hg tip -q
+hg verify
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-bundle-r.out	Sun Oct 08 10:56:21 2006 +0200
@@ -0,0 +1,187 @@
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+1 files updated, 0 files merged, 2 files removed, 0 files unresolved
+   rev    offset  length   base linkrev nodeid       p1           p2
+     0         0       3      0       0 362fef284ce2 000000000000 000000000000
+     1         3       5      1       1 125144f7e028 362fef284ce2 000000000000
+     2         8       7      2       2 4c982badb186 125144f7e028 000000000000
+     3        15       9      3       3 19b1fc555737 4c982badb186 000000000000
+   rev    offset  length   base linkrev nodeid       p1           p2
+     0         0      75      0       7 905359268f77 000000000000 000000000000
+   rev    offset  length   base linkrev nodeid       p1           p2
+     0         0      75      0       8 905359268f77 000000000000 000000000000
+   rev    offset  length   base linkrev nodeid       p1           p2
+     0         0       8      0       6 12ab3bcc5ea4 000000000000 000000000000
+   rev    offset  length   base linkrev nodeid       p1           p2
+     0         0      48      0       0 43eadb1d2d06 000000000000 000000000000
+     1        48      48      1       1 8b89697eba2c 43eadb1d2d06 000000000000
+     2        96      48      2       2 626a32663c2f 8b89697eba2c 000000000000
+     3       144      48      3       3 f54c32f13478 626a32663c2f 000000000000
+     4       192      58      3       6 de68e904d169 626a32663c2f 000000000000
+     5       250      68      3       7 3b45cc2ab868 de68e904d169 000000000000
+     6       318      54      6       8 24d86153a002 f54c32f13478 000000000000
+checking changesets
+checking manifests
+crosschecking files in changesets and manifests
+checking files
+4 files, 9 changesets, 7 total revisions
+searching for changes
+adding changesets
+adding manifests
+adding file changes
+added 1 changesets with 1 changes to 1 files
+(run 'hg update' to get a working copy)
+checking changesets
+checking manifests
+crosschecking files in changesets and manifests
+checking files
+1 files, 1 changesets, 1 total revisions
+0:5649c9d34dd8
+searching for changes
+adding changesets
+adding manifests
+adding file changes
+added 2 changesets with 2 changes to 1 files
+(run 'hg update' to get a working copy)
+checking changesets
+checking manifests
+crosschecking files in changesets and manifests
+checking files
+1 files, 2 changesets, 2 total revisions
+1:10b2180f755b
+searching for changes
+adding changesets
+adding manifests
+adding file changes
+added 3 changesets with 3 changes to 1 files
+(run 'hg update' to get a working copy)
+checking changesets
+checking manifests
+crosschecking files in changesets and manifests
+checking files
+1 files, 3 changesets, 3 total revisions
+2:d62976ca1e50
+searching for changes
+adding changesets
+adding manifests
+adding file changes
+added 4 changesets with 4 changes to 1 files
+(run 'hg update' to get a working copy)
+checking changesets
+checking manifests
+crosschecking files in changesets and manifests
+checking files
+1 files, 4 changesets, 4 total revisions
+3:ac69c658229d
+searching for changes
+adding changesets
+adding manifests
+adding file changes
+added 2 changesets with 2 changes to 1 files
+(run 'hg update' to get a working copy)
+checking changesets
+checking manifests
+crosschecking files in changesets and manifests
+checking files
+1 files, 2 changesets, 2 total revisions
+1:5f4f3ceb285e
+searching for changes
+adding changesets
+adding manifests
+adding file changes
+added 3 changesets with 3 changes to 1 files
+(run 'hg update' to get a working copy)
+checking changesets
+checking manifests
+crosschecking files in changesets and manifests
+checking files
+1 files, 3 changesets, 3 total revisions
+2:024e4e7df376
+searching for changes
+adding changesets
+adding manifests
+adding file changes
+added 4 changesets with 5 changes to 2 files
+(run 'hg update' to get a working copy)
+checking changesets
+checking manifests
+crosschecking files in changesets and manifests
+checking files
+2 files, 4 changesets, 5 total revisions
+3:1e3f6b843bd6
+searching for changes
+adding changesets
+adding manifests
+adding file changes
+added 5 changesets with 6 changes to 3 files
+(run 'hg update' to get a working copy)
+checking changesets
+checking manifests
+crosschecking files in changesets and manifests
+checking files
+3 files, 5 changesets, 6 total revisions
+4:80fe151401c2
+searching for changes
+adding changesets
+adding manifests
+adding file changes
+added 5 changesets with 5 changes to 2 files
+(run 'hg update' to get a working copy)
+checking changesets
+checking manifests
+crosschecking files in changesets and manifests
+checking files
+2 files, 5 changesets, 5 total revisions
+4:836ac62537ab
+pulling from ../test-7
+searching for changes
+adding changesets
+adding manifests
+adding file changes
+added 4 changesets with 2 changes to 3 files (+1 heads)
+(run 'hg heads' to see heads, 'hg merge' to merge)
+checking changesets
+checking manifests
+crosschecking files in changesets and manifests
+checking files
+4 files, 9 changesets, 7 total revisions
+rolling back last transaction
+% should fail
+abort: --base is incompatible with specifiying a destination
+abort: repository default-push not found!
+% 2
+2:d62976ca1e50
+adding changesets
+abort: unknown parent ac69c658229d!
+transaction abort!
+rollback completed
+% 2
+2:d62976ca1e50
+adding changesets
+adding manifests
+adding file changes
+added 6 changesets with 4 changes to 4 files (+1 heads)
+(run 'hg heads' to see heads, 'hg merge' to merge)
+% 8
+8:836ac62537ab
+rolling back last transaction
+% 2
+2:d62976ca1e50
+adding changesets
+adding manifests
+adding file changes
+added 2 changesets with 2 changes to 2 files
+(run 'hg update' to get a working copy)
+% 4
+4:836ac62537ab
+adding changesets
+adding manifests
+adding file changes
+added 4 changesets with 2 changes to 3 files (+1 heads)
+(run 'hg heads' to see heads, 'hg merge' to merge)
+% 8
+8:80fe151401c2
+checking changesets
+checking manifests
+crosschecking files in changesets and manifests
+checking files
+4 files, 9 changesets, 7 total revisions
--- a/tests/test-rename-merge1.out	Sat Oct 07 16:21:33 2006 -0700
+++ b/tests/test-rename-merge1.out	Sun Oct 08 10:56:21 2006 +0200
@@ -6,6 +6,7 @@
  ancestor f26ec4fc3fa3 local 8e765a822af2 remote af1939970a1c
  a: remote moved -> c
  b2: remote created -> g
+merging a and b to b
 resolving a
 my a@f26ec4fc3fa3 other b@8e765a822af2 ancestor a@af1939970a1c
 copying a to b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-rename-merge2	Sun Oct 08 10:56:21 2006 +0200
@@ -0,0 +1,102 @@
+#!/bin/sh
+
+mkdir -p t
+cd t
+
+cat <<'EOF' > merge
+#!/bin/sh
+echo merge $1 $2 $3 > $1
+EOF
+chmod +x merge
+
+# perform a test merge with possible renaming
+# 
+# args:
+# $1 = action in local branch
+# $2 = action in remote branch
+# $3 = action in working dir
+# $4 = expected result
+tm()
+{
+    mkdir t
+    cd t
+    hg init
+    echo "[merge]" >> .hg/hgrc
+    echo "followcopies = 1" >> .hg/hgrc
+
+    # base
+    echo base > a
+    echo base > rev # used to force commits
+    hg add a rev
+    hg ci -m "base" -d "0 0"
+
+    # remote
+    echo remote > rev
+    if [ "$2" != "" ] ; then $2 ; fi
+    hg ci -m "remote" -d "0 0"
+
+    # local
+    hg co -q 0
+    echo local > rev
+    if [ "$1" != "" ] ; then $1 ; fi
+    hg ci -m "local" -d "0 0"
+
+    # working dir
+    echo local > rev
+    if [ "$3" != "" ] ; then $3 ; fi
+
+    # merge
+    echo "--------------"
+    echo "test L:$1 R:$2 W:$3 - $4"
+    echo "--------------"
+    env HGMERGE=../merge hg merge -y --debug --traceback
+
+    echo "--------------"
+    hg status -camC -X rev
+
+    hg ci -m "merge" -d "0 0"
+    
+    echo "--------------"
+    echo
+
+    cd ..
+    rm -rf t
+}
+
+up() { 
+    cp rev $1
+    hg add $1 2> /dev/null
+    if [ "$2" != "" ] ; then 
+	cp rev $2
+	hg add $2 2> /dev/null
+    fi
+}
+
+uc() { up $1; hg cp $1 $2; } # update + copy
+um() { up $1; hg mv $1 $2; }
+nc() { hg cp $1 $2; } # just copy
+nm() { hg mv $1 $2; } # just move
+
+tm "up a  " "nc a b" "      " "1  get local a to b"
+tm "nc a b" "up a  " "      " "2  get rem change to a and b"
+tm "up a  " "nm a b" "      " "3  get local a change to b, remove a"
+tm "nm a b" "up a  " "      " "4  get remote change to b"
+tm "      " "nc a b" "      " "5  get b"
+tm "nc a b" "      " "      " "6  nothing"
+tm "      " "nm a b" "      " "7  get b"
+tm "nm a b" "      " "      " "8  nothing"
+tm "um a b" "um a b" "      " "9  do merge with ancestor in a"
+#tm "um a c" "um x c" "      " "10 do merge with no ancestor"
+tm "nm a b" "nm a c" "      " "11 get c, keep b"
+tm "nc a b" "up b  " "      " "12 merge b no ancestor"
+tm "up b  " "nm a b" "      " "13 merge b no ancestor"
+tm "nc a b" "up a b" "      " "14 merge b no ancestor"
+tm "up b  " "nm a b" "      " "15 merge b no ancestor, remove a"
+tm "nc a b" "up a b" "      " "16 get a, merge b no ancestor"
+tm "up a b" "nc a b" "      " "17 keep a, merge b no ancestor" 
+tm "nm a b" "up a b" "      " "18 merge b no ancestor"
+tm "up a b" "nm a b" "      " "19 merge b no ancestor, prompt remove a"
+tm "up a  " "um a b" "      " "20 merge a and b to b, remove a"
+tm "um a b" "up a  " "      " "21 merge a and b to b"
+#tm "nm a b" "um x a" "      " "22 get a, keep b"
+tm "nm a b" "up a c" "      " "23 get c, keep b"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-rename-merge2.out	Sun Oct 08 10:56:21 2006 +0200
@@ -0,0 +1,457 @@
+--------------
+test L:up a   R:nc a b W:       - 1  get local a to b
+--------------
+resolving manifests
+ overwrite None branchmerge True partial False
+ ancestor e300d1c794ec local 735846fee2d7 remote 924404dff337
+ rev: versions differ -> m
+ a: remote copied -> c
+merging a and b to b
+resolving a
+my a@e300d1c794ec other b@735846fee2d7 ancestor a@924404dff337
+copying a to b
+merging rev
+resolving rev
+my rev@e300d1c794ec other rev@735846fee2d7 ancestor rev@924404dff337
+0 files updated, 2 files merged, 0 files removed, 0 files unresolved
+(branch merge, don't forget to commit)
+--------------
+M a
+M b
+  a
+--------------
+
+--------------
+test L:nc a b R:up a   W:       - 2  get rem change to a and b
+--------------
+resolving manifests
+ overwrite None branchmerge True partial False
+ ancestor ac809aeed39a local f4db7e329e71 remote 924404dff337
+ a: remote is newer -> g
+ b: local copied -> c
+ rev: versions differ -> m
+getting a
+merging b and a to b
+resolving b
+my b@ac809aeed39a other a@f4db7e329e71 ancestor a@924404dff337
+merging rev
+resolving rev
+my rev@ac809aeed39a other rev@f4db7e329e71 ancestor rev@924404dff337
+1 files updated, 2 files merged, 0 files removed, 0 files unresolved
+(branch merge, don't forget to commit)
+--------------
+M a
+M b
+--------------
+
+--------------
+test L:up a   R:nm a b W:       - 3  get local a change to b, remove a
+--------------
+resolving manifests
+ overwrite None branchmerge True partial False
+ ancestor e300d1c794ec local e03727d2d66b remote 924404dff337
+ a: remote moved -> c
+ rev: versions differ -> m
+merging a and b to b
+resolving a
+my a@e300d1c794ec other b@e03727d2d66b ancestor a@924404dff337
+copying a to b
+removing a
+merging rev
+resolving rev
+my rev@e300d1c794ec other rev@e03727d2d66b ancestor rev@924404dff337
+0 files updated, 2 files merged, 0 files removed, 0 files unresolved
+(branch merge, don't forget to commit)
+--------------
+M b
+  a
+--------------
+
+--------------
+test L:nm a b R:up a   W:       - 4  get remote change to b
+--------------
+resolving manifests
+ overwrite None branchmerge True partial False
+ ancestor ecf3cb2a4219 local f4db7e329e71 remote 924404dff337
+ b: local moved -> c
+ rev: versions differ -> m
+merging b and a to b
+resolving b
+my b@ecf3cb2a4219 other a@f4db7e329e71 ancestor a@924404dff337
+merging rev
+resolving rev
+my rev@ecf3cb2a4219 other rev@f4db7e329e71 ancestor rev@924404dff337
+0 files updated, 2 files merged, 0 files removed, 0 files unresolved
+(branch merge, don't forget to commit)
+--------------
+M b
+--------------
+
+--------------
+test L:       R:nc a b W:       - 5  get b
+--------------
+resolving manifests
+ overwrite None branchmerge True partial False
+ ancestor 94b33a1b7f2d local 735846fee2d7 remote 924404dff337
+ rev: versions differ -> m
+ a: remote copied -> c
+merging a and b to b
+resolving a
+my a@924404dff337 other b@735846fee2d7 ancestor a@924404dff337
+copying a to b
+merging rev
+resolving rev
+my rev@94b33a1b7f2d other rev@735846fee2d7 ancestor rev@924404dff337
+0 files updated, 2 files merged, 0 files removed, 0 files unresolved
+(branch merge, don't forget to commit)
+--------------
+M a
+M b
+  a
+--------------
+
+--------------
+test L:nc a b R:       W:       - 6  nothing
+--------------
+resolving manifests
+ overwrite None branchmerge True partial False
+ ancestor ac809aeed39a local 97c705ade336 remote 924404dff337
+ b: local copied -> c
+ rev: versions differ -> m
+merging b and a to b
+resolving b
+my b@ac809aeed39a other a@924404dff337 ancestor a@924404dff337
+merging rev
+resolving rev
+my rev@ac809aeed39a other rev@97c705ade336 ancestor rev@924404dff337
+0 files updated, 2 files merged, 0 files removed, 0 files unresolved
+(branch merge, don't forget to commit)
+--------------
+M b
+C a
+--------------
+
+--------------
+test L:       R:nm a b W:       - 7  get b
+--------------
+resolving manifests
+ overwrite None branchmerge True partial False
+ ancestor 94b33a1b7f2d local e03727d2d66b remote 924404dff337
+ a: remote moved -> c
+ rev: versions differ -> m
+merging a and b to b
+resolving a
+my a@924404dff337 other b@e03727d2d66b ancestor a@924404dff337
+copying a to b
+removing a
+merging rev
+resolving rev
+my rev@94b33a1b7f2d other rev@e03727d2d66b ancestor rev@924404dff337
+0 files updated, 2 files merged, 0 files removed, 0 files unresolved
+(branch merge, don't forget to commit)
+--------------
+M b
+  a
+--------------
+
+--------------
+test L:nm a b R:       W:       - 8  nothing
+--------------
+resolving manifests
+ overwrite None branchmerge True partial False
+ ancestor ecf3cb2a4219 local 97c705ade336 remote 924404dff337
+ b: local moved -> c
+ rev: versions differ -> m
+merging b and a to b
+resolving b
+my b@ecf3cb2a4219 other a@924404dff337 ancestor a@924404dff337
+merging rev
+resolving rev
+my rev@ecf3cb2a4219 other rev@97c705ade336 ancestor rev@924404dff337
+0 files updated, 2 files merged, 0 files removed, 0 files unresolved
+(branch merge, don't forget to commit)
+--------------
+M b
+--------------
+
+--------------
+test L:um a b R:um a b W:       - 9  do merge with ancestor in a
+--------------
+resolving manifests
+ overwrite None branchmerge True partial False
+ ancestor ec03c2ca8642 local 79cc6877a3b7 remote 924404dff337
+ b: versions differ -> m
+ rev: versions differ -> m
+merging b
+resolving b
+my b@ec03c2ca8642 other b@79cc6877a3b7 ancestor a@924404dff337
+merging rev
+resolving rev
+my rev@ec03c2ca8642 other rev@79cc6877a3b7 ancestor rev@924404dff337
+0 files updated, 2 files merged, 0 files removed, 0 files unresolved
+(branch merge, don't forget to commit)
+--------------
+M b
+--------------
+
+--------------
+test L:nm a b R:nm a c W:       - 11 get c, keep b
+--------------
+resolving manifests
+ overwrite None branchmerge True partial False
+ ancestor ecf3cb2a4219 local e6abcc1a30c2 remote 924404dff337
+ rev: versions differ -> m
+ c: remote created -> g
+getting c
+merging rev
+resolving rev
+my rev@ecf3cb2a4219 other rev@e6abcc1a30c2 ancestor rev@924404dff337
+1 files updated, 1 files merged, 0 files removed, 0 files unresolved
+(branch merge, don't forget to commit)
+--------------
+M c
+C b
+--------------
+
+--------------
+test L:nc a b R:up b   W:       - 12 merge b no ancestor
+--------------
+resolving manifests
+ overwrite None branchmerge True partial False
+ ancestor ac809aeed39a local af30c7647fc7 remote 924404dff337
+ b: versions differ -> m
+ rev: versions differ -> m
+merging b
+resolving b
+my b@ac809aeed39a other b@af30c7647fc7 ancestor b@000000000000
+merging rev
+resolving rev
+my rev@ac809aeed39a other rev@af30c7647fc7 ancestor rev@924404dff337
+0 files updated, 2 files merged, 0 files removed, 0 files unresolved
+(branch merge, don't forget to commit)
+--------------
+M b
+C a
+--------------
+
+--------------
+test L:up b   R:nm a b W:       - 13 merge b no ancestor
+--------------
+resolving manifests
+ overwrite None branchmerge True partial False
+ ancestor 59318016310c local e03727d2d66b remote 924404dff337
+ a: other deleted -> r
+ b: versions differ -> m
+ rev: versions differ -> m
+removing a
+merging b
+resolving b
+my b@59318016310c other b@e03727d2d66b ancestor b@000000000000
+merging rev
+resolving rev
+my rev@59318016310c other rev@e03727d2d66b ancestor rev@924404dff337
+0 files updated, 2 files merged, 1 files removed, 0 files unresolved
+(branch merge, don't forget to commit)
+--------------
+M b
+--------------
+
+--------------
+test L:nc a b R:up a b W:       - 14 merge b no ancestor
+--------------
+resolving manifests
+ overwrite None branchmerge True partial False
+ ancestor ac809aeed39a local 8dbce441892a remote 924404dff337
+ a: remote is newer -> g
+ b: versions differ -> m
+ rev: versions differ -> m
+getting a
+merging b
+resolving b
+my b@ac809aeed39a other b@8dbce441892a ancestor b@000000000000
+merging rev
+resolving rev
+my rev@ac809aeed39a other rev@8dbce441892a ancestor rev@924404dff337
+1 files updated, 2 files merged, 0 files removed, 0 files unresolved
+(branch merge, don't forget to commit)
+--------------
+M a
+M b
+--------------
+
+--------------
+test L:up b   R:nm a b W:       - 15 merge b no ancestor, remove a
+--------------
+resolving manifests
+ overwrite None branchmerge True partial False
+ ancestor 59318016310c local e03727d2d66b remote 924404dff337
+ a: other deleted -> r
+ b: versions differ -> m
+ rev: versions differ -> m
+removing a
+merging b
+resolving b
+my b@59318016310c other b@e03727d2d66b ancestor b@000000000000
+merging rev
+resolving rev
+my rev@59318016310c other rev@e03727d2d66b ancestor rev@924404dff337
+0 files updated, 2 files merged, 1 files removed, 0 files unresolved
+(branch merge, don't forget to commit)
+--------------
+M b
+--------------
+
+--------------
+test L:nc a b R:up a b W:       - 16 get a, merge b no ancestor
+--------------
+resolving manifests
+ overwrite None branchmerge True partial False
+ ancestor ac809aeed39a local 8dbce441892a remote 924404dff337
+ a: remote is newer -> g
+ b: versions differ -> m
+ rev: versions differ -> m
+getting a
+merging b
+resolving b
+my b@ac809aeed39a other b@8dbce441892a ancestor b@000000000000
+merging rev
+resolving rev
+my rev@ac809aeed39a other rev@8dbce441892a ancestor rev@924404dff337
+1 files updated, 2 files merged, 0 files removed, 0 files unresolved
+(branch merge, don't forget to commit)
+--------------
+M a
+M b
+--------------
+
+--------------
+test L:up a b R:nc a b W:       - 17 keep a, merge b no ancestor
+--------------
+resolving manifests
+ overwrite None branchmerge True partial False
+ ancestor 0b76e65c8289 local 735846fee2d7 remote 924404dff337
+ b: versions differ -> m
+ rev: versions differ -> m
+merging b
+resolving b
+my b@0b76e65c8289 other b@735846fee2d7 ancestor b@000000000000
+merging rev
+resolving rev
+my rev@0b76e65c8289 other rev@735846fee2d7 ancestor rev@924404dff337
+0 files updated, 2 files merged, 0 files removed, 0 files unresolved
+(branch merge, don't forget to commit)
+--------------
+M b
+C a
+--------------
+
+--------------
+test L:nm a b R:up a b W:       - 18 merge b no ancestor
+--------------
+resolving manifests
+ overwrite None branchmerge True partial False
+ ancestor ecf3cb2a4219 local 8dbce441892a remote 924404dff337
+ b: versions differ -> m
+ rev: versions differ -> m
+ a: prompt recreating -> g
+getting a
+merging b
+resolving b
+my b@ecf3cb2a4219 other b@8dbce441892a ancestor b@000000000000
+merging rev
+resolving rev
+my rev@ecf3cb2a4219 other rev@8dbce441892a ancestor rev@924404dff337
+1 files updated, 2 files merged, 0 files removed, 0 files unresolved
+(branch merge, don't forget to commit)
+--------------
+M a
+M b
+--------------
+
+--------------
+test L:up a b R:nm a b W:       - 19 merge b no ancestor, prompt remove a
+--------------
+resolving manifests
+ overwrite None branchmerge True partial False
+ ancestor 0b76e65c8289 local e03727d2d66b remote 924404dff337
+ b: versions differ -> m
+ rev: versions differ -> m
+merging b
+resolving b
+my b@0b76e65c8289 other b@e03727d2d66b ancestor b@000000000000
+merging rev
+resolving rev
+my rev@0b76e65c8289 other rev@e03727d2d66b ancestor rev@924404dff337
+0 files updated, 2 files merged, 0 files removed, 0 files unresolved
+(branch merge, don't forget to commit)
+--------------
+M b
+C a
+--------------
+
+--------------
+test L:up a   R:um a b W:       - 20 merge a and b to b, remove a
+--------------
+resolving manifests
+ overwrite None branchmerge True partial False
+ ancestor e300d1c794ec local 79cc6877a3b7 remote 924404dff337
+ a: remote moved -> c
+ rev: versions differ -> m
+merging a and b to b
+resolving a
+my a@e300d1c794ec other b@79cc6877a3b7 ancestor a@924404dff337
+copying a to b
+removing a
+merging rev
+resolving rev
+my rev@e300d1c794ec other rev@79cc6877a3b7 ancestor rev@924404dff337
+0 files updated, 2 files merged, 0 files removed, 0 files unresolved
+(branch merge, don't forget to commit)
+--------------
+M b
+  a
+--------------
+
+--------------
+test L:um a b R:up a   W:       - 21 merge a and b to b
+--------------
+resolving manifests
+ overwrite None branchmerge True partial False
+ ancestor ec03c2ca8642 local f4db7e329e71 remote 924404dff337
+ b: local moved -> c
+ rev: versions differ -> m
+merging b and a to b
+resolving b
+my b@ec03c2ca8642 other a@f4db7e329e71 ancestor a@924404dff337
+merging rev
+resolving rev
+my rev@ec03c2ca8642 other rev@f4db7e329e71 ancestor rev@924404dff337
+0 files updated, 2 files merged, 0 files removed, 0 files unresolved
+(branch merge, don't forget to commit)
+--------------
+M b
+--------------
+
+--------------
+test L:nm a b R:up a c W:       - 23 get c, keep b
+--------------
+resolving manifests
+ overwrite None branchmerge True partial False
+ ancestor ecf3cb2a4219 local 2b958612230f remote 924404dff337
+ b: local moved -> c
+ rev: versions differ -> m
+ c: remote created -> g
+merging b and a to b
+resolving b
+my b@ecf3cb2a4219 other a@2b958612230f ancestor a@924404dff337
+getting c
+merging rev
+resolving rev
+my rev@ecf3cb2a4219 other rev@2b958612230f ancestor rev@924404dff337
+1 files updated, 2 files merged, 0 files removed, 0 files unresolved
+(branch merge, don't forget to commit)
+--------------
+M b
+M c
+--------------
+