[PATCH 1 of 2] merge: introduce mergestate
Matt Mackall
mpm at selenic.com
Sun Apr 6 16:46:34 CDT 2008
# HG changeset patch
# User Matt Mackall <mpm at selenic.com>
# Date 1207518365 18000
# Node ID 32649adf4620c895af549abaa4122a0f16488d0a
# Parent 9c426da6b03b2f201e23107af5138d6b4a387428
merge: introduce mergestate
diff -r 9c426da6b03b -r 32649adf4620 mercurial/filemerge.py
--- a/mercurial/filemerge.py Fri Apr 04 16:39:44 2008 +0200
+++ b/mercurial/filemerge.py Sun Apr 06 16:46:05 2008 -0500
@@ -5,7 +5,7 @@
# This software may be used and distributed according to the terms
# of the GNU General Public License, incorporated herein by reference.
-from node import nullrev
+from node import nullrev, short
from i18n import _
import util, os, tempfile, simplemerge, re, filecmp
@@ -99,11 +99,11 @@
if newdata != data:
open(file, "wb").write(newdata)
-def filemerge(repo, fw, fd, fo, wctx, mctx):
+def filemerge(repo, fcl, fco, fca):
"""perform a 3-way merge in the working directory
fw = original filename in the working directory
- fd = destination filename in the working directory
+ fd = current/destination filename in the working directory
fo = filename in other parent
wctx, mctx = working and merge changecontexts
"""
@@ -123,23 +123,21 @@
except IOError:
return False
- fco = mctx.filectx(fo)
- if not fco.cmp(wctx.filectx(fd).data()): # files identical?
+ if not fco.cmp(fcl.data()): # files identical?
return None
ui = repo.ui
- fcm = wctx.filectx(fw)
- fca = fcm.ancestor(fco) or repo.filectx(fw, fileid=nullrev)
- binary = isbin(fcm) or isbin(fco) or isbin(fca)
- symlink = fcm.islink() or fco.islink()
- tool, toolpath = _picktool(repo, ui, fw, binary, symlink)
+ fd = fcl.path()
+ binary = isbin(fcl) or isbin(fco) or isbin(fca)
+ symlink = fcl.islink() or fco.islink()
+ tool, toolpath = _picktool(repo, ui, fd, binary, symlink)
ui.debug(_("picked tool '%s' for %s (binary %s symlink %s)\n") %
- (tool, fw, binary, symlink))
+ (tool, fd, binary, symlink))
if not tool:
tool = "internal:local"
if ui.prompt(_(" no tool found to merge %s\n"
- "keep (l)ocal or take (o)ther?") % fw,
+ "keep (l)ocal or take (o)ther?") % fd,
_("[lo]"), _("l")) != _("l"):
tool = "internal:other"
if tool == "internal:local":
@@ -158,11 +156,8 @@
back = a + ".orig"
util.copyfile(a, back)
- if fw != fo:
- repo.ui.status(_("merging %s and %s\n") % (fw, fo))
- else:
- repo.ui.status(_("merging %s\n") % fw)
- repo.ui.debug(_("my %s other %s ancestor %s\n") % (fcm, fco, fca))
+ repo.ui.status(_("merging %s\n") % fd)
+ repo.ui.debug(_("my %s other %s ancestor %s\n") % (fcl, fco, fca))
# do we attempt to simplemerge first?
if _toolbool(ui, tool, "premerge", not (binary or symlink)):
@@ -176,9 +171,9 @@
util.copyfile(back, a) # restore from backup and try again
env = dict(HG_FILE=fd,
- HG_MY_NODE=str(wctx.parents()[0]),
- HG_OTHER_NODE=str(mctx),
- HG_MY_ISLINK=fcm.islink(),
+ HG_MY_NODE=short(repo.dirstate.parents()[0]),
+ HG_OTHER_NODE=short(repo.dirstate.parents()[1]),
+ HG_MY_ISLINK=fcl.islink(),
HG_OTHER_ISLINK=fco.islink(),
HG_BASE_ISLINK=fca.islink())
@@ -194,7 +189,7 @@
r = util.system(toolpath + ' ' + args, cwd=repo.root, environ=env)
if not r and _toolbool(ui, tool, "checkconflicts"):
- if re.match("^(<<<<<<< .*|=======|>>>>>>> .*)$", fcm.data()):
+ if re.match("^(<<<<<<< .*|=======|>>>>>>> .*)$", fcl.data()):
r = 1
if not r and _toolbool(ui, tool, "checkchanged"):
diff -r 9c426da6b03b -r 32649adf4620 mercurial/merge.py
--- a/mercurial/merge.py Fri Apr 04 16:39:44 2008 +0200
+++ b/mercurial/merge.py Sun Apr 06 16:46:05 2008 -0500
@@ -5,9 +5,72 @@
# This software may be used and distributed according to the terms
# of the GNU General Public License, incorporated herein by reference.
-from node import nullid, nullrev
+from node import nullid, nullrev, hex
from i18n import _
-import errno, util, os, filemerge, copies
+import errno, util, os, filemerge, copies, sha
+
+class mergestate:
+ '''track 3-way merge state of individual files'''
+ def __init__(self, repo):
+ self._repo = repo
+ self._state = {}
+ self._data = {}
+ def clear(self):
+ p = self._repo.join("merge")
+ try:
+ for f in os.listdir(p):
+ os.unlink(os.path.join(p, f))
+ except OSError, err:
+ if err.errno != errno.ENOENT:
+ raise
+ def read(self):
+ try:
+ f = self._repo.opener("merge/state")
+ for l in f:
+ bits = l[:-1].split(" ")
+ dfile, state, hash, afile, anode, ofile, dflags = bits
+ self._state[dfile] = state
+ self._data[dfile] = hash, afile, anode, ofile, dflags
+ except IOError, err:
+ if err.errno != errno.ENOENT:
+ raise
+ def write(self):
+ f = self._repo.opener("merge/state", "w")
+ for d, v in self._state.items():
+ e = self._data[d]
+ f.write("%s %s %s %s %s %s %s\n" %
+ (d, v, e[0], e[1], e[2], e[3], e[4]))
+ def add(self, fcl, fco, fca, fd, flags):
+ hash = sha.sha(fcl.path()).hexdigest()
+ self._repo.opener("merge/" + hash, "w").write(fcl.data())
+ self._state[fd] = 'u'
+ self._data[fd] = (hash, fca.path(), hex(fca.filenode()),
+ fco.path(), flags)
+ def __contains__(self, dfile):
+ return dfile in self._state
+ def __getitem__(self, dfile):
+ return self._state[dfile]
+ def __iter__(self):
+ l = self._state.keys()
+ l.sort()
+ for f in l:
+ yield f
+ def mark(self, dfile, state):
+ self._state[dfile] = state
+ def resolve(self, dfile, wctx, mctx):
+ if self[dfile] == 'r':
+ return 0
+ hash, afile, anode, ofile, flags = self._data[dfile]
+ f = self._repo.opener("merge/" + hash)
+ self._repo.wwrite(dfile, f.read(), flags)
+ fcl = wctx[dfile]
+ fco = mctx[ofile]
+ fca = self._repo.filectx(afile, fileid=anode)
+ r = filemerge.filemerge(self._repo, fcl, fco, fca)
+ if not r:
+ util.set_flags(self._repo.wjoin(dfile), flags)
+ self.mark(dfile, 'r')
+ return r
def _checkunknown(wctx, mctx):
"check for collisions between unknown files and files in mctx"
@@ -202,14 +265,29 @@
updated, merged, removed, unresolved = 0, 0, 0, 0
action.sort()
- # prescan for copy/renames
+
+ ms = mergestate(repo)
+ ms.clear()
+ moves = []
+
+ # prescan for merges
for a in action:
f, m = a[:2]
if m == 'm': # merge
f2, fd, flags, move = a[2:]
- if f != fd:
- repo.ui.debug(_("copying %s to %s\n") % (f, fd))
- repo.wwrite(fd, repo.wread(f), flags)
+ repo.ui.debug(_("preserving %s for resolve of %s\n") % (f, fd))
+ fcl = wctx[f]
+ fco = mctx[f2]
+ fca = fcl.ancestor(fco) or repo.filectx(f, fileid=nullrev)
+ ms.add(fcl, fco, fca, fd, flags)
+ if f != fd and move:
+ moves.append(f)
+
+ # remove renamed files after safely stored
+ for f in moves:
+ if util.lexists(repo.wjoin(f)):
+ repo.ui.debug(_("removing %s\n") % f)
+ os.unlink(repo.wjoin(f))
audit_path = util.path_auditor(repo.root)
@@ -229,7 +307,7 @@
removed += 1
elif m == "m": # merge
f2, fd, flags, move = a[2:]
- r = filemerge.filemerge(repo, f, fd, f2, wctx, mctx)
+ r = ms.resolve(fd, wctx, mctx)
if r > 0:
unresolved += 1
else:
@@ -237,10 +315,6 @@
updated += 1
else:
merged += 1
- util.set_flags(repo.wjoin(fd), flags)
- if f != fd and move and util.lexists(repo.wjoin(f)):
- repo.ui.debug(_("removing %s\n") % f)
- os.unlink(repo.wjoin(f))
elif m == "g": # get
flags = a[2]
repo.ui.note(_("getting %s\n") % f)
@@ -267,6 +341,8 @@
elif m == "e": # exec
flags = a[2]
util.set_flags(repo.wjoin(f), flags)
+
+ ms.write()
return updated, merged, removed, unresolved
diff -r 9c426da6b03b -r 32649adf4620 tests/test-convert-hg-source.out
--- a/tests/test-convert-hg-source.out Fri Apr 04 16:39:44 2008 +0200
+++ b/tests/test-convert-hg-source.out Sun Apr 06 16:46:05 2008 -0500
@@ -1,9 +1,9 @@
created new head
-merging baz and foo
+merging baz
1 files updated, 1 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
1 files updated, 0 files merged, 1 files removed, 0 files unresolved
-merging foo and baz
+merging baz
1 files updated, 1 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
created new head
diff -r 9c426da6b03b -r 32649adf4620 tests/test-copy-move-merge.out
--- a/tests/test-copy-move-merge.out Fri Apr 04 16:39:44 2008 +0200
+++ b/tests/test-copy-move-merge.out Sun Apr 06 16:46:05 2008 -0500
@@ -12,16 +12,16 @@
checking for directory renames
a: remote moved to c -> m
a: remote moved to b -> m
-copying a to b
-copying a to c
-picked tool 'internal:merge' for a (binary False symlink False)
-merging a and b
-my a at fb3948d97f07+ other b at 40da226db0f0 ancestor a at 583c7b748052
+preserving a for resolve of b
+preserving a for resolve of c
+removing a
+picked tool 'internal:merge' for b (binary False symlink False)
+merging b
+my b at fb3948d97f07+ other b at 40da226db0f0 ancestor a at 583c7b748052
premerge successful
-removing a
-picked tool 'internal:merge' for a (binary False symlink False)
-merging a and c
-my a at fb3948d97f07+ other c at 40da226db0f0 ancestor a at 583c7b748052
+picked tool 'internal:merge' for c (binary False symlink False)
+merging c
+my c at fb3948d97f07+ other c at 40da226db0f0 ancestor a at 583c7b748052
premerge successful
0 files updated, 2 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
diff -r 9c426da6b03b -r 32649adf4620 tests/test-double-merge.out
--- a/tests/test-double-merge.out Fri Apr 04 16:39:44 2008 +0200
+++ b/tests/test-double-merge.out Sun Apr 06 16:46:05 2008 -0500
@@ -10,10 +10,11 @@
checking for directory renames
foo: versions differ -> m
foo: remote copied to bar -> m
-copying foo to bar
-picked tool 'internal:merge' for foo (binary False symlink False)
-merging foo and bar
-my foo at 2092631ce82b+ other bar at 7731dad1c2b9 ancestor foo at 310fd17130da
+preserving foo for resolve of bar
+preserving foo for resolve of foo
+picked tool 'internal:merge' for bar (binary False symlink False)
+merging bar
+my bar at 2092631ce82b+ other bar at 7731dad1c2b9 ancestor foo at 310fd17130da
premerge successful
picked tool 'internal:merge' for foo (binary False symlink False)
merging foo
diff -r 9c426da6b03b -r 32649adf4620 tests/test-issue612.out
--- a/tests/test-issue612.out Fri Apr 04 16:39:44 2008 +0200
+++ b/tests/test-issue612.out Sun Apr 06 16:46:05 2008 -0500
@@ -3,7 +3,7 @@
1 files updated, 0 files merged, 1 files removed, 0 files unresolved
created new head
? src/a.o
-merging src/a.c and source/a.c
+merging source/a.c
1 files updated, 1 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
M source/a.c
diff -r 9c426da6b03b -r 32649adf4620 tests/test-issue672.out
--- a/tests/test-issue672.out Fri Apr 04 16:39:44 2008 +0200
+++ b/tests/test-issue672.out Sun Apr 06 16:46:05 2008 -0500
@@ -30,8 +30,9 @@
1a -> 1 *
checking for directory renames
1a: local moved to 1 -> m
+preserving 1a for resolve of 1a
picked tool 'internal:merge' for 1a (binary False symlink False)
-merging 1a and 1
+merging 1a
my 1a at ac7575e3c052+ other 1 at 746e9549ea96 ancestor 1 at 81f4b099af3d
premerge successful
0 files updated, 1 files merged, 0 files removed, 0 files unresolved
@@ -47,11 +48,11 @@
1a -> 1 *
checking for directory renames
1: remote moved to 1a -> m
-copying 1 to 1a
-picked tool 'internal:merge' for 1 (binary False symlink False)
-merging 1 and 1a
-my 1 at 746e9549ea96+ other 1a at ac7575e3c052 ancestor 1 at 81f4b099af3d
+preserving 1 for resolve of 1a
+removing 1
+picked tool 'internal:merge' for 1a (binary False symlink False)
+merging 1a
+my 1a at 746e9549ea96+ other 1a at ac7575e3c052 ancestor 1 at 81f4b099af3d
premerge successful
-removing 1
0 files updated, 1 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
diff -r 9c426da6b03b -r 32649adf4620 tests/test-merge-commit.out
--- a/tests/test-merge-commit.out Fri Apr 04 16:39:44 2008 +0200
+++ b/tests/test-merge-commit.out Sun Apr 06 16:46:05 2008 -0500
@@ -1,6 +1,6 @@
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
created new head
-merging bar and foo
+merging bar
0 files updated, 1 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
% contents of bar should be line0 line1 line2
@@ -27,6 +27,7 @@
ancestor 0a3ab4856510 local 2d2f9a22c82b+ remote 7d3b554bfdf1
searching for copies back to rev 1
bar: versions differ -> m
+preserving bar for resolve of bar
picked tool 'internal:merge' for bar (binary False symlink False)
merging bar
my bar at 2d2f9a22c82b+ other bar at 7d3b554bfdf1 ancestor bar at 0a3ab4856510
@@ -49,7 +50,7 @@
adding file changes
added 3 changesets with 3 changes to 2 files (+1 heads)
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-merging foo and bar
+merging bar
0 files updated, 1 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
% contents of bar should be line0 line1 line2
@@ -76,6 +77,7 @@
ancestor 0a3ab4856510 local 2d2f9a22c82b+ remote 96ab80c60897
searching for copies back to rev 1
bar: versions differ -> m
+preserving bar for resolve of bar
picked tool 'internal:merge' for bar (binary False symlink False)
merging bar
my bar at 2d2f9a22c82b+ other bar at 96ab80c60897 ancestor bar at 0a3ab4856510
diff -r 9c426da6b03b -r 32649adf4620 tests/test-merge-remove.out
--- a/tests/test-merge-remove.out Fri Apr 04 16:39:44 2008 +0200
+++ b/tests/test-merge-remove.out Sun Apr 06 16:46:05 2008 -0500
@@ -1,5 +1,5 @@
created new head
-merging foo1 and foo
+merging foo1
1 files updated, 1 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
n 0 -2 bar
diff -r 9c426da6b03b -r 32649adf4620 tests/test-merge10.out
--- a/tests/test-merge10.out Fri Apr 04 16:39:44 2008 +0200
+++ b/tests/test-merge10.out Sun Apr 06 16:46:05 2008 -0500
@@ -8,7 +8,7 @@
added 1 changesets with 1 changes to 1 files (+1 heads)
(run 'hg heads' to see heads, 'hg merge' to merge)
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
-merging testdir/subdir/a and testdir/a
+merging testdir/subdir/a
0 files updated, 1 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
M testdir/subdir/a
diff -r 9c426da6b03b -r 32649adf4620 tests/test-merge7.out
--- a/tests/test-merge7.out Fri Apr 04 16:39:44 2008 +0200
+++ b/tests/test-merge7.out Sun Apr 06 16:46:05 2008 -0500
@@ -26,6 +26,7 @@
ancestor faaea63e63a9 local 451c744aabcc+ remote a070d41e8360
searching for copies back to rev 1
test.txt: versions differ -> m
+preserving test.txt for resolve of test.txt
picked tool 'internal:merge' for test.txt (binary False symlink False)
merging test.txt
my test.txt at 451c744aabcc+ other test.txt at a070d41e8360 ancestor test.txt at faaea63e63a9
diff -r 9c426da6b03b -r 32649adf4620 tests/test-merge9.out
--- a/tests/test-merge9.out Fri Apr 04 16:39:44 2008 +0200
+++ b/tests/test-merge9.out Sun Apr 06 16:46:05 2008 -0500
@@ -5,7 +5,7 @@
created new head
merging bar
merging bar failed!
-merging foo and baz
+merging baz
1 files updated, 1 files merged, 0 files removed, 1 files unresolved
There are unresolved merges, you can redo the full merge using:
hg update -C 2
@@ -13,7 +13,7 @@
3 files updated, 0 files merged, 1 files removed, 0 files unresolved
merging bar
merging bar failed!
-merging baz and foo
+merging baz
1 files updated, 1 files merged, 0 files removed, 1 files unresolved
There are unresolved merges, you can redo the full merge using:
hg update -C 1
diff -r 9c426da6b03b -r 32649adf4620 tests/test-rename-merge1.out
--- a/tests/test-rename-merge1.out Fri Apr 04 16:39:44 2008 +0200
+++ b/tests/test-rename-merge1.out Sun Apr 06 16:46:05 2008 -0500
@@ -19,12 +19,12 @@
a2: divergent renames -> dr
a: remote moved to b -> m
b2: remote created -> g
-copying a to b
-picked tool 'internal:merge' for a (binary False symlink False)
-merging a and b
-my a at f26ec4fc3fa3+ other b at 8e765a822af2 ancestor a at af1939970a1c
+preserving a for resolve of b
+removing a
+picked tool 'internal:merge' for b (binary False symlink False)
+merging b
+my b at f26ec4fc3fa3+ other b at 8e765a822af2 ancestor a at af1939970a1c
premerge successful
-removing a
warning: detected divergent renames of a2 to:
c2
b2
diff -r 9c426da6b03b -r 32649adf4620 tests/test-rename-merge2.out
--- a/tests/test-rename-merge2.out Fri Apr 04 16:39:44 2008 +0200
+++ b/tests/test-rename-merge2.out Sun Apr 06 16:46:05 2008 -0500
@@ -13,10 +13,11 @@
checking for directory renames
rev: versions differ -> m
a: remote copied to b -> m
-copying a to b
-picked tool 'python ../merge' for a (binary False symlink False)
-merging a and b
-my a at e300d1c794ec+ other b at 735846fee2d7 ancestor a at 924404dff337
+preserving a for resolve of b
+preserving rev for resolve of rev
+picked tool 'python ../merge' for b (binary False symlink False)
+merging b
+my b at e300d1c794ec+ other b at 735846fee2d7 ancestor a at 924404dff337
premerge successful
picked tool 'python ../merge' for rev (binary False symlink False)
merging rev
@@ -45,9 +46,11 @@
a: remote is newer -> g
b: local copied to a -> m
rev: versions differ -> m
+preserving b for resolve of b
+preserving rev for resolve of rev
getting a
picked tool 'python ../merge' for b (binary False symlink False)
-merging b and a
+merging b
my b at ac809aeed39a+ other a at f4db7e329e71 ancestor a at 924404dff337
premerge successful
picked tool 'python ../merge' for rev (binary False symlink False)
@@ -76,12 +79,13 @@
checking for directory renames
rev: versions differ -> m
a: remote moved to b -> m
-copying a to b
-picked tool 'python ../merge' for a (binary False symlink False)
-merging a and b
-my a at e300d1c794ec+ other b at e03727d2d66b ancestor a at 924404dff337
+preserving a for resolve of b
+preserving rev for resolve of rev
+removing a
+picked tool 'python ../merge' for b (binary False symlink False)
+merging b
+my b at e300d1c794ec+ other b at e03727d2d66b ancestor a at 924404dff337
premerge successful
-removing a
picked tool 'python ../merge' for rev (binary False symlink False)
merging rev
my rev at e300d1c794ec+ other rev at e03727d2d66b ancestor rev at 924404dff337
@@ -107,8 +111,10 @@
checking for directory renames
b: local moved to a -> m
rev: versions differ -> m
+preserving b for resolve of b
+preserving rev for resolve of rev
picked tool 'python ../merge' for b (binary False symlink False)
-merging b and a
+merging b
my b at ecf3cb2a4219+ other a at f4db7e329e71 ancestor a at 924404dff337
premerge successful
picked tool 'python ../merge' for rev (binary False symlink False)
@@ -136,6 +142,7 @@
checking for directory renames
rev: versions differ -> m
b: remote created -> g
+preserving rev for resolve of rev
getting b
picked tool 'python ../merge' for rev (binary False symlink False)
merging rev
@@ -161,6 +168,7 @@
b -> a
checking for directory renames
rev: versions differ -> m
+preserving rev for resolve of rev
picked tool 'python ../merge' for rev (binary False symlink False)
merging rev
my rev at ac809aeed39a+ other rev at 97c705ade336 ancestor rev at 924404dff337
@@ -187,6 +195,7 @@
a: other deleted -> r
rev: versions differ -> m
b: remote created -> g
+preserving rev for resolve of rev
removing a
getting b
picked tool 'python ../merge' for rev (binary False symlink False)
@@ -212,6 +221,7 @@
b -> a
checking for directory renames
rev: versions differ -> m
+preserving rev for resolve of rev
picked tool 'python ../merge' for rev (binary False symlink False)
merging rev
my rev at ecf3cb2a4219+ other rev at 97c705ade336 ancestor rev at 924404dff337
@@ -231,6 +241,8 @@
searching for copies back to rev 1
b: versions differ -> m
rev: versions differ -> m
+preserving b for resolve of b
+preserving rev for resolve of rev
picked tool 'python ../merge' for b (binary False symlink False)
merging b
my b at ec03c2ca8642+ other b at 79cc6877a3b7 ancestor a at 924404dff337
@@ -262,6 +274,7 @@
a: divergent renames -> dr
rev: versions differ -> m
c: remote created -> g
+preserving rev for resolve of rev
warning: detected divergent renames of a to:
b
c
@@ -286,6 +299,8 @@
searching for copies back to rev 1
b: versions differ -> m
rev: versions differ -> m
+preserving b for resolve of b
+preserving rev for resolve of rev
picked tool 'python ../merge' for b (binary False symlink False)
merging b
my b at ac809aeed39a+ other b at af30c7647fc7 ancestor b at 000000000000
@@ -310,6 +325,8 @@
a: other deleted -> r
b: versions differ -> m
rev: versions differ -> m
+preserving b for resolve of b
+preserving rev for resolve of rev
removing a
picked tool 'python ../merge' for b (binary False symlink False)
merging b
@@ -334,6 +351,8 @@
a: remote is newer -> g
b: versions differ -> m
rev: versions differ -> m
+preserving b for resolve of b
+preserving rev for resolve of rev
getting a
picked tool 'python ../merge' for b (binary False symlink False)
merging b
@@ -359,6 +378,8 @@
a: other deleted -> r
b: versions differ -> m
rev: versions differ -> m
+preserving b for resolve of b
+preserving rev for resolve of rev
removing a
picked tool 'python ../merge' for b (binary False symlink False)
merging b
@@ -383,6 +404,8 @@
a: remote is newer -> g
b: versions differ -> m
rev: versions differ -> m
+preserving b for resolve of b
+preserving rev for resolve of rev
getting a
picked tool 'python ../merge' for b (binary False symlink False)
merging b
@@ -407,6 +430,8 @@
searching for copies back to rev 1
b: versions differ -> m
rev: versions differ -> m
+preserving b for resolve of b
+preserving rev for resolve of rev
picked tool 'python ../merge' for b (binary False symlink False)
merging b
my b at 0b76e65c8289+ other b at 735846fee2d7 ancestor b at 000000000000
@@ -431,6 +456,8 @@
b: versions differ -> m
rev: versions differ -> m
a: prompt recreating -> g
+preserving b for resolve of b
+preserving rev for resolve of rev
getting a
picked tool 'python ../merge' for b (binary False symlink False)
merging b
@@ -455,6 +482,8 @@
searching for copies back to rev 1
b: versions differ -> m
rev: versions differ -> m
+preserving b for resolve of b
+preserving rev for resolve of rev
picked tool 'python ../merge' for b (binary False symlink False)
merging b
my b at 0b76e65c8289+ other b at e03727d2d66b ancestor b at 000000000000
@@ -483,11 +512,12 @@
checking for directory renames
rev: versions differ -> m
a: remote moved to b -> m
-copying a to b
-picked tool 'python ../merge' for a (binary False symlink False)
-merging a and b
-my a at e300d1c794ec+ other b at 79cc6877a3b7 ancestor a at 924404dff337
+preserving a for resolve of b
+preserving rev for resolve of rev
removing a
+picked tool 'python ../merge' for b (binary False symlink False)
+merging b
+my b at e300d1c794ec+ other b at 79cc6877a3b7 ancestor a at 924404dff337
picked tool 'python ../merge' for rev (binary False symlink False)
merging rev
my rev at e300d1c794ec+ other rev at 79cc6877a3b7 ancestor rev at 924404dff337
@@ -513,8 +543,10 @@
checking for directory renames
b: local moved to a -> m
rev: versions differ -> m
+preserving b for resolve of b
+preserving rev for resolve of rev
picked tool 'python ../merge' for b (binary False symlink False)
-merging b and a
+merging b
my b at ec03c2ca8642+ other a at f4db7e329e71 ancestor a at 924404dff337
picked tool 'python ../merge' for rev (binary False symlink False)
merging rev
@@ -544,8 +576,10 @@
b: local moved to a -> m
rev: versions differ -> m
c: remote created -> g
+preserving b for resolve of b
+preserving rev for resolve of rev
picked tool 'python ../merge' for b (binary False symlink False)
-merging b and a
+merging b
my b at ecf3cb2a4219+ other a at 2b958612230f ancestor a at 924404dff337
premerge successful
getting c
diff -r 9c426da6b03b -r 32649adf4620 tests/test-up-local-change.out
--- a/tests/test-up-local-change.out Fri Apr 04 16:39:44 2008 +0200
+++ b/tests/test-up-local-change.out Sun Apr 06 16:46:05 2008 -0500
@@ -23,6 +23,7 @@
b
a: versions differ -> m
b: remote created -> g
+preserving a for resolve of a
picked tool 'true' for a (binary False symlink False)
merging a
my a at 33aaa84a386b+ other a at 802f095af299 ancestor a at 33aaa84a386b
@@ -60,6 +61,7 @@
b
a: versions differ -> m
b: remote created -> g
+preserving a for resolve of a
picked tool 'true' for a (binary False symlink False)
merging a
my a at 33aaa84a386b+ other a at 802f095af299 ancestor a at 33aaa84a386b
@@ -113,6 +115,8 @@
searching for copies back to rev 1
a: versions differ -> m
b: versions differ -> m
+preserving a for resolve of a
+preserving b for resolve of b
picked tool 'true' for a (binary False symlink False)
merging a
my a at 802f095af299+ other a at 030602aee63d ancestor a at 33aaa84a386b
More information about the Mercurial-devel
mailing list