##// END OF EJS Templates
merge: introduce mergestate
Matt Mackall -
r6512:368a4ec6 default
parent child Browse files
Show More
@@ -5,7 +5,7 b''
5 # This software may be used and distributed according to the terms
5 # This software may be used and distributed according to the terms
6 # of the GNU General Public License, incorporated herein by reference.
6 # of the GNU General Public License, incorporated herein by reference.
7
7
8 from node import nullrev
8 from node import nullrev, short
9 from i18n import _
9 from i18n import _
10 import util, os, tempfile, simplemerge, re, filecmp
10 import util, os, tempfile, simplemerge, re, filecmp
11
11
@@ -99,13 +99,14 b' def _matcheol(file, origfile):'
99 if newdata != data:
99 if newdata != data:
100 open(file, "wb").write(newdata)
100 open(file, "wb").write(newdata)
101
101
102 def filemerge(repo, fw, fd, fo, wctx, mctx):
102 def filemerge(repo, mynode, orig, fcd, fco, fca):
103 """perform a 3-way merge in the working directory
103 """perform a 3-way merge in the working directory
104
104
105 fw = original filename in the working directory
105 mynode = parent node before merge
106 fd = destination filename in the working directory
106 orig = original local filename before merge
107 fo = filename in other parent
107 fco = other file context
108 wctx, mctx = working and merge changecontexts
108 fca = ancestor file context
109 fcd = local file context for current/destination file
109 """
110 """
110
111
111 def temp(prefix, ctx):
112 def temp(prefix, ctx):
@@ -123,23 +124,21 b' def filemerge(repo, fw, fd, fo, wctx, mc'
123 except IOError:
124 except IOError:
124 return False
125 return False
125
126
126 fco = mctx.filectx(fo)
127 if not fco.cmp(fcd.data()): # files identical?
127 if not fco.cmp(wctx.filectx(fd).data()): # files identical?
128 return None
128 return None
129
129
130 ui = repo.ui
130 ui = repo.ui
131 fcm = wctx.filectx(fw)
131 fd = fcd.path()
132 fca = fcm.ancestor(fco) or repo.filectx(fw, fileid=nullrev)
132 binary = isbin(fcd) or isbin(fco) or isbin(fca)
133 binary = isbin(fcm) or isbin(fco) or isbin(fca)
133 symlink = fcd.islink() or fco.islink()
134 symlink = fcm.islink() or fco.islink()
134 tool, toolpath = _picktool(repo, ui, fd, binary, symlink)
135 tool, toolpath = _picktool(repo, ui, fw, binary, symlink)
136 ui.debug(_("picked tool '%s' for %s (binary %s symlink %s)\n") %
135 ui.debug(_("picked tool '%s' for %s (binary %s symlink %s)\n") %
137 (tool, fw, binary, symlink))
136 (tool, fd, binary, symlink))
138
137
139 if not tool:
138 if not tool:
140 tool = "internal:local"
139 tool = "internal:local"
141 if ui.prompt(_(" no tool found to merge %s\n"
140 if ui.prompt(_(" no tool found to merge %s\n"
142 "keep (l)ocal or take (o)ther?") % fw,
141 "keep (l)ocal or take (o)ther?") % fd,
143 _("[lo]"), _("l")) != _("l"):
142 _("[lo]"), _("l")) != _("l"):
144 tool = "internal:other"
143 tool = "internal:other"
145 if tool == "internal:local":
144 if tool == "internal:local":
@@ -158,11 +157,12 b' def filemerge(repo, fw, fd, fo, wctx, mc'
158 back = a + ".orig"
157 back = a + ".orig"
159 util.copyfile(a, back)
158 util.copyfile(a, back)
160
159
161 if fw != fo:
160 if orig != fco.path():
162 repo.ui.status(_("merging %s and %s\n") % (fw, fo))
161 repo.ui.status(_("merging %s and %s to %s\n") % (orig, fco.path(), fd))
163 else:
162 else:
164 repo.ui.status(_("merging %s\n") % fw)
163 repo.ui.status(_("merging %s\n") % fd)
165 repo.ui.debug(_("my %s other %s ancestor %s\n") % (fcm, fco, fca))
164
165 repo.ui.debug(_("my %s other %s ancestor %s\n") % (fcd, fco, fca))
166
166
167 # do we attempt to simplemerge first?
167 # do we attempt to simplemerge first?
168 if _toolbool(ui, tool, "premerge", not (binary or symlink)):
168 if _toolbool(ui, tool, "premerge", not (binary or symlink)):
@@ -176,9 +176,9 b' def filemerge(repo, fw, fd, fo, wctx, mc'
176 util.copyfile(back, a) # restore from backup and try again
176 util.copyfile(back, a) # restore from backup and try again
177
177
178 env = dict(HG_FILE=fd,
178 env = dict(HG_FILE=fd,
179 HG_MY_NODE=str(wctx.parents()[0]),
179 HG_MY_NODE=short(mynode),
180 HG_OTHER_NODE=str(mctx),
180 HG_OTHER_NODE=str(fco.changectx()),
181 HG_MY_ISLINK=fcm.islink(),
181 HG_MY_ISLINK=fcd.islink(),
182 HG_OTHER_ISLINK=fco.islink(),
182 HG_OTHER_ISLINK=fco.islink(),
183 HG_BASE_ISLINK=fca.islink())
183 HG_BASE_ISLINK=fca.islink())
184
184
@@ -194,7 +194,7 b' def filemerge(repo, fw, fd, fo, wctx, mc'
194 r = util.system(toolpath + ' ' + args, cwd=repo.root, environ=env)
194 r = util.system(toolpath + ' ' + args, cwd=repo.root, environ=env)
195
195
196 if not r and _toolbool(ui, tool, "checkconflicts"):
196 if not r and _toolbool(ui, tool, "checkconflicts"):
197 if re.match("^(<<<<<<< .*|=======|>>>>>>> .*)$", fcm.data()):
197 if re.match("^(<<<<<<< .*|=======|>>>>>>> .*)$", fcd.data()):
198 r = 1
198 r = 1
199
199
200 if not r and _toolbool(ui, tool, "checkchanged"):
200 if not r and _toolbool(ui, tool, "checkchanged"):
@@ -5,9 +5,45 b''
5 # This software may be used and distributed according to the terms
5 # This software may be used and distributed according to the terms
6 # of the GNU General Public License, incorporated herein by reference.
6 # of the GNU General Public License, incorporated herein by reference.
7
7
8 from node import nullid, nullrev
8 from node import nullid, nullrev, hex
9 from i18n import _
9 from i18n import _
10 import errno, util, os, filemerge, copies
10 import errno, util, os, filemerge, copies, sha, shutil
11
12 class mergestate(object):
13 '''track 3-way merge state of individual files'''
14 def __init__(self, repo):
15 self._repo = repo
16 self._state = {}
17 self._data = {}
18 def reset(self, node):
19 self._local = node
20 shutil.rmtree(self._repo.join("merge"), True)
21 def add(self, fcl, fco, fca, fd, flags):
22 hash = sha.sha(fcl.path()).hexdigest()
23 self._repo.opener("merge/" + hash, "w").write(fcl.data())
24 self._state[fd] = 'u'
25 self._data[fd] = (hash, fcl.path(), fca.path(), hex(fca.filenode()),
26 fco.path(), flags)
27 def __contains__(self, dfile):
28 return dfile in self._state
29 def __getitem__(self, dfile):
30 return self._state[dfile]
31 def mark(self, dfile, state):
32 self._state[dfile] = state
33 def resolve(self, dfile, wctx, octx):
34 if self[dfile] == 'r':
35 return 0
36 hash, lfile, afile, anode, ofile, flags = self._data[dfile]
37 f = self._repo.opener("merge/" + hash)
38 self._repo.wwrite(dfile, f.read(), flags)
39 fcd = wctx[dfile]
40 fco = octx[ofile]
41 fca = self._repo.filectx(afile, fileid=anode)
42 r = filemerge.filemerge(self._repo, self._local, lfile, fcd, fco, fca)
43 if not r:
44 util.set_flags(self._repo.wjoin(dfile), flags)
45 self.mark(dfile, 'r')
46 return r
11
47
12 def _checkunknown(wctx, mctx):
48 def _checkunknown(wctx, mctx):
13 "check for collisions between unknown files and files in mctx"
49 "check for collisions between unknown files and files in mctx"
@@ -202,14 +238,29 b' def applyupdates(repo, action, wctx, mct'
202
238
203 updated, merged, removed, unresolved = 0, 0, 0, 0
239 updated, merged, removed, unresolved = 0, 0, 0, 0
204 action.sort()
240 action.sort()
205 # prescan for copy/renames
241
242 ms = mergestate(repo)
243 ms.reset(wctx.parents()[0].node())
244 moves = []
245
246 # prescan for merges
206 for a in action:
247 for a in action:
207 f, m = a[:2]
248 f, m = a[:2]
208 if m == 'm': # merge
249 if m == 'm': # merge
209 f2, fd, flags, move = a[2:]
250 f2, fd, flags, move = a[2:]
210 if f != fd:
251 repo.ui.debug(_("preserving %s for resolve of %s\n") % (f, fd))
211 repo.ui.debug(_("copying %s to %s\n") % (f, fd))
252 fcl = wctx[f]
212 repo.wwrite(fd, repo.wread(f), flags)
253 fco = mctx[f2]
254 fca = fcl.ancestor(fco) or repo.filectx(f, fileid=nullrev)
255 ms.add(fcl, fco, fca, fd, flags)
256 if f != fd and move:
257 moves.append(f)
258
259 # remove renamed files after safely stored
260 for f in moves:
261 if util.lexists(repo.wjoin(f)):
262 repo.ui.debug(_("removing %s\n") % f)
263 os.unlink(repo.wjoin(f))
213
264
214 audit_path = util.path_auditor(repo.root)
265 audit_path = util.path_auditor(repo.root)
215
266
@@ -229,7 +280,7 b' def applyupdates(repo, action, wctx, mct'
229 removed += 1
280 removed += 1
230 elif m == "m": # merge
281 elif m == "m": # merge
231 f2, fd, flags, move = a[2:]
282 f2, fd, flags, move = a[2:]
232 r = filemerge.filemerge(repo, f, fd, f2, wctx, mctx)
283 r = ms.resolve(fd, wctx, mctx)
233 if r > 0:
284 if r > 0:
234 unresolved += 1
285 unresolved += 1
235 else:
286 else:
@@ -237,10 +288,6 b' def applyupdates(repo, action, wctx, mct'
237 updated += 1
288 updated += 1
238 else:
289 else:
239 merged += 1
290 merged += 1
240 util.set_flags(repo.wjoin(fd), flags)
241 if f != fd and move and util.lexists(repo.wjoin(f)):
242 repo.ui.debug(_("removing %s\n") % f)
243 os.unlink(repo.wjoin(f))
244 elif m == "g": # get
291 elif m == "g": # get
245 flags = a[2]
292 flags = a[2]
246 repo.ui.note(_("getting %s\n") % f)
293 repo.ui.note(_("getting %s\n") % f)
@@ -1,9 +1,9 b''
1 created new head
1 created new head
2 merging baz and foo
2 merging baz and foo to baz
3 1 files updated, 1 files merged, 0 files removed, 0 files unresolved
3 1 files updated, 1 files merged, 0 files removed, 0 files unresolved
4 (branch merge, don't forget to commit)
4 (branch merge, don't forget to commit)
5 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
5 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
6 merging foo and baz
6 merging foo and baz to baz
7 1 files updated, 1 files merged, 0 files removed, 0 files unresolved
7 1 files updated, 1 files merged, 0 files removed, 0 files unresolved
8 (branch merge, don't forget to commit)
8 (branch merge, don't forget to commit)
9 created new head
9 created new head
@@ -12,16 +12,16 b' resolving manifests'
12 checking for directory renames
12 checking for directory renames
13 a: remote moved to c -> m
13 a: remote moved to c -> m
14 a: remote moved to b -> m
14 a: remote moved to b -> m
15 copying a to b
15 preserving a for resolve of b
16 copying a to c
16 preserving a for resolve of c
17 picked tool 'internal:merge' for a (binary False symlink False)
17 removing a
18 merging a and b
18 picked tool 'internal:merge' for b (binary False symlink False)
19 my a@fb3948d97f07+ other b@40da226db0f0 ancestor a@583c7b748052
19 merging a and b to b
20 my b@fb3948d97f07+ other b@40da226db0f0 ancestor a@583c7b748052
20 premerge successful
21 premerge successful
21 removing a
22 picked tool 'internal:merge' for c (binary False symlink False)
22 picked tool 'internal:merge' for a (binary False symlink False)
23 merging a and c to c
23 merging a and c
24 my c@fb3948d97f07+ other c@40da226db0f0 ancestor a@583c7b748052
24 my a@fb3948d97f07+ other c@40da226db0f0 ancestor a@583c7b748052
25 premerge successful
25 premerge successful
26 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
26 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
27 (branch merge, don't forget to commit)
27 (branch merge, don't forget to commit)
@@ -10,10 +10,11 b' resolving manifests'
10 checking for directory renames
10 checking for directory renames
11 foo: versions differ -> m
11 foo: versions differ -> m
12 foo: remote copied to bar -> m
12 foo: remote copied to bar -> m
13 copying foo to bar
13 preserving foo for resolve of bar
14 picked tool 'internal:merge' for foo (binary False symlink False)
14 preserving foo for resolve of foo
15 merging foo and bar
15 picked tool 'internal:merge' for bar (binary False symlink False)
16 my foo@2092631ce82b+ other bar@7731dad1c2b9 ancestor foo@310fd17130da
16 merging foo and bar to bar
17 my bar@2092631ce82b+ other bar@7731dad1c2b9 ancestor foo@310fd17130da
17 premerge successful
18 premerge successful
18 picked tool 'internal:merge' for foo (binary False symlink False)
19 picked tool 'internal:merge' for foo (binary False symlink False)
19 merging foo
20 merging foo
@@ -34,9 +34,9 b' adding more to file a'
34 -end-
34 -end-
35 dumprevlog done
35 dumprevlog done
36 undumping:
36 undumping:
37 .hg/store/data/a.i
37 .hg/store/00changelog.i
38 .hg/store/00manifest.i
38 .hg/store/00manifest.i
39 .hg/store/00changelog.i
39 .hg/store/data/a.i
40 undumping done
40 undumping done
41 checking changesets
41 checking changesets
42 checking manifests
42 checking manifests
@@ -3,7 +3,7 b' moving src/a.c to source/a.c'
3 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
3 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
4 created new head
4 created new head
5 ? src/a.o
5 ? src/a.o
6 merging src/a.c and source/a.c
6 merging src/a.c and source/a.c to source/a.c
7 1 files updated, 1 files merged, 0 files removed, 0 files unresolved
7 1 files updated, 1 files merged, 0 files removed, 0 files unresolved
8 (branch merge, don't forget to commit)
8 (branch merge, don't forget to commit)
9 M source/a.c
9 M source/a.c
@@ -30,8 +30,9 b' resolving manifests'
30 1a -> 1 *
30 1a -> 1 *
31 checking for directory renames
31 checking for directory renames
32 1a: local moved to 1 -> m
32 1a: local moved to 1 -> m
33 preserving 1a for resolve of 1a
33 picked tool 'internal:merge' for 1a (binary False symlink False)
34 picked tool 'internal:merge' for 1a (binary False symlink False)
34 merging 1a and 1
35 merging 1a and 1 to 1a
35 my 1a@ac7575e3c052+ other 1@746e9549ea96 ancestor 1@81f4b099af3d
36 my 1a@ac7575e3c052+ other 1@746e9549ea96 ancestor 1@81f4b099af3d
36 premerge successful
37 premerge successful
37 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
38 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
@@ -47,11 +48,11 b' resolving manifests'
47 1a -> 1 *
48 1a -> 1 *
48 checking for directory renames
49 checking for directory renames
49 1: remote moved to 1a -> m
50 1: remote moved to 1a -> m
50 copying 1 to 1a
51 preserving 1 for resolve of 1a
51 picked tool 'internal:merge' for 1 (binary False symlink False)
52 removing 1
52 merging 1 and 1a
53 picked tool 'internal:merge' for 1a (binary False symlink False)
53 my 1@746e9549ea96+ other 1a@ac7575e3c052 ancestor 1@81f4b099af3d
54 merging 1 and 1a to 1a
55 my 1a@746e9549ea96+ other 1a@ac7575e3c052 ancestor 1@81f4b099af3d
54 premerge successful
56 premerge successful
55 removing 1
56 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
57 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
57 (branch merge, don't forget to commit)
58 (branch merge, don't forget to commit)
@@ -1,6 +1,6 b''
1 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
2 created new head
2 created new head
3 merging bar and foo
3 merging bar and foo to bar
4 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
4 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
5 (branch merge, don't forget to commit)
5 (branch merge, don't forget to commit)
6 % contents of bar should be line0 line1 line2
6 % contents of bar should be line0 line1 line2
@@ -27,6 +27,7 b' resolving manifests'
27 ancestor 0a3ab4856510 local 2d2f9a22c82b+ remote 7d3b554bfdf1
27 ancestor 0a3ab4856510 local 2d2f9a22c82b+ remote 7d3b554bfdf1
28 searching for copies back to rev 1
28 searching for copies back to rev 1
29 bar: versions differ -> m
29 bar: versions differ -> m
30 preserving bar for resolve of bar
30 picked tool 'internal:merge' for bar (binary False symlink False)
31 picked tool 'internal:merge' for bar (binary False symlink False)
31 merging bar
32 merging bar
32 my bar@2d2f9a22c82b+ other bar@7d3b554bfdf1 ancestor bar@0a3ab4856510
33 my bar@2d2f9a22c82b+ other bar@7d3b554bfdf1 ancestor bar@0a3ab4856510
@@ -49,7 +50,7 b' adding manifests'
49 adding file changes
50 adding file changes
50 added 3 changesets with 3 changes to 2 files (+1 heads)
51 added 3 changesets with 3 changes to 2 files (+1 heads)
51 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
52 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
52 merging foo and bar
53 merging foo and bar to bar
53 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
54 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
54 (branch merge, don't forget to commit)
55 (branch merge, don't forget to commit)
55 % contents of bar should be line0 line1 line2
56 % contents of bar should be line0 line1 line2
@@ -76,6 +77,7 b' resolving manifests'
76 ancestor 0a3ab4856510 local 2d2f9a22c82b+ remote 96ab80c60897
77 ancestor 0a3ab4856510 local 2d2f9a22c82b+ remote 96ab80c60897
77 searching for copies back to rev 1
78 searching for copies back to rev 1
78 bar: versions differ -> m
79 bar: versions differ -> m
80 preserving bar for resolve of bar
79 picked tool 'internal:merge' for bar (binary False symlink False)
81 picked tool 'internal:merge' for bar (binary False symlink False)
80 merging bar
82 merging bar
81 my bar@2d2f9a22c82b+ other bar@96ab80c60897 ancestor bar@0a3ab4856510
83 my bar@2d2f9a22c82b+ other bar@96ab80c60897 ancestor bar@0a3ab4856510
@@ -1,5 +1,5 b''
1 created new head
1 created new head
2 merging foo1 and foo
2 merging foo1 and foo to foo1
3 1 files updated, 1 files merged, 0 files removed, 0 files unresolved
3 1 files updated, 1 files merged, 0 files removed, 0 files unresolved
4 (branch merge, don't forget to commit)
4 (branch merge, don't forget to commit)
5 n 0 -2 bar
5 n 0 -2 bar
@@ -8,7 +8,7 b' adding file changes'
8 added 1 changesets with 1 changes to 1 files (+1 heads)
8 added 1 changesets with 1 changes to 1 files (+1 heads)
9 (run 'hg heads' to see heads, 'hg merge' to merge)
9 (run 'hg heads' to see heads, 'hg merge' to merge)
10 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
10 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
11 merging testdir/subdir/a and testdir/a
11 merging testdir/subdir/a and testdir/a to testdir/subdir/a
12 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
12 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
13 (branch merge, don't forget to commit)
13 (branch merge, don't forget to commit)
14 M testdir/subdir/a
14 M testdir/subdir/a
@@ -26,6 +26,7 b' resolving manifests'
26 ancestor faaea63e63a9 local 451c744aabcc+ remote a070d41e8360
26 ancestor faaea63e63a9 local 451c744aabcc+ remote a070d41e8360
27 searching for copies back to rev 1
27 searching for copies back to rev 1
28 test.txt: versions differ -> m
28 test.txt: versions differ -> m
29 preserving test.txt for resolve of test.txt
29 picked tool 'internal:merge' for test.txt (binary False symlink False)
30 picked tool 'internal:merge' for test.txt (binary False symlink False)
30 merging test.txt
31 merging test.txt
31 my test.txt@451c744aabcc+ other test.txt@a070d41e8360 ancestor test.txt@faaea63e63a9
32 my test.txt@451c744aabcc+ other test.txt@a070d41e8360 ancestor test.txt@faaea63e63a9
@@ -5,7 +5,7 b' adding quux2'
5 created new head
5 created new head
6 merging bar
6 merging bar
7 merging bar failed!
7 merging bar failed!
8 merging foo and baz
8 merging foo and baz to baz
9 1 files updated, 1 files merged, 0 files removed, 1 files unresolved
9 1 files updated, 1 files merged, 0 files removed, 1 files unresolved
10 There are unresolved merges, you can redo the full merge using:
10 There are unresolved merges, you can redo the full merge using:
11 hg update -C 2
11 hg update -C 2
@@ -13,7 +13,7 b' There are unresolved merges, you can red'
13 3 files updated, 0 files merged, 1 files removed, 0 files unresolved
13 3 files updated, 0 files merged, 1 files removed, 0 files unresolved
14 merging bar
14 merging bar
15 merging bar failed!
15 merging bar failed!
16 merging baz and foo
16 merging baz and foo to baz
17 1 files updated, 1 files merged, 0 files removed, 1 files unresolved
17 1 files updated, 1 files merged, 0 files removed, 1 files unresolved
18 There are unresolved merges, you can redo the full merge using:
18 There are unresolved merges, you can redo the full merge using:
19 hg update -C 1
19 hg update -C 1
@@ -19,12 +19,12 b' resolving manifests'
19 a2: divergent renames -> dr
19 a2: divergent renames -> dr
20 a: remote moved to b -> m
20 a: remote moved to b -> m
21 b2: remote created -> g
21 b2: remote created -> g
22 copying a to b
22 preserving a for resolve of b
23 picked tool 'internal:merge' for a (binary False symlink False)
23 removing a
24 merging a and b
24 picked tool 'internal:merge' for b (binary False symlink False)
25 my a@f26ec4fc3fa3+ other b@8e765a822af2 ancestor a@af1939970a1c
25 merging a and b to b
26 my b@f26ec4fc3fa3+ other b@8e765a822af2 ancestor a@af1939970a1c
26 premerge successful
27 premerge successful
27 removing a
28 warning: detected divergent renames of a2 to:
28 warning: detected divergent renames of a2 to:
29 c2
29 c2
30 b2
30 b2
@@ -13,10 +13,11 b' resolving manifests'
13 checking for directory renames
13 checking for directory renames
14 rev: versions differ -> m
14 rev: versions differ -> m
15 a: remote copied to b -> m
15 a: remote copied to b -> m
16 copying a to b
16 preserving a for resolve of b
17 picked tool 'python ../merge' for a (binary False symlink False)
17 preserving rev for resolve of rev
18 merging a and b
18 picked tool 'python ../merge' for b (binary False symlink False)
19 my a@e300d1c794ec+ other b@735846fee2d7 ancestor a@924404dff337
19 merging a and b to b
20 my b@e300d1c794ec+ other b@735846fee2d7 ancestor a@924404dff337
20 premerge successful
21 premerge successful
21 picked tool 'python ../merge' for rev (binary False symlink False)
22 picked tool 'python ../merge' for rev (binary False symlink False)
22 merging rev
23 merging rev
@@ -45,9 +46,11 b' resolving manifests'
45 a: remote is newer -> g
46 a: remote is newer -> g
46 b: local copied to a -> m
47 b: local copied to a -> m
47 rev: versions differ -> m
48 rev: versions differ -> m
49 preserving b for resolve of b
50 preserving rev for resolve of rev
48 getting a
51 getting a
49 picked tool 'python ../merge' for b (binary False symlink False)
52 picked tool 'python ../merge' for b (binary False symlink False)
50 merging b and a
53 merging b and a to b
51 my b@ac809aeed39a+ other a@f4db7e329e71 ancestor a@924404dff337
54 my b@ac809aeed39a+ other a@f4db7e329e71 ancestor a@924404dff337
52 premerge successful
55 premerge successful
53 picked tool 'python ../merge' for rev (binary False symlink False)
56 picked tool 'python ../merge' for rev (binary False symlink False)
@@ -76,12 +79,13 b' resolving manifests'
76 checking for directory renames
79 checking for directory renames
77 rev: versions differ -> m
80 rev: versions differ -> m
78 a: remote moved to b -> m
81 a: remote moved to b -> m
79 copying a to b
82 preserving a for resolve of b
80 picked tool 'python ../merge' for a (binary False symlink False)
83 preserving rev for resolve of rev
81 merging a and b
84 removing a
82 my a@e300d1c794ec+ other b@e03727d2d66b ancestor a@924404dff337
85 picked tool 'python ../merge' for b (binary False symlink False)
86 merging a and b to b
87 my b@e300d1c794ec+ other b@e03727d2d66b ancestor a@924404dff337
83 premerge successful
88 premerge successful
84 removing a
85 picked tool 'python ../merge' for rev (binary False symlink False)
89 picked tool 'python ../merge' for rev (binary False symlink False)
86 merging rev
90 merging rev
87 my rev@e300d1c794ec+ other rev@e03727d2d66b ancestor rev@924404dff337
91 my rev@e300d1c794ec+ other rev@e03727d2d66b ancestor rev@924404dff337
@@ -107,8 +111,10 b' resolving manifests'
107 checking for directory renames
111 checking for directory renames
108 b: local moved to a -> m
112 b: local moved to a -> m
109 rev: versions differ -> m
113 rev: versions differ -> m
114 preserving b for resolve of b
115 preserving rev for resolve of rev
110 picked tool 'python ../merge' for b (binary False symlink False)
116 picked tool 'python ../merge' for b (binary False symlink False)
111 merging b and a
117 merging b and a to b
112 my b@ecf3cb2a4219+ other a@f4db7e329e71 ancestor a@924404dff337
118 my b@ecf3cb2a4219+ other a@f4db7e329e71 ancestor a@924404dff337
113 premerge successful
119 premerge successful
114 picked tool 'python ../merge' for rev (binary False symlink False)
120 picked tool 'python ../merge' for rev (binary False symlink False)
@@ -136,6 +142,7 b' resolving manifests'
136 checking for directory renames
142 checking for directory renames
137 rev: versions differ -> m
143 rev: versions differ -> m
138 b: remote created -> g
144 b: remote created -> g
145 preserving rev for resolve of rev
139 getting b
146 getting b
140 picked tool 'python ../merge' for rev (binary False symlink False)
147 picked tool 'python ../merge' for rev (binary False symlink False)
141 merging rev
148 merging rev
@@ -161,6 +168,7 b' resolving manifests'
161 b -> a
168 b -> a
162 checking for directory renames
169 checking for directory renames
163 rev: versions differ -> m
170 rev: versions differ -> m
171 preserving rev for resolve of rev
164 picked tool 'python ../merge' for rev (binary False symlink False)
172 picked tool 'python ../merge' for rev (binary False symlink False)
165 merging rev
173 merging rev
166 my rev@ac809aeed39a+ other rev@97c705ade336 ancestor rev@924404dff337
174 my rev@ac809aeed39a+ other rev@97c705ade336 ancestor rev@924404dff337
@@ -187,6 +195,7 b' resolving manifests'
187 a: other deleted -> r
195 a: other deleted -> r
188 rev: versions differ -> m
196 rev: versions differ -> m
189 b: remote created -> g
197 b: remote created -> g
198 preserving rev for resolve of rev
190 removing a
199 removing a
191 getting b
200 getting b
192 picked tool 'python ../merge' for rev (binary False symlink False)
201 picked tool 'python ../merge' for rev (binary False symlink False)
@@ -212,6 +221,7 b' resolving manifests'
212 b -> a
221 b -> a
213 checking for directory renames
222 checking for directory renames
214 rev: versions differ -> m
223 rev: versions differ -> m
224 preserving rev for resolve of rev
215 picked tool 'python ../merge' for rev (binary False symlink False)
225 picked tool 'python ../merge' for rev (binary False symlink False)
216 merging rev
226 merging rev
217 my rev@ecf3cb2a4219+ other rev@97c705ade336 ancestor rev@924404dff337
227 my rev@ecf3cb2a4219+ other rev@97c705ade336 ancestor rev@924404dff337
@@ -231,6 +241,8 b' resolving manifests'
231 searching for copies back to rev 1
241 searching for copies back to rev 1
232 b: versions differ -> m
242 b: versions differ -> m
233 rev: versions differ -> m
243 rev: versions differ -> m
244 preserving b for resolve of b
245 preserving rev for resolve of rev
234 picked tool 'python ../merge' for b (binary False symlink False)
246 picked tool 'python ../merge' for b (binary False symlink False)
235 merging b
247 merging b
236 my b@ec03c2ca8642+ other b@79cc6877a3b7 ancestor a@924404dff337
248 my b@ec03c2ca8642+ other b@79cc6877a3b7 ancestor a@924404dff337
@@ -262,6 +274,7 b' resolving manifests'
262 a: divergent renames -> dr
274 a: divergent renames -> dr
263 rev: versions differ -> m
275 rev: versions differ -> m
264 c: remote created -> g
276 c: remote created -> g
277 preserving rev for resolve of rev
265 warning: detected divergent renames of a to:
278 warning: detected divergent renames of a to:
266 b
279 b
267 c
280 c
@@ -286,6 +299,8 b' resolving manifests'
286 searching for copies back to rev 1
299 searching for copies back to rev 1
287 b: versions differ -> m
300 b: versions differ -> m
288 rev: versions differ -> m
301 rev: versions differ -> m
302 preserving b for resolve of b
303 preserving rev for resolve of rev
289 picked tool 'python ../merge' for b (binary False symlink False)
304 picked tool 'python ../merge' for b (binary False symlink False)
290 merging b
305 merging b
291 my b@ac809aeed39a+ other b@af30c7647fc7 ancestor b@000000000000
306 my b@ac809aeed39a+ other b@af30c7647fc7 ancestor b@000000000000
@@ -310,6 +325,8 b' resolving manifests'
310 a: other deleted -> r
325 a: other deleted -> r
311 b: versions differ -> m
326 b: versions differ -> m
312 rev: versions differ -> m
327 rev: versions differ -> m
328 preserving b for resolve of b
329 preserving rev for resolve of rev
313 removing a
330 removing a
314 picked tool 'python ../merge' for b (binary False symlink False)
331 picked tool 'python ../merge' for b (binary False symlink False)
315 merging b
332 merging b
@@ -334,6 +351,8 b' resolving manifests'
334 a: remote is newer -> g
351 a: remote is newer -> g
335 b: versions differ -> m
352 b: versions differ -> m
336 rev: versions differ -> m
353 rev: versions differ -> m
354 preserving b for resolve of b
355 preserving rev for resolve of rev
337 getting a
356 getting a
338 picked tool 'python ../merge' for b (binary False symlink False)
357 picked tool 'python ../merge' for b (binary False symlink False)
339 merging b
358 merging b
@@ -359,6 +378,8 b' resolving manifests'
359 a: other deleted -> r
378 a: other deleted -> r
360 b: versions differ -> m
379 b: versions differ -> m
361 rev: versions differ -> m
380 rev: versions differ -> m
381 preserving b for resolve of b
382 preserving rev for resolve of rev
362 removing a
383 removing a
363 picked tool 'python ../merge' for b (binary False symlink False)
384 picked tool 'python ../merge' for b (binary False symlink False)
364 merging b
385 merging b
@@ -383,6 +404,8 b' resolving manifests'
383 a: remote is newer -> g
404 a: remote is newer -> g
384 b: versions differ -> m
405 b: versions differ -> m
385 rev: versions differ -> m
406 rev: versions differ -> m
407 preserving b for resolve of b
408 preserving rev for resolve of rev
386 getting a
409 getting a
387 picked tool 'python ../merge' for b (binary False symlink False)
410 picked tool 'python ../merge' for b (binary False symlink False)
388 merging b
411 merging b
@@ -407,6 +430,8 b' resolving manifests'
407 searching for copies back to rev 1
430 searching for copies back to rev 1
408 b: versions differ -> m
431 b: versions differ -> m
409 rev: versions differ -> m
432 rev: versions differ -> m
433 preserving b for resolve of b
434 preserving rev for resolve of rev
410 picked tool 'python ../merge' for b (binary False symlink False)
435 picked tool 'python ../merge' for b (binary False symlink False)
411 merging b
436 merging b
412 my b@0b76e65c8289+ other b@735846fee2d7 ancestor b@000000000000
437 my b@0b76e65c8289+ other b@735846fee2d7 ancestor b@000000000000
@@ -431,6 +456,8 b' resolving manifests'
431 b: versions differ -> m
456 b: versions differ -> m
432 rev: versions differ -> m
457 rev: versions differ -> m
433 a: prompt recreating -> g
458 a: prompt recreating -> g
459 preserving b for resolve of b
460 preserving rev for resolve of rev
434 getting a
461 getting a
435 picked tool 'python ../merge' for b (binary False symlink False)
462 picked tool 'python ../merge' for b (binary False symlink False)
436 merging b
463 merging b
@@ -455,6 +482,8 b' resolving manifests'
455 searching for copies back to rev 1
482 searching for copies back to rev 1
456 b: versions differ -> m
483 b: versions differ -> m
457 rev: versions differ -> m
484 rev: versions differ -> m
485 preserving b for resolve of b
486 preserving rev for resolve of rev
458 picked tool 'python ../merge' for b (binary False symlink False)
487 picked tool 'python ../merge' for b (binary False symlink False)
459 merging b
488 merging b
460 my b@0b76e65c8289+ other b@e03727d2d66b ancestor b@000000000000
489 my b@0b76e65c8289+ other b@e03727d2d66b ancestor b@000000000000
@@ -483,11 +512,12 b' resolving manifests'
483 checking for directory renames
512 checking for directory renames
484 rev: versions differ -> m
513 rev: versions differ -> m
485 a: remote moved to b -> m
514 a: remote moved to b -> m
486 copying a to b
515 preserving a for resolve of b
487 picked tool 'python ../merge' for a (binary False symlink False)
516 preserving rev for resolve of rev
488 merging a and b
489 my a@e300d1c794ec+ other b@79cc6877a3b7 ancestor a@924404dff337
490 removing a
517 removing a
518 picked tool 'python ../merge' for b (binary False symlink False)
519 merging a and b to b
520 my b@e300d1c794ec+ other b@79cc6877a3b7 ancestor a@924404dff337
491 picked tool 'python ../merge' for rev (binary False symlink False)
521 picked tool 'python ../merge' for rev (binary False symlink False)
492 merging rev
522 merging rev
493 my rev@e300d1c794ec+ other rev@79cc6877a3b7 ancestor rev@924404dff337
523 my rev@e300d1c794ec+ other rev@79cc6877a3b7 ancestor rev@924404dff337
@@ -513,8 +543,10 b' resolving manifests'
513 checking for directory renames
543 checking for directory renames
514 b: local moved to a -> m
544 b: local moved to a -> m
515 rev: versions differ -> m
545 rev: versions differ -> m
546 preserving b for resolve of b
547 preserving rev for resolve of rev
516 picked tool 'python ../merge' for b (binary False symlink False)
548 picked tool 'python ../merge' for b (binary False symlink False)
517 merging b and a
549 merging b and a to b
518 my b@ec03c2ca8642+ other a@f4db7e329e71 ancestor a@924404dff337
550 my b@ec03c2ca8642+ other a@f4db7e329e71 ancestor a@924404dff337
519 picked tool 'python ../merge' for rev (binary False symlink False)
551 picked tool 'python ../merge' for rev (binary False symlink False)
520 merging rev
552 merging rev
@@ -544,8 +576,10 b' resolving manifests'
544 b: local moved to a -> m
576 b: local moved to a -> m
545 rev: versions differ -> m
577 rev: versions differ -> m
546 c: remote created -> g
578 c: remote created -> g
579 preserving b for resolve of b
580 preserving rev for resolve of rev
547 picked tool 'python ../merge' for b (binary False symlink False)
581 picked tool 'python ../merge' for b (binary False symlink False)
548 merging b and a
582 merging b and a to b
549 my b@ecf3cb2a4219+ other a@2b958612230f ancestor a@924404dff337
583 my b@ecf3cb2a4219+ other a@2b958612230f ancestor a@924404dff337
550 premerge successful
584 premerge successful
551 getting c
585 getting c
@@ -23,6 +23,7 b' resolving manifests'
23 b
23 b
24 a: versions differ -> m
24 a: versions differ -> m
25 b: remote created -> g
25 b: remote created -> g
26 preserving a for resolve of a
26 picked tool 'true' for a (binary False symlink False)
27 picked tool 'true' for a (binary False symlink False)
27 merging a
28 merging a
28 my a@33aaa84a386b+ other a@802f095af299 ancestor a@33aaa84a386b
29 my a@33aaa84a386b+ other a@802f095af299 ancestor a@33aaa84a386b
@@ -60,6 +61,7 b' resolving manifests'
60 b
61 b
61 a: versions differ -> m
62 a: versions differ -> m
62 b: remote created -> g
63 b: remote created -> g
64 preserving a for resolve of a
63 picked tool 'true' for a (binary False symlink False)
65 picked tool 'true' for a (binary False symlink False)
64 merging a
66 merging a
65 my a@33aaa84a386b+ other a@802f095af299 ancestor a@33aaa84a386b
67 my a@33aaa84a386b+ other a@802f095af299 ancestor a@33aaa84a386b
@@ -113,6 +115,8 b' resolving manifests'
113 searching for copies back to rev 1
115 searching for copies back to rev 1
114 a: versions differ -> m
116 a: versions differ -> m
115 b: versions differ -> m
117 b: versions differ -> m
118 preserving a for resolve of a
119 preserving b for resolve of b
116 picked tool 'true' for a (binary False symlink False)
120 picked tool 'true' for a (binary False symlink False)
117 merging a
121 merging a
118 my a@802f095af299+ other a@030602aee63d ancestor a@33aaa84a386b
122 my a@802f095af299+ other a@030602aee63d ancestor a@33aaa84a386b
General Comments 0
You need to be logged in to leave comments. Login now