##// END OF EJS Templates
merge: refactor manifestmerge init to better report effective ancestor
Matt Mackall -
r8753:af5f099d default
parent child Browse files
Show More
@@ -1,472 +1,469 b''
1 1 # merge.py - directory-level update/merge handling for Mercurial
2 2 #
3 3 # Copyright 2006, 2007 Matt Mackall <mpm@selenic.com>
4 4 #
5 5 # This software may be used and distributed according to the terms of the
6 6 # GNU General Public License version 2, incorporated herein by reference.
7 7
8 8 from node import nullid, nullrev, hex, bin
9 9 from i18n import _
10 10 import util, filemerge, copies
11 11 import errno, os, shutil
12 12
13 13 class mergestate(object):
14 14 '''track 3-way merge state of individual files'''
15 15 def __init__(self, repo):
16 16 self._repo = repo
17 17 self._read()
18 18 def reset(self, node=None):
19 19 self._state = {}
20 20 if node:
21 21 self._local = node
22 22 shutil.rmtree(self._repo.join("merge"), True)
23 23 def _read(self):
24 24 self._state = {}
25 25 try:
26 26 localnode = None
27 27 f = self._repo.opener("merge/state")
28 28 for i, l in enumerate(f):
29 29 if i == 0:
30 30 localnode = l[:-1]
31 31 else:
32 32 bits = l[:-1].split("\0")
33 33 self._state[bits[0]] = bits[1:]
34 34 self._local = bin(localnode)
35 35 except IOError, err:
36 36 if err.errno != errno.ENOENT:
37 37 raise
38 38 def _write(self):
39 39 f = self._repo.opener("merge/state", "w")
40 40 f.write(hex(self._local) + "\n")
41 41 for d, v in self._state.iteritems():
42 42 f.write("\0".join([d] + v) + "\n")
43 43 def add(self, fcl, fco, fca, fd, flags):
44 44 hash = util.sha1(fcl.path()).hexdigest()
45 45 self._repo.opener("merge/" + hash, "w").write(fcl.data())
46 46 self._state[fd] = ['u', hash, fcl.path(), fca.path(),
47 47 hex(fca.filenode()), fco.path(), flags]
48 48 self._write()
49 49 def __contains__(self, dfile):
50 50 return dfile in self._state
51 51 def __getitem__(self, dfile):
52 52 return self._state[dfile][0]
53 53 def __iter__(self):
54 54 l = self._state.keys()
55 55 l.sort()
56 56 for f in l:
57 57 yield f
58 58 def mark(self, dfile, state):
59 59 self._state[dfile][0] = state
60 60 self._write()
61 61 def resolve(self, dfile, wctx, octx):
62 62 if self[dfile] == 'r':
63 63 return 0
64 64 state, hash, lfile, afile, anode, ofile, flags = self._state[dfile]
65 65 f = self._repo.opener("merge/" + hash)
66 66 self._repo.wwrite(dfile, f.read(), flags)
67 67 fcd = wctx[dfile]
68 68 fco = octx[ofile]
69 69 fca = self._repo.filectx(afile, fileid=anode)
70 70 r = filemerge.filemerge(self._repo, self._local, lfile, fcd, fco, fca)
71 71 if not r:
72 72 self.mark(dfile, 'r')
73 73 return r
74 74
75 75 def _checkunknown(wctx, mctx):
76 76 "check for collisions between unknown files and files in mctx"
77 77 for f in wctx.unknown():
78 78 if f in mctx and mctx[f].cmp(wctx[f].data()):
79 79 raise util.Abort(_("untracked file in working directory differs"
80 80 " from file in requested revision: '%s'") % f)
81 81
82 82 def _checkcollision(mctx):
83 83 "check for case folding collisions in the destination context"
84 84 folded = {}
85 85 for fn in mctx:
86 86 fold = fn.lower()
87 87 if fold in folded:
88 88 raise util.Abort(_("case-folding collision between %s and %s")
89 89 % (fn, folded[fold]))
90 90 folded[fold] = fn
91 91
92 92 def _forgetremoved(wctx, mctx, branchmerge):
93 93 """
94 94 Forget removed files
95 95
96 96 If we're jumping between revisions (as opposed to merging), and if
97 97 neither the working directory nor the target rev has the file,
98 98 then we need to remove it from the dirstate, to prevent the
99 99 dirstate from listing the file when it is no longer in the
100 100 manifest.
101 101
102 102 If we're merging, and the other revision has removed a file
103 103 that is not present in the working directory, we need to mark it
104 104 as removed.
105 105 """
106 106
107 107 action = []
108 108 state = branchmerge and 'r' or 'f'
109 109 for f in wctx.deleted():
110 110 if f not in mctx:
111 111 action.append((f, state))
112 112
113 113 if not branchmerge:
114 114 for f in wctx.removed():
115 115 if f not in mctx:
116 116 action.append((f, "f"))
117 117
118 118 return action
119 119
120 120 def manifestmerge(repo, p1, p2, pa, overwrite, partial):
121 121 """
122 122 Merge p1 and p2 with ancestor ma and generate merge action list
123 123
124 124 overwrite = whether we clobber working files
125 125 partial = function to filter file lists
126 126 """
127 127
128 repo.ui.note(_("resolving manifests\n"))
129 repo.ui.debug(_(" overwrite %s partial %s\n") % (overwrite, bool(partial)))
130 repo.ui.debug(_(" ancestor %s local %s remote %s\n") % (pa, p1, p2))
131
132 action = []
133 copy, copied = {}, {}
134 m1 = p1.manifest()
135 m2 = p2.manifest()
136
137 128 def fmerge(f, f2, fa):
138 129 """merge flags"""
139 130 a, m, n = ma.flags(fa), m1.flags(f), m2.flags(f2)
140 131 if m == n: # flags agree
141 132 return m # unchanged
142 133 if m and n and not a: # flags set, don't agree, differ from parent
143 134 r = repo.ui.prompt(
144 135 _(" conflicting flags for %s\n"
145 136 "(n)one, e(x)ec or sym(l)ink?") % f,
146 137 (_("&None"), _("E&xec"), _("Sym&link")), _("n"))
147 138 return r != _("n") and r or ''
148 139 if m and m != a: # changed from a to m
149 140 return m
150 141 if n and n != a: # changed from a to n
151 142 return n
152 143 return '' # flag was cleared
153 144
154 145 def act(msg, m, f, *args):
155 146 repo.ui.debug(" %s: %s -> %s\n" % (f, msg, m))
156 147 action.append((f, m) + args)
157 148
149 action, copy = [], {}
150
158 151 if overwrite:
159 ma = m1
160 elif p2 == pa: # backwards
161 ma = p1.p1().manifest()
162 else:
163 ma = pa.manifest()
164 if pa and repo.ui.configbool("merge", "followcopies", True):
152 pa = p1
153 elif pa == p2: # backwards
154 pa = p1.p1()
155 elif pa and repo.ui.configbool("merge", "followcopies", True):
165 156 dirs = repo.ui.configbool("merge", "followdirs", True)
166 157 copy, diverge = copies.copies(repo, p1, p2, pa, dirs)
167 158 for of, fl in diverge.iteritems():
168 159 act("divergent renames", "dr", of, fl)
160
161 repo.ui.note(_("resolving manifests\n"))
162 repo.ui.debug(_(" overwrite %s partial %s\n") % (overwrite, bool(partial)))
163 repo.ui.debug(_(" ancestor %s local %s remote %s\n") % (pa, p1, p2))
164
165 m1, m2, ma = p1.manifest(), p2.manifest(), pa.manifest()
169 166 copied = set(copy.values())
170 167
171 168 # Compare manifests
172 169 for f, n in m1.iteritems():
173 170 if partial and not partial(f):
174 171 continue
175 172 if f in m2:
176 173 rflags = fmerge(f, f, f)
177 174 a = ma.get(f, nullid)
178 175 if n == m2[f] or m2[f] == a: # same or local newer
179 176 if m1.flags(f) != rflags:
180 177 act("update permissions", "e", f, rflags)
181 178 elif n == a: # remote newer
182 179 act("remote is newer", "g", f, rflags)
183 180 else: # both changed
184 181 act("versions differ", "m", f, f, f, rflags, False)
185 182 elif f in copied: # files we'll deal with on m2 side
186 183 pass
187 184 elif f in copy:
188 185 f2 = copy[f]
189 186 if f2 not in m2: # directory rename
190 187 act("remote renamed directory to " + f2, "d",
191 188 f, None, f2, m1.flags(f))
192 189 else: # case 2 A,B/B/B or case 4,21 A/B/B
193 190 act("local copied/moved to " + f2, "m",
194 191 f, f2, f, fmerge(f, f2, f2), False)
195 192 elif f in ma: # clean, a different, no remote
196 193 if n != ma[f]:
197 194 if repo.ui.prompt(
198 195 _(" local changed %s which remote deleted\n"
199 196 "use (c)hanged version or (d)elete?") % f,
200 197 (_("&Changed"), _("&Delete")), _("c")) == _("d"):
201 198 act("prompt delete", "r", f)
202 199 else:
203 200 act("prompt keep", "a", f)
204 201 elif n[20:] == "a": # added, no remote
205 202 act("remote deleted", "f", f)
206 203 elif n[20:] != "u":
207 204 act("other deleted", "r", f)
208 205
209 206 for f, n in m2.iteritems():
210 207 if partial and not partial(f):
211 208 continue
212 209 if f in m1 or f in copied: # files already visited
213 210 continue
214 211 if f in copy:
215 212 f2 = copy[f]
216 213 if f2 not in m1: # directory rename
217 214 act("local renamed directory to " + f2, "d",
218 215 None, f, f2, m2.flags(f))
219 216 elif f2 in m2: # rename case 1, A/A,B/A
220 217 act("remote copied to " + f, "m",
221 218 f2, f, f, fmerge(f2, f, f2), False)
222 219 else: # case 3,20 A/B/A
223 220 act("remote moved to " + f, "m",
224 221 f2, f, f, fmerge(f2, f, f2), True)
225 222 elif f not in ma:
226 223 act("remote created", "g", f, m2.flags(f))
227 224 elif n != ma[f]:
228 225 if repo.ui.prompt(
229 226 _("remote changed %s which local deleted\n"
230 227 "use (c)hanged version or leave (d)eleted?") % f,
231 228 (_("&Changed"), _("&Deleted")), _("c")) == _("c"):
232 229 act("prompt recreating", "g", f, m2.flags(f))
233 230
234 231 return action
235 232
236 233 def actionkey(a):
237 234 return a[1] == 'r' and -1 or 0, a
238 235
239 236 def applyupdates(repo, action, wctx, mctx):
240 237 "apply the merge action list to the working directory"
241 238
242 239 updated, merged, removed, unresolved = 0, 0, 0, 0
243 240 ms = mergestate(repo)
244 241 ms.reset(wctx.parents()[0].node())
245 242 moves = []
246 243 action.sort(key=actionkey)
247 244
248 245 # prescan for merges
249 246 for a in action:
250 247 f, m = a[:2]
251 248 if m == 'm': # merge
252 249 f2, fd, flags, move = a[2:]
253 250 repo.ui.debug(_("preserving %s for resolve of %s\n") % (f, fd))
254 251 fcl = wctx[f]
255 252 fco = mctx[f2]
256 253 fca = fcl.ancestor(fco) or repo.filectx(f, fileid=nullrev)
257 254 ms.add(fcl, fco, fca, fd, flags)
258 255 if f != fd and move:
259 256 moves.append(f)
260 257
261 258 # remove renamed files after safely stored
262 259 for f in moves:
263 260 if util.lexists(repo.wjoin(f)):
264 261 repo.ui.debug(_("removing %s\n") % f)
265 262 os.unlink(repo.wjoin(f))
266 263
267 264 audit_path = util.path_auditor(repo.root)
268 265
269 266 for a in action:
270 267 f, m = a[:2]
271 268 if f and f[0] == "/":
272 269 continue
273 270 if m == "r": # remove
274 271 repo.ui.note(_("removing %s\n") % f)
275 272 audit_path(f)
276 273 try:
277 274 util.unlink(repo.wjoin(f))
278 275 except OSError, inst:
279 276 if inst.errno != errno.ENOENT:
280 277 repo.ui.warn(_("update failed to remove %s: %s!\n") %
281 278 (f, inst.strerror))
282 279 removed += 1
283 280 elif m == "m": # merge
284 281 f2, fd, flags, move = a[2:]
285 282 r = ms.resolve(fd, wctx, mctx)
286 283 if r > 0:
287 284 unresolved += 1
288 285 else:
289 286 if r is None:
290 287 updated += 1
291 288 else:
292 289 merged += 1
293 290 util.set_flags(repo.wjoin(fd), 'l' in flags, 'x' in flags)
294 291 if f != fd and move and util.lexists(repo.wjoin(f)):
295 292 repo.ui.debug(_("removing %s\n") % f)
296 293 os.unlink(repo.wjoin(f))
297 294 elif m == "g": # get
298 295 flags = a[2]
299 296 repo.ui.note(_("getting %s\n") % f)
300 297 t = mctx.filectx(f).data()
301 298 repo.wwrite(f, t, flags)
302 299 updated += 1
303 300 elif m == "d": # directory rename
304 301 f2, fd, flags = a[2:]
305 302 if f:
306 303 repo.ui.note(_("moving %s to %s\n") % (f, fd))
307 304 t = wctx.filectx(f).data()
308 305 repo.wwrite(fd, t, flags)
309 306 util.unlink(repo.wjoin(f))
310 307 if f2:
311 308 repo.ui.note(_("getting %s to %s\n") % (f2, fd))
312 309 t = mctx.filectx(f2).data()
313 310 repo.wwrite(fd, t, flags)
314 311 updated += 1
315 312 elif m == "dr": # divergent renames
316 313 fl = a[2]
317 314 repo.ui.warn(_("warning: detected divergent renames of %s to:\n") % f)
318 315 for nf in fl:
319 316 repo.ui.warn(" %s\n" % nf)
320 317 elif m == "e": # exec
321 318 flags = a[2]
322 319 util.set_flags(repo.wjoin(f), 'l' in flags, 'x' in flags)
323 320
324 321 return updated, merged, removed, unresolved
325 322
326 323 def recordupdates(repo, action, branchmerge):
327 324 "record merge actions to the dirstate"
328 325
329 326 for a in action:
330 327 f, m = a[:2]
331 328 if m == "r": # remove
332 329 if branchmerge:
333 330 repo.dirstate.remove(f)
334 331 else:
335 332 repo.dirstate.forget(f)
336 333 elif m == "a": # re-add
337 334 if not branchmerge:
338 335 repo.dirstate.add(f)
339 336 elif m == "f": # forget
340 337 repo.dirstate.forget(f)
341 338 elif m == "e": # exec change
342 339 repo.dirstate.normallookup(f)
343 340 elif m == "g": # get
344 341 if branchmerge:
345 342 repo.dirstate.normaldirty(f)
346 343 else:
347 344 repo.dirstate.normal(f)
348 345 elif m == "m": # merge
349 346 f2, fd, flag, move = a[2:]
350 347 if branchmerge:
351 348 # We've done a branch merge, mark this file as merged
352 349 # so that we properly record the merger later
353 350 repo.dirstate.merge(fd)
354 351 if f != f2: # copy/rename
355 352 if move:
356 353 repo.dirstate.remove(f)
357 354 if f != fd:
358 355 repo.dirstate.copy(f, fd)
359 356 else:
360 357 repo.dirstate.copy(f2, fd)
361 358 else:
362 359 # We've update-merged a locally modified file, so
363 360 # we set the dirstate to emulate a normal checkout
364 361 # of that file some time in the past. Thus our
365 362 # merge will appear as a normal local file
366 363 # modification.
367 364 repo.dirstate.normallookup(fd)
368 365 if move:
369 366 repo.dirstate.forget(f)
370 367 elif m == "d": # directory rename
371 368 f2, fd, flag = a[2:]
372 369 if not f2 and f not in repo.dirstate:
373 370 # untracked file moved
374 371 continue
375 372 if branchmerge:
376 373 repo.dirstate.add(fd)
377 374 if f:
378 375 repo.dirstate.remove(f)
379 376 repo.dirstate.copy(f, fd)
380 377 if f2:
381 378 repo.dirstate.copy(f2, fd)
382 379 else:
383 380 repo.dirstate.normal(fd)
384 381 if f:
385 382 repo.dirstate.forget(f)
386 383
387 384 def update(repo, node, branchmerge, force, partial):
388 385 """
389 386 Perform a merge between the working directory and the given node
390 387
391 388 branchmerge = whether to merge between branches
392 389 force = whether to force branch merging or file overwriting
393 390 partial = a function to filter file lists (dirstate not updated)
394 391 """
395 392
396 393 wlock = repo.wlock()
397 394 try:
398 395 wc = repo[None]
399 396 if node is None:
400 397 # tip of current branch
401 398 try:
402 399 node = repo.branchtags()[wc.branch()]
403 400 except KeyError:
404 401 if wc.branch() == "default": # no default branch!
405 402 node = repo.lookup("tip") # update to tip
406 403 else:
407 404 raise util.Abort(_("branch %s not found") % wc.branch())
408 405 overwrite = force and not branchmerge
409 406 pl = wc.parents()
410 407 p1, p2 = pl[0], repo[node]
411 408 pa = p1.ancestor(p2)
412 409 fp1, fp2, xp1, xp2 = p1.node(), p2.node(), str(p1), str(p2)
413 410 fastforward = False
414 411
415 412 ### check phase
416 413 if not overwrite and len(pl) > 1:
417 414 raise util.Abort(_("outstanding uncommitted merges"))
418 415 if branchmerge:
419 416 if pa == p2:
420 417 raise util.Abort(_("can't merge with ancestor"))
421 418 elif pa == p1:
422 419 if p1.branch() != p2.branch():
423 420 fastforward = True
424 421 else:
425 422 raise util.Abort(_("nothing to merge (use 'hg update'"
426 423 " or check 'hg heads')"))
427 424 if not force and (wc.files() or wc.deleted()):
428 425 raise util.Abort(_("outstanding uncommitted changes "
429 426 "(use 'hg status' to list changes)"))
430 427 elif not overwrite:
431 428 if pa == p1 or pa == p2: # linear
432 429 pass # all good
433 430 elif p1.branch() == p2.branch():
434 431 if wc.files() or wc.deleted():
435 432 raise util.Abort(_("crosses branches (use 'hg merge' or "
436 433 "'hg update -C' to discard changes)"))
437 434 raise util.Abort(_("crosses branches (use 'hg merge' "
438 435 "or 'hg update -C')"))
439 436 elif wc.files() or wc.deleted():
440 437 raise util.Abort(_("crosses named branches (use "
441 438 "'hg update -C' to discard changes)"))
442 439 else:
443 440 # Allow jumping branches if there are no changes
444 441 overwrite = True
445 442
446 443 ### calculate phase
447 444 action = []
448 445 if not force:
449 446 _checkunknown(wc, p2)
450 447 if not util.checkcase(repo.path):
451 448 _checkcollision(p2)
452 449 action += _forgetremoved(wc, p2, branchmerge)
453 450 action += manifestmerge(repo, wc, p2, pa, overwrite, partial)
454 451
455 452 ### apply phase
456 453 if not branchmerge: # just jump to the new rev
457 454 fp1, fp2, xp1, xp2 = fp2, nullid, xp2, ''
458 455 if not partial:
459 456 repo.hook('preupdate', throw=True, parent1=xp1, parent2=xp2)
460 457
461 458 stats = applyupdates(repo, action, wc, p2)
462 459
463 460 if not partial:
464 461 recordupdates(repo, action, branchmerge)
465 462 repo.dirstate.setparents(fp1, fp2)
466 463 if not branchmerge and not fastforward:
467 464 repo.dirstate.setbranch(p2.branch())
468 465 repo.hook('update', parent1=xp1, parent2=xp2, error=stats[3])
469 466
470 467 return stats
471 468 finally:
472 469 wlock.release()
@@ -1,35 +1,35 b''
1 1 1 files updated, 0 files merged, 2 files removed, 0 files unresolved
2 resolving manifests
3 overwrite None partial False
4 ancestor 583c7b748052 local fb3948d97f07+ remote 40da226db0f0
5 2 searching for copies back to rev 1
6 3 unmatched files in other:
7 4 b
8 5 c
9 6 all copies found (* = to merge, ! = divergent):
10 7 c -> a *
11 8 b -> a *
12 9 checking for directory renames
10 resolving manifests
11 overwrite None partial False
12 ancestor 583c7b748052 local fb3948d97f07+ remote 40da226db0f0
13 13 a: remote moved to c -> m
14 14 a: remote moved to b -> m
15 15 preserving a for resolve of b
16 16 preserving a for resolve of c
17 17 removing a
18 18 picked tool 'internal:merge' for b (binary False symlink False)
19 19 merging a and b to b
20 20 my b@fb3948d97f07+ other b@40da226db0f0 ancestor a@583c7b748052
21 21 premerge successful
22 22 picked tool 'internal:merge' for c (binary False symlink False)
23 23 merging a and c to c
24 24 my c@fb3948d97f07+ other c@40da226db0f0 ancestor a@583c7b748052
25 25 premerge successful
26 26 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
27 27 (branch merge, don't forget to commit)
28 28 -- b --
29 29 0
30 30 1
31 31 2
32 32 -- c --
33 33 0
34 34 1
35 35 2
@@ -1,42 +1,42 b''
1 1 created new head
2 2 changeset: 0:310fd17130da
3 3 user: test
4 4 date: Mon Jan 12 13:46:40 1970 +0000
5 5 summary: add foo
6 6
7 7 changeset: 1:7731dad1c2b9
8 8 user: test
9 9 date: Mon Jan 12 13:46:40 1970 +0000
10 10 summary: cp foo bar; change both
11 11
12 resolving manifests
13 overwrite None partial False
14 ancestor 310fd17130da local 2092631ce82b+ remote 7731dad1c2b9
15 12 searching for copies back to rev 1
16 13 unmatched files in other:
17 14 bar
18 15 all copies found (* = to merge, ! = divergent):
19 16 bar -> foo *
20 17 checking for directory renames
18 resolving manifests
19 overwrite None partial False
20 ancestor 310fd17130da local 2092631ce82b+ remote 7731dad1c2b9
21 21 foo: versions differ -> m
22 22 foo: remote copied to bar -> m
23 23 preserving foo for resolve of bar
24 24 preserving foo for resolve of foo
25 25 picked tool 'internal:merge' for bar (binary False symlink False)
26 26 merging foo and bar to bar
27 27 my bar@2092631ce82b+ other bar@7731dad1c2b9 ancestor foo@310fd17130da
28 28 premerge successful
29 29 picked tool 'internal:merge' for foo (binary False symlink False)
30 30 merging foo
31 31 my foo@2092631ce82b+ other foo@7731dad1c2b9 ancestor foo@310fd17130da
32 32 premerge successful
33 33 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
34 34 (branch merge, don't forget to commit)
35 35 -- foo --
36 36 line 0
37 37 line 1
38 38 line 2-1
39 39 -- bar --
40 40 line 0
41 41 line 1
42 42 line 2-2
@@ -1,20 +1,20 b''
1 1 reverting foo
2 2 changeset 2:4d9e78aaceee backs out changeset 1:b515023e500e
3 3 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
4 searching for copies back to rev 1
5 unmatched files in local:
6 bar
4 7 resolving manifests
5 8 overwrite None partial False
6 9 ancestor bbd179dfa0a7 local 71766447bdbb+ remote 4d9e78aaceee
7 searching for copies back to rev 1
8 unmatched files in local:
9 bar
10 10 foo: remote is newer -> g
11 11 getting foo
12 12 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
13 13 (branch merge, don't forget to commit)
14 14 n 0 -2 unset foo
15 15 M foo
16 16 c6fc755d7e68f49f880599da29f15add41f42f5a 644 foo
17 17 rev offset length base linkrev nodeid p1 p2
18 18 0 0 5 0 0 2ed2a3912a0b 000000000000 000000000000
19 19 1 5 9 1 1 6f4310b00b9a 2ed2a3912a0b 000000000000
20 20 2 14 5 2 2 c6fc755d7e68 6f4310b00b9a 000000000000
@@ -1,58 +1,58 b''
1 1 adding 1
2 2 adding 2
3 3 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
4 4 created new head
5 resolving manifests
6 overwrite None partial False
7 ancestor 81f4b099af3d local c64f439569a9+ remote 2f8037f47a5c
8 5 searching for copies back to rev 1
9 6 unmatched files in other:
10 7 1a
11 8 all copies found (* = to merge, ! = divergent):
12 9 1a -> 1
13 10 checking for directory renames
11 resolving manifests
12 overwrite None partial False
13 ancestor 81f4b099af3d local c64f439569a9+ remote 2f8037f47a5c
14 14 1: other deleted -> r
15 15 1a: remote created -> g
16 16 removing 1
17 17 getting 1a
18 18 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
19 19 (branch merge, don't forget to commit)
20 20 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
21 21 created new head
22 22 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
23 resolving manifests
24 overwrite None partial False
25 ancestor c64f439569a9 local ac7575e3c052+ remote 746e9549ea96
26 23 searching for copies back to rev 1
27 24 unmatched files in local:
28 25 1a
29 26 all copies found (* = to merge, ! = divergent):
30 27 1a -> 1 *
31 28 checking for directory renames
29 resolving manifests
30 overwrite None partial False
31 ancestor c64f439569a9 local ac7575e3c052+ remote 746e9549ea96
32 32 1a: local copied/moved to 1 -> m
33 33 preserving 1a for resolve of 1a
34 34 picked tool 'internal:merge' for 1a (binary False symlink False)
35 35 merging 1a and 1 to 1a
36 36 my 1a@ac7575e3c052+ other 1@746e9549ea96 ancestor 1@81f4b099af3d
37 37 premerge successful
38 38 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
39 39 (branch merge, don't forget to commit)
40 40 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
41 resolving manifests
42 overwrite None partial False
43 ancestor c64f439569a9 local 746e9549ea96+ remote ac7575e3c052
44 41 searching for copies back to rev 1
45 42 unmatched files in other:
46 43 1a
47 44 all copies found (* = to merge, ! = divergent):
48 45 1a -> 1 *
49 46 checking for directory renames
47 resolving manifests
48 overwrite None partial False
49 ancestor c64f439569a9 local 746e9549ea96+ remote ac7575e3c052
50 50 1: remote moved to 1a -> m
51 51 preserving 1 for resolve of 1a
52 52 removing 1
53 53 picked tool 'internal:merge' for 1a (binary False symlink False)
54 54 merging 1 and 1a to 1a
55 55 my 1a@746e9549ea96+ other 1a@ac7575e3c052 ancestor 1@81f4b099af3d
56 56 premerge successful
57 57 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
58 58 (branch merge, don't forget to commit)
@@ -1,94 +1,94 b''
1 1 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
2 2 created new head
3 3 merging bar and foo to bar
4 4 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
5 5 (branch merge, don't forget to commit)
6 6 % contents of bar should be line0 line1 line2
7 7 line0
8 8 line1
9 9 line2
10 10 rev offset length base linkrev nodeid p1 p2
11 11 0 0 77 0 2 da78c0659611 000000000000 000000000000
12 12 1 77 76 0 3 4b358025380b 000000000000 da78c0659611
13 13 bar renamed from foo:9e25c27b87571a1edee5ae4dddee5687746cc8e2
14 14 rev offset length base linkrev nodeid p1 p2
15 15 0 0 7 0 0 690b295714ae 000000000000 000000000000
16 16 1 7 13 1 1 9e25c27b8757 690b295714ae 000000000000
17 17 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
18 18 created new head
19 19 4:2d2f9a22c82b 2:0a3ab4856510
20 20 3:7d3b554bfdf1 2:0a3ab4856510 1:5cd961e4045d
21 21 2:0a3ab4856510 0:2665aaee66e9
22 22 1:5cd961e4045d
23 23 0:2665aaee66e9
24 24 % this should use bar@rev2 as the ancestor
25 searching for copies back to rev 1
25 26 resolving manifests
26 27 overwrite None partial False
27 28 ancestor 0a3ab4856510 local 2d2f9a22c82b+ remote 7d3b554bfdf1
28 searching for copies back to rev 1
29 29 bar: versions differ -> m
30 30 preserving bar for resolve of bar
31 31 picked tool 'internal:merge' for bar (binary False symlink False)
32 32 merging bar
33 33 my bar@2d2f9a22c82b+ other bar@7d3b554bfdf1 ancestor bar@0a3ab4856510
34 34 premerge successful
35 35 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
36 36 (branch merge, don't forget to commit)
37 37 % contents of bar should be line1 line2
38 38 line1
39 39 line2
40 40 rev offset length base linkrev nodeid p1 p2
41 41 0 0 77 0 2 da78c0659611 000000000000 000000000000
42 42 1 77 76 0 3 4b358025380b 000000000000 da78c0659611
43 43 2 153 7 2 4 4defe5eec418 da78c0659611 000000000000
44 44 3 160 13 3 5 4663501da27b 4defe5eec418 4b358025380b
45 45
46 46
47 47 requesting all changes
48 48 adding changesets
49 49 adding manifests
50 50 adding file changes
51 51 added 3 changesets with 3 changes to 2 files (+1 heads)
52 52 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
53 53 merging foo and bar to bar
54 54 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
55 55 (branch merge, don't forget to commit)
56 56 % contents of bar should be line0 line1 line2
57 57 line0
58 58 line1
59 59 line2
60 60 rev offset length base linkrev nodeid p1 p2
61 61 0 0 77 0 2 da78c0659611 000000000000 000000000000
62 62 1 77 76 0 3 4b358025380b 000000000000 da78c0659611
63 63 bar renamed from foo:9e25c27b87571a1edee5ae4dddee5687746cc8e2
64 64 rev offset length base linkrev nodeid p1 p2
65 65 0 0 7 0 0 690b295714ae 000000000000 000000000000
66 66 1 7 13 1 1 9e25c27b8757 690b295714ae 000000000000
67 67 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
68 68 created new head
69 69 4:2d2f9a22c82b 2:0a3ab4856510
70 70 3:96ab80c60897 1:5cd961e4045d 2:0a3ab4856510
71 71 2:0a3ab4856510 0:2665aaee66e9
72 72 1:5cd961e4045d
73 73 0:2665aaee66e9
74 74 % this should use bar@rev2 as the ancestor
75 searching for copies back to rev 1
75 76 resolving manifests
76 77 overwrite None partial False
77 78 ancestor 0a3ab4856510 local 2d2f9a22c82b+ remote 96ab80c60897
78 searching for copies back to rev 1
79 79 bar: versions differ -> m
80 80 preserving bar for resolve of bar
81 81 picked tool 'internal:merge' for bar (binary False symlink False)
82 82 merging bar
83 83 my bar@2d2f9a22c82b+ other bar@96ab80c60897 ancestor bar@0a3ab4856510
84 84 premerge successful
85 85 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
86 86 (branch merge, don't forget to commit)
87 87 % contents of bar should be line1 line2
88 88 line1
89 89 line2
90 90 rev offset length base linkrev nodeid p1 p2
91 91 0 0 77 0 2 da78c0659611 000000000000 000000000000
92 92 1 77 76 0 3 4b358025380b 000000000000 da78c0659611
93 93 2 153 7 2 4 4defe5eec418 da78c0659611 000000000000
94 94 3 160 13 3 5 4663501da27b 4defe5eec418 4b358025380b
@@ -1,27 +1,27 b''
1 1 adding a
2 2 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
3 3 created new head
4 searching for copies back to rev 1
4 5 resolving manifests
5 6 overwrite None partial False
6 7 ancestor c334dc3be0da local 521a1e40188f+ remote 3574f3e69b1c
7 searching for copies back to rev 1
8 8 conflicting flags for a
9 9 (n)one, e(x)ec or sym(l)ink? n
10 10 a: update permissions -> e
11 11 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
12 12 (branch merge, don't forget to commit)
13 13 % symlink is local parent, executable is other
14 14 a has no flags (default for conflicts)
15 15 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
16 searching for copies back to rev 1
16 17 resolving manifests
17 18 overwrite None partial False
18 19 ancestor c334dc3be0da local 3574f3e69b1c+ remote 521a1e40188f
19 searching for copies back to rev 1
20 20 conflicting flags for a
21 21 (n)one, e(x)ec or sym(l)ink? n
22 22 a: remote is newer -> g
23 23 getting a
24 24 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
25 25 (branch merge, don't forget to commit)
26 26 % symlink is other parent, executable is local
27 27 a has no flags (default for conflicts)
@@ -1,77 +1,77 b''
1 1 updating working directory
2 2 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
3 3 pulling from ../test-a
4 4 searching for changes
5 5 adding changesets
6 6 adding manifests
7 7 adding file changes
8 8 added 1 changesets with 1 changes to 1 files (+1 heads)
9 9 (run 'hg heads' to see heads, 'hg merge' to merge)
10 10 merging test.txt
11 11 warning: conflicts during merge.
12 12 merging test.txt failed!
13 13 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
14 14 use 'hg resolve' to retry unresolved file merges or 'hg up --clean' to abandon
15 15 pulling from ../test-a
16 16 searching for changes
17 17 adding changesets
18 18 adding manifests
19 19 adding file changes
20 20 added 1 changesets with 1 changes to 1 files (+1 heads)
21 21 (run 'hg heads' to see heads, 'hg merge' to merge)
22 searching for copies back to rev 1
22 23 resolving manifests
23 24 overwrite None partial False
24 25 ancestor faaea63e63a9 local 451c744aabcc+ remote a070d41e8360
25 searching for copies back to rev 1
26 26 test.txt: versions differ -> m
27 27 preserving test.txt for resolve of test.txt
28 28 picked tool 'internal:merge' for test.txt (binary False symlink False)
29 29 merging test.txt
30 30 my test.txt@451c744aabcc+ other test.txt@a070d41e8360 ancestor test.txt@faaea63e63a9
31 31 warning: conflicts during merge.
32 32 merging test.txt failed!
33 33 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
34 34 use 'hg resolve' to retry unresolved file merges or 'hg up --clean' to abandon
35 35 one
36 36 <<<<<<< local
37 37 two-point-five
38 38 =======
39 39 two-point-one
40 40 >>>>>>> other
41 41 three
42 42 rev offset length base linkrev nodeid p1 p2
43 43 0 0 7 0 0 01365c4cca56 000000000000 000000000000
44 44 1 7 9 1 1 7b013192566a 01365c4cca56 000000000000
45 45 2 16 15 2 2 8fe46a3eb557 01365c4cca56 000000000000
46 46 3 31 27 2 3 fc3148072371 7b013192566a 8fe46a3eb557
47 47 4 58 25 4 4 d40249267ae3 8fe46a3eb557 000000000000
48 48 changeset: 4:a070d41e8360
49 49 tag: tip
50 50 parent: 2:faaea63e63a9
51 51 user: test
52 52 date: Mon Jan 12 13:46:40 1970 +0000
53 53 summary: two -> two-point-one
54 54
55 55 changeset: 3:451c744aabcc
56 56 parent: 1:e409be6afcc0
57 57 parent: 2:faaea63e63a9
58 58 user: test
59 59 date: Mon Jan 12 13:46:40 1970 +0000
60 60 summary: Merge 1
61 61
62 62 changeset: 2:faaea63e63a9
63 63 parent: 0:095c92b91f1a
64 64 user: test
65 65 date: Mon Jan 12 13:46:40 1970 +0000
66 66 summary: Numbers as words
67 67
68 68 changeset: 1:e409be6afcc0
69 69 user: test
70 70 date: Mon Jan 12 13:46:40 1970 +0000
71 71 summary: 2 -> 2.5
72 72
73 73 changeset: 0:095c92b91f1a
74 74 user: test
75 75 date: Mon Jan 12 13:46:40 1970 +0000
76 76 summary: Initial
77 77
@@ -1,75 +1,75 b''
1 1 adding a/a
2 2 adding a/b
3 3 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
4 4 moving a/a to b/a
5 5 moving a/b to b/b
6 6 2 files updated, 0 files merged, 2 files removed, 0 files unresolved
7 7 created new head
8 resolving manifests
9 overwrite None partial False
10 ancestor f9b20c0d4c51 local ce36d17b18fb+ remote 55119e611c80
11 8 searching for copies back to rev 1
12 9 unmatched files in local:
13 10 a/c
14 11 a/d
15 12 unmatched files in other:
16 13 b/a
17 14 b/b
18 15 all copies found (* = to merge, ! = divergent):
19 16 b/a -> a/a
20 17 b/b -> a/b
21 18 checking for directory renames
22 19 dir a/ -> b/
23 20 file a/c -> b/c
24 21 file a/d -> b/d
22 resolving manifests
23 overwrite None partial False
24 ancestor f9b20c0d4c51 local ce36d17b18fb+ remote 55119e611c80
25 25 a/d: remote renamed directory to b/d -> d
26 26 a/c: remote renamed directory to b/c -> d
27 27 a/b: other deleted -> r
28 28 a/a: other deleted -> r
29 29 b/a: remote created -> g
30 30 b/b: remote created -> g
31 31 removing a/a
32 32 removing a/b
33 33 moving a/c to b/c
34 34 moving a/d to b/d
35 35 getting b/a
36 36 getting b/b
37 37 4 files updated, 0 files merged, 2 files removed, 0 files unresolved
38 38 (branch merge, don't forget to commit)
39 39 a/* b/a b/b b/c b/d
40 40 M b/a
41 41 M b/b
42 42 A b/c
43 43 a/c
44 44 R a/a
45 45 R a/b
46 46 R a/c
47 47 ? b/d
48 48 b/c renamed from a/c:354ae8da6e890359ef49ade27b68bbc361f3ca88
49 49 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
50 resolving manifests
51 overwrite None partial False
52 ancestor f9b20c0d4c51 local 55119e611c80+ remote ce36d17b18fb
53 50 searching for copies back to rev 1
54 51 unmatched files in local:
55 52 b/a
56 53 b/b
57 54 b/d
58 55 unmatched files in other:
59 56 a/c
60 57 all copies found (* = to merge, ! = divergent):
61 58 b/a -> a/a
62 59 b/b -> a/b
63 60 checking for directory renames
64 61 dir a/ -> b/
65 62 file a/c -> b/c
63 resolving manifests
64 overwrite None partial False
65 ancestor f9b20c0d4c51 local 55119e611c80+ remote ce36d17b18fb
66 66 None: local renamed directory to b/c -> d
67 67 getting a/c to b/c
68 68 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
69 69 (branch merge, don't forget to commit)
70 70 a/* b/a b/b b/c b/d
71 71 A b/c
72 72 a/c
73 73 ? b/d
74 74 created new head
75 75 b/c renamed from a/c:354ae8da6e890359ef49ade27b68bbc361f3ca88
@@ -1,43 +1,43 b''
1 1 checkout
2 2 2 files updated, 0 files merged, 2 files removed, 0 files unresolved
3 3 created new head
4 4 merge
5 resolving manifests
6 overwrite None partial False
7 ancestor af1939970a1c local f26ec4fc3fa3+ remote 8e765a822af2
8 5 searching for copies back to rev 1
9 6 unmatched files in local:
10 7 c2
11 8 unmatched files in other:
12 9 b
13 10 b2
14 11 all copies found (* = to merge, ! = divergent):
15 12 c2 -> a2 !
16 13 b -> a *
17 14 b2 -> a2 !
18 15 checking for directory renames
19 16 a2: divergent renames -> dr
17 resolving manifests
18 overwrite None partial False
19 ancestor af1939970a1c local f26ec4fc3fa3+ remote 8e765a822af2
20 20 a: remote moved to b -> m
21 21 b2: remote created -> g
22 22 preserving a for resolve of b
23 23 removing a
24 24 picked tool 'internal:merge' for b (binary False symlink False)
25 25 merging a and b to b
26 26 my b@f26ec4fc3fa3+ other b@8e765a822af2 ancestor a@af1939970a1c
27 27 premerge successful
28 28 warning: detected divergent renames of a2 to:
29 29 c2
30 30 b2
31 31 getting b2
32 32 1 files updated, 1 files merged, 0 files removed, 0 files unresolved
33 33 (branch merge, don't forget to commit)
34 34 M b
35 35 a
36 36 M b2
37 37 R a
38 38 C c2
39 39 blahblah
40 40 rev offset length base linkrev nodeid p1 p2
41 41 0 0 67 0 1 dc51707dfc98 000000000000 000000000000
42 42 1 67 72 1 3 b2494a44f0a9 000000000000 dc51707dfc98
43 43 b renamed from a:dd03b83622e78778b403775d0d074b9ac7387a66
@@ -1,601 +1,601 b''
1 1 created new head
2 2 --------------
3 3 test L:up a R:nc a b W: - 1 get local a to b
4 4 --------------
5 resolving manifests
6 overwrite None partial False
7 ancestor 924404dff337 local e300d1c794ec+ remote 735846fee2d7
8 5 searching for copies back to rev 1
9 6 unmatched files in other:
10 7 b
11 8 all copies found (* = to merge, ! = divergent):
12 9 b -> a *
13 10 checking for directory renames
11 resolving manifests
12 overwrite None partial False
13 ancestor 924404dff337 local e300d1c794ec+ remote 735846fee2d7
14 14 rev: versions differ -> m
15 15 a: remote copied to b -> m
16 16 preserving a for resolve of b
17 17 preserving rev for resolve of rev
18 18 picked tool 'python ../merge' for b (binary False symlink False)
19 19 merging a and b to b
20 20 my b@e300d1c794ec+ other b@735846fee2d7 ancestor a@924404dff337
21 21 premerge successful
22 22 picked tool 'python ../merge' for rev (binary False symlink False)
23 23 merging rev
24 24 my rev@e300d1c794ec+ other rev@735846fee2d7 ancestor rev@924404dff337
25 25 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
26 26 (branch merge, don't forget to commit)
27 27 --------------
28 28 M b
29 29 a
30 30 C a
31 31 --------------
32 32
33 33 created new head
34 34 --------------
35 35 test L:nc a b R:up a W: - 2 get rem change to a and b
36 36 --------------
37 resolving manifests
38 overwrite None partial False
39 ancestor 924404dff337 local ac809aeed39a+ remote f4db7e329e71
40 37 searching for copies back to rev 1
41 38 unmatched files in local:
42 39 b
43 40 all copies found (* = to merge, ! = divergent):
44 41 b -> a *
45 42 checking for directory renames
43 resolving manifests
44 overwrite None partial False
45 ancestor 924404dff337 local ac809aeed39a+ remote f4db7e329e71
46 46 a: remote is newer -> g
47 47 b: local copied/moved to a -> m
48 48 rev: versions differ -> m
49 49 preserving b for resolve of b
50 50 preserving rev for resolve of rev
51 51 getting a
52 52 picked tool 'python ../merge' for b (binary False symlink False)
53 53 merging b and a to b
54 54 my b@ac809aeed39a+ other a@f4db7e329e71 ancestor a@924404dff337
55 55 premerge successful
56 56 picked tool 'python ../merge' for rev (binary False symlink False)
57 57 merging rev
58 58 my rev@ac809aeed39a+ other rev@f4db7e329e71 ancestor rev@924404dff337
59 59 1 files updated, 2 files merged, 0 files removed, 0 files unresolved
60 60 (branch merge, don't forget to commit)
61 61 --------------
62 62 M a
63 63 M b
64 64 a
65 65 --------------
66 66
67 67 created new head
68 68 --------------
69 69 test L:up a R:nm a b W: - 3 get local a change to b, remove a
70 70 --------------
71 resolving manifests
72 overwrite None partial False
73 ancestor 924404dff337 local e300d1c794ec+ remote e03727d2d66b
74 71 searching for copies back to rev 1
75 72 unmatched files in other:
76 73 b
77 74 all copies found (* = to merge, ! = divergent):
78 75 b -> a *
79 76 checking for directory renames
77 resolving manifests
78 overwrite None partial False
79 ancestor 924404dff337 local e300d1c794ec+ remote e03727d2d66b
80 80 rev: versions differ -> m
81 81 a: remote moved to b -> m
82 82 preserving a for resolve of b
83 83 preserving rev for resolve of rev
84 84 removing a
85 85 picked tool 'python ../merge' for b (binary False symlink False)
86 86 merging a and b to b
87 87 my b@e300d1c794ec+ other b@e03727d2d66b ancestor a@924404dff337
88 88 premerge successful
89 89 picked tool 'python ../merge' for rev (binary False symlink False)
90 90 merging rev
91 91 my rev@e300d1c794ec+ other rev@e03727d2d66b ancestor rev@924404dff337
92 92 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
93 93 (branch merge, don't forget to commit)
94 94 --------------
95 95 M b
96 96 a
97 97 --------------
98 98
99 99 created new head
100 100 --------------
101 101 test L:nm a b R:up a W: - 4 get remote change to b
102 102 --------------
103 resolving manifests
104 overwrite None partial False
105 ancestor 924404dff337 local ecf3cb2a4219+ remote f4db7e329e71
106 103 searching for copies back to rev 1
107 104 unmatched files in local:
108 105 b
109 106 all copies found (* = to merge, ! = divergent):
110 107 b -> a *
111 108 checking for directory renames
109 resolving manifests
110 overwrite None partial False
111 ancestor 924404dff337 local ecf3cb2a4219+ remote f4db7e329e71
112 112 b: local copied/moved to a -> m
113 113 rev: versions differ -> m
114 114 preserving b for resolve of b
115 115 preserving rev for resolve of rev
116 116 picked tool 'python ../merge' for b (binary False symlink False)
117 117 merging b and a to b
118 118 my b@ecf3cb2a4219+ other a@f4db7e329e71 ancestor a@924404dff337
119 119 premerge successful
120 120 picked tool 'python ../merge' for rev (binary False symlink False)
121 121 merging rev
122 122 my rev@ecf3cb2a4219+ other rev@f4db7e329e71 ancestor rev@924404dff337
123 123 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
124 124 (branch merge, don't forget to commit)
125 125 --------------
126 126 M b
127 127 a
128 128 --------------
129 129
130 130 created new head
131 131 --------------
132 132 test L: R:nc a b W: - 5 get b
133 133 --------------
134 resolving manifests
135 overwrite None partial False
136 ancestor 924404dff337 local 94b33a1b7f2d+ remote 735846fee2d7
137 134 searching for copies back to rev 1
138 135 unmatched files in other:
139 136 b
140 137 all copies found (* = to merge, ! = divergent):
141 138 b -> a
142 139 checking for directory renames
140 resolving manifests
141 overwrite None partial False
142 ancestor 924404dff337 local 94b33a1b7f2d+ remote 735846fee2d7
143 143 rev: versions differ -> m
144 144 b: remote created -> g
145 145 preserving rev for resolve of rev
146 146 getting b
147 147 picked tool 'python ../merge' for rev (binary False symlink False)
148 148 merging rev
149 149 my rev@94b33a1b7f2d+ other rev@735846fee2d7 ancestor rev@924404dff337
150 150 1 files updated, 1 files merged, 0 files removed, 0 files unresolved
151 151 (branch merge, don't forget to commit)
152 152 --------------
153 153 M b
154 154 C a
155 155 --------------
156 156
157 157 created new head
158 158 --------------
159 159 test L:nc a b R: W: - 6 nothing
160 160 --------------
161 resolving manifests
162 overwrite None partial False
163 ancestor 924404dff337 local ac809aeed39a+ remote 97c705ade336
164 161 searching for copies back to rev 1
165 162 unmatched files in local:
166 163 b
167 164 all copies found (* = to merge, ! = divergent):
168 165 b -> a
169 166 checking for directory renames
167 resolving manifests
168 overwrite None partial False
169 ancestor 924404dff337 local ac809aeed39a+ remote 97c705ade336
170 170 rev: versions differ -> m
171 171 preserving rev for resolve of rev
172 172 picked tool 'python ../merge' for rev (binary False symlink False)
173 173 merging rev
174 174 my rev@ac809aeed39a+ other rev@97c705ade336 ancestor rev@924404dff337
175 175 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
176 176 (branch merge, don't forget to commit)
177 177 --------------
178 178 C a
179 179 C b
180 180 --------------
181 181
182 182 created new head
183 183 --------------
184 184 test L: R:nm a b W: - 7 get b
185 185 --------------
186 resolving manifests
187 overwrite None partial False
188 ancestor 924404dff337 local 94b33a1b7f2d+ remote e03727d2d66b
189 186 searching for copies back to rev 1
190 187 unmatched files in other:
191 188 b
192 189 all copies found (* = to merge, ! = divergent):
193 190 b -> a
194 191 checking for directory renames
192 resolving manifests
193 overwrite None partial False
194 ancestor 924404dff337 local 94b33a1b7f2d+ remote e03727d2d66b
195 195 a: other deleted -> r
196 196 rev: versions differ -> m
197 197 b: remote created -> g
198 198 preserving rev for resolve of rev
199 199 removing a
200 200 getting b
201 201 picked tool 'python ../merge' for rev (binary False symlink False)
202 202 merging rev
203 203 my rev@94b33a1b7f2d+ other rev@e03727d2d66b ancestor rev@924404dff337
204 204 1 files updated, 1 files merged, 1 files removed, 0 files unresolved
205 205 (branch merge, don't forget to commit)
206 206 --------------
207 207 M b
208 208 --------------
209 209
210 210 created new head
211 211 --------------
212 212 test L:nm a b R: W: - 8 nothing
213 213 --------------
214 resolving manifests
215 overwrite None partial False
216 ancestor 924404dff337 local ecf3cb2a4219+ remote 97c705ade336
217 214 searching for copies back to rev 1
218 215 unmatched files in local:
219 216 b
220 217 all copies found (* = to merge, ! = divergent):
221 218 b -> a
222 219 checking for directory renames
220 resolving manifests
221 overwrite None partial False
222 ancestor 924404dff337 local ecf3cb2a4219+ remote 97c705ade336
223 223 rev: versions differ -> m
224 224 preserving rev for resolve of rev
225 225 picked tool 'python ../merge' for rev (binary False symlink False)
226 226 merging rev
227 227 my rev@ecf3cb2a4219+ other rev@97c705ade336 ancestor rev@924404dff337
228 228 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
229 229 (branch merge, don't forget to commit)
230 230 --------------
231 231 C b
232 232 --------------
233 233
234 234 created new head
235 235 --------------
236 236 test L:um a b R:um a b W: - 9 do merge with ancestor in a
237 237 --------------
238 searching for copies back to rev 1
238 239 resolving manifests
239 240 overwrite None partial False
240 241 ancestor 924404dff337 local ec03c2ca8642+ remote 79cc6877a3b7
241 searching for copies back to rev 1
242 242 b: versions differ -> m
243 243 rev: versions differ -> m
244 244 preserving b for resolve of b
245 245 preserving rev for resolve of rev
246 246 picked tool 'python ../merge' for b (binary False symlink False)
247 247 merging b
248 248 my b@ec03c2ca8642+ other b@79cc6877a3b7 ancestor a@924404dff337
249 249 picked tool 'python ../merge' for rev (binary False symlink False)
250 250 merging rev
251 251 my rev@ec03c2ca8642+ other rev@79cc6877a3b7 ancestor rev@924404dff337
252 252 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
253 253 (branch merge, don't forget to commit)
254 254 --------------
255 255 M b
256 256 --------------
257 257
258 258 created new head
259 259 --------------
260 260 test L:nm a b R:nm a c W: - 11 get c, keep b
261 261 --------------
262 resolving manifests
263 overwrite None partial False
264 ancestor 924404dff337 local ecf3cb2a4219+ remote e6abcc1a30c2
265 262 searching for copies back to rev 1
266 263 unmatched files in local:
267 264 b
268 265 unmatched files in other:
269 266 c
270 267 all copies found (* = to merge, ! = divergent):
271 268 c -> a !
272 269 b -> a !
273 270 checking for directory renames
274 271 a: divergent renames -> dr
272 resolving manifests
273 overwrite None partial False
274 ancestor 924404dff337 local ecf3cb2a4219+ remote e6abcc1a30c2
275 275 rev: versions differ -> m
276 276 c: remote created -> g
277 277 preserving rev for resolve of rev
278 278 warning: detected divergent renames of a to:
279 279 b
280 280 c
281 281 getting c
282 282 picked tool 'python ../merge' for rev (binary False symlink False)
283 283 merging rev
284 284 my rev@ecf3cb2a4219+ other rev@e6abcc1a30c2 ancestor rev@924404dff337
285 285 1 files updated, 1 files merged, 0 files removed, 0 files unresolved
286 286 (branch merge, don't forget to commit)
287 287 --------------
288 288 M c
289 289 C b
290 290 --------------
291 291
292 292 created new head
293 293 --------------
294 294 test L:nc a b R:up b W: - 12 merge b no ancestor
295 295 --------------
296 searching for copies back to rev 1
296 297 resolving manifests
297 298 overwrite None partial False
298 299 ancestor 924404dff337 local ac809aeed39a+ remote af30c7647fc7
299 searching for copies back to rev 1
300 300 b: versions differ -> m
301 301 rev: versions differ -> m
302 302 preserving b for resolve of b
303 303 preserving rev for resolve of rev
304 304 picked tool 'python ../merge' for b (binary False symlink False)
305 305 merging b
306 306 my b@ac809aeed39a+ other b@af30c7647fc7 ancestor b@000000000000
307 307 picked tool 'python ../merge' for rev (binary False symlink False)
308 308 merging rev
309 309 my rev@ac809aeed39a+ other rev@af30c7647fc7 ancestor rev@924404dff337
310 310 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
311 311 (branch merge, don't forget to commit)
312 312 --------------
313 313 M b
314 314 C a
315 315 --------------
316 316
317 317 created new head
318 318 --------------
319 319 test L:up b R:nm a b W: - 13 merge b no ancestor
320 320 --------------
321 searching for copies back to rev 1
321 322 resolving manifests
322 323 overwrite None partial False
323 324 ancestor 924404dff337 local 59318016310c+ remote e03727d2d66b
324 searching for copies back to rev 1
325 325 a: other deleted -> r
326 326 b: versions differ -> m
327 327 rev: versions differ -> m
328 328 preserving b for resolve of b
329 329 preserving rev for resolve of rev
330 330 removing a
331 331 picked tool 'python ../merge' for b (binary False symlink False)
332 332 merging b
333 333 my b@59318016310c+ other b@e03727d2d66b ancestor b@000000000000
334 334 picked tool 'python ../merge' for rev (binary False symlink False)
335 335 merging rev
336 336 my rev@59318016310c+ other rev@e03727d2d66b ancestor rev@924404dff337
337 337 0 files updated, 2 files merged, 1 files removed, 0 files unresolved
338 338 (branch merge, don't forget to commit)
339 339 --------------
340 340 M b
341 341 --------------
342 342
343 343 created new head
344 344 --------------
345 345 test L:nc a b R:up a b W: - 14 merge b no ancestor
346 346 --------------
347 searching for copies back to rev 1
347 348 resolving manifests
348 349 overwrite None partial False
349 350 ancestor 924404dff337 local ac809aeed39a+ remote 8dbce441892a
350 searching for copies back to rev 1
351 351 a: remote is newer -> g
352 352 b: versions differ -> m
353 353 rev: versions differ -> m
354 354 preserving b for resolve of b
355 355 preserving rev for resolve of rev
356 356 getting a
357 357 picked tool 'python ../merge' for b (binary False symlink False)
358 358 merging b
359 359 my b@ac809aeed39a+ other b@8dbce441892a ancestor b@000000000000
360 360 picked tool 'python ../merge' for rev (binary False symlink False)
361 361 merging rev
362 362 my rev@ac809aeed39a+ other rev@8dbce441892a ancestor rev@924404dff337
363 363 1 files updated, 2 files merged, 0 files removed, 0 files unresolved
364 364 (branch merge, don't forget to commit)
365 365 --------------
366 366 M a
367 367 M b
368 368 --------------
369 369
370 370 created new head
371 371 --------------
372 372 test L:up b R:nm a b W: - 15 merge b no ancestor, remove a
373 373 --------------
374 searching for copies back to rev 1
374 375 resolving manifests
375 376 overwrite None partial False
376 377 ancestor 924404dff337 local 59318016310c+ remote e03727d2d66b
377 searching for copies back to rev 1
378 378 a: other deleted -> r
379 379 b: versions differ -> m
380 380 rev: versions differ -> m
381 381 preserving b for resolve of b
382 382 preserving rev for resolve of rev
383 383 removing a
384 384 picked tool 'python ../merge' for b (binary False symlink False)
385 385 merging b
386 386 my b@59318016310c+ other b@e03727d2d66b ancestor b@000000000000
387 387 picked tool 'python ../merge' for rev (binary False symlink False)
388 388 merging rev
389 389 my rev@59318016310c+ other rev@e03727d2d66b ancestor rev@924404dff337
390 390 0 files updated, 2 files merged, 1 files removed, 0 files unresolved
391 391 (branch merge, don't forget to commit)
392 392 --------------
393 393 M b
394 394 --------------
395 395
396 396 created new head
397 397 --------------
398 398 test L:nc a b R:up a b W: - 16 get a, merge b no ancestor
399 399 --------------
400 searching for copies back to rev 1
400 401 resolving manifests
401 402 overwrite None partial False
402 403 ancestor 924404dff337 local ac809aeed39a+ remote 8dbce441892a
403 searching for copies back to rev 1
404 404 a: remote is newer -> g
405 405 b: versions differ -> m
406 406 rev: versions differ -> m
407 407 preserving b for resolve of b
408 408 preserving rev for resolve of rev
409 409 getting a
410 410 picked tool 'python ../merge' for b (binary False symlink False)
411 411 merging b
412 412 my b@ac809aeed39a+ other b@8dbce441892a ancestor b@000000000000
413 413 picked tool 'python ../merge' for rev (binary False symlink False)
414 414 merging rev
415 415 my rev@ac809aeed39a+ other rev@8dbce441892a ancestor rev@924404dff337
416 416 1 files updated, 2 files merged, 0 files removed, 0 files unresolved
417 417 (branch merge, don't forget to commit)
418 418 --------------
419 419 M a
420 420 M b
421 421 --------------
422 422
423 423 created new head
424 424 --------------
425 425 test L:up a b R:nc a b W: - 17 keep a, merge b no ancestor
426 426 --------------
427 searching for copies back to rev 1
427 428 resolving manifests
428 429 overwrite None partial False
429 430 ancestor 924404dff337 local 0b76e65c8289+ remote 735846fee2d7
430 searching for copies back to rev 1
431 431 b: versions differ -> m
432 432 rev: versions differ -> m
433 433 preserving b for resolve of b
434 434 preserving rev for resolve of rev
435 435 picked tool 'python ../merge' for b (binary False symlink False)
436 436 merging b
437 437 my b@0b76e65c8289+ other b@735846fee2d7 ancestor b@000000000000
438 438 picked tool 'python ../merge' for rev (binary False symlink False)
439 439 merging rev
440 440 my rev@0b76e65c8289+ other rev@735846fee2d7 ancestor rev@924404dff337
441 441 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
442 442 (branch merge, don't forget to commit)
443 443 --------------
444 444 M b
445 445 C a
446 446 --------------
447 447
448 448 created new head
449 449 --------------
450 450 test L:nm a b R:up a b W: - 18 merge b no ancestor
451 451 --------------
452 searching for copies back to rev 1
452 453 resolving manifests
453 454 overwrite None partial False
454 455 ancestor 924404dff337 local ecf3cb2a4219+ remote 8dbce441892a
455 searching for copies back to rev 1
456 456 b: versions differ -> m
457 457 rev: versions differ -> m
458 458 remote changed a which local deleted
459 459 use (c)hanged version or leave (d)eleted? c
460 460 a: prompt recreating -> g
461 461 preserving b for resolve of b
462 462 preserving rev for resolve of rev
463 463 getting a
464 464 picked tool 'python ../merge' for b (binary False symlink False)
465 465 merging b
466 466 my b@ecf3cb2a4219+ other b@8dbce441892a ancestor b@000000000000
467 467 picked tool 'python ../merge' for rev (binary False symlink False)
468 468 merging rev
469 469 my rev@ecf3cb2a4219+ other rev@8dbce441892a ancestor rev@924404dff337
470 470 1 files updated, 2 files merged, 0 files removed, 0 files unresolved
471 471 (branch merge, don't forget to commit)
472 472 --------------
473 473 M a
474 474 M b
475 475 --------------
476 476
477 477 created new head
478 478 --------------
479 479 test L:up a b R:nm a b W: - 19 merge b no ancestor, prompt remove a
480 480 --------------
481 searching for copies back to rev 1
481 482 resolving manifests
482 483 overwrite None partial False
483 484 ancestor 924404dff337 local 0b76e65c8289+ remote e03727d2d66b
484 searching for copies back to rev 1
485 485 local changed a which remote deleted
486 486 use (c)hanged version or (d)elete? c
487 487 a: prompt keep -> a
488 488 b: versions differ -> m
489 489 rev: versions differ -> m
490 490 preserving b for resolve of b
491 491 preserving rev for resolve of rev
492 492 picked tool 'python ../merge' for b (binary False symlink False)
493 493 merging b
494 494 my b@0b76e65c8289+ other b@e03727d2d66b ancestor b@000000000000
495 495 picked tool 'python ../merge' for rev (binary False symlink False)
496 496 merging rev
497 497 my rev@0b76e65c8289+ other rev@e03727d2d66b ancestor rev@924404dff337
498 498 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
499 499 (branch merge, don't forget to commit)
500 500 --------------
501 501 M b
502 502 C a
503 503 --------------
504 504
505 505 created new head
506 506 --------------
507 507 test L:up a R:um a b W: - 20 merge a and b to b, remove a
508 508 --------------
509 resolving manifests
510 overwrite None partial False
511 ancestor 924404dff337 local e300d1c794ec+ remote 79cc6877a3b7
512 509 searching for copies back to rev 1
513 510 unmatched files in other:
514 511 b
515 512 all copies found (* = to merge, ! = divergent):
516 513 b -> a *
517 514 checking for directory renames
515 resolving manifests
516 overwrite None partial False
517 ancestor 924404dff337 local e300d1c794ec+ remote 79cc6877a3b7
518 518 rev: versions differ -> m
519 519 a: remote moved to b -> m
520 520 preserving a for resolve of b
521 521 preserving rev for resolve of rev
522 522 removing a
523 523 picked tool 'python ../merge' for b (binary False symlink False)
524 524 merging a and b to b
525 525 my b@e300d1c794ec+ other b@79cc6877a3b7 ancestor a@924404dff337
526 526 picked tool 'python ../merge' for rev (binary False symlink False)
527 527 merging rev
528 528 my rev@e300d1c794ec+ other rev@79cc6877a3b7 ancestor rev@924404dff337
529 529 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
530 530 (branch merge, don't forget to commit)
531 531 --------------
532 532 M b
533 533 a
534 534 --------------
535 535
536 536 created new head
537 537 --------------
538 538 test L:um a b R:up a W: - 21 merge a and b to b
539 539 --------------
540 resolving manifests
541 overwrite None partial False
542 ancestor 924404dff337 local ec03c2ca8642+ remote f4db7e329e71
543 540 searching for copies back to rev 1
544 541 unmatched files in local:
545 542 b
546 543 all copies found (* = to merge, ! = divergent):
547 544 b -> a *
548 545 checking for directory renames
546 resolving manifests
547 overwrite None partial False
548 ancestor 924404dff337 local ec03c2ca8642+ remote f4db7e329e71
549 549 b: local copied/moved to a -> m
550 550 rev: versions differ -> m
551 551 preserving b for resolve of b
552 552 preserving rev for resolve of rev
553 553 picked tool 'python ../merge' for b (binary False symlink False)
554 554 merging b and a to b
555 555 my b@ec03c2ca8642+ other a@f4db7e329e71 ancestor a@924404dff337
556 556 picked tool 'python ../merge' for rev (binary False symlink False)
557 557 merging rev
558 558 my rev@ec03c2ca8642+ other rev@f4db7e329e71 ancestor rev@924404dff337
559 559 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
560 560 (branch merge, don't forget to commit)
561 561 --------------
562 562 M b
563 563 a
564 564 --------------
565 565
566 566 created new head
567 567 --------------
568 568 test L:nm a b R:up a c W: - 23 get c, keep b
569 569 --------------
570 resolving manifests
571 overwrite None partial False
572 ancestor 924404dff337 local ecf3cb2a4219+ remote 2b958612230f
573 570 searching for copies back to rev 1
574 571 unmatched files in local:
575 572 b
576 573 unmatched files in other:
577 574 c
578 575 all copies found (* = to merge, ! = divergent):
579 576 b -> a *
580 577 checking for directory renames
578 resolving manifests
579 overwrite None partial False
580 ancestor 924404dff337 local ecf3cb2a4219+ remote 2b958612230f
581 581 b: local copied/moved to a -> m
582 582 rev: versions differ -> m
583 583 c: remote created -> g
584 584 preserving b for resolve of b
585 585 preserving rev for resolve of rev
586 586 picked tool 'python ../merge' for b (binary False symlink False)
587 587 merging b and a to b
588 588 my b@ecf3cb2a4219+ other a@2b958612230f ancestor a@924404dff337
589 589 premerge successful
590 590 getting c
591 591 picked tool 'python ../merge' for rev (binary False symlink False)
592 592 merging rev
593 593 my rev@ecf3cb2a4219+ other rev@2b958612230f ancestor rev@924404dff337
594 594 1 files updated, 2 files merged, 0 files removed, 0 files unresolved
595 595 (branch merge, don't forget to commit)
596 596 --------------
597 597 M b
598 598 a
599 599 M c
600 600 --------------
601 601
@@ -1,159 +1,159 b''
1 1 adding a
2 2 updating working directory
3 3 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
4 4 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
5 5 diff -r 33aaa84a386b a
6 6 --- a/a
7 7 +++ b/a
8 8 @@ -1,1 +1,1 @@
9 9 -a
10 10 +abc
11 11 adding b
12 12 M a
13 13 changeset: 0:33aaa84a386b
14 14 user: test
15 15 date: Mon Jan 12 13:46:40 1970 +0000
16 16 summary: 1
17 17
18 searching for copies back to rev 1
19 unmatched files in other:
20 b
18 21 resolving manifests
19 22 overwrite False partial False
20 23 ancestor 33aaa84a386b local 33aaa84a386b+ remote 802f095af299
21 searching for copies back to rev 1
22 unmatched files in other:
23 b
24 24 a: versions differ -> m
25 25 b: remote created -> g
26 26 preserving a for resolve of a
27 27 picked tool 'true' for a (binary False symlink False)
28 28 merging a
29 29 my a@33aaa84a386b+ other a@802f095af299 ancestor a@33aaa84a386b
30 30 getting b
31 31 1 files updated, 1 files merged, 0 files removed, 0 files unresolved
32 32 changeset: 1:802f095af299
33 33 tag: tip
34 34 user: test
35 35 date: Mon Jan 12 13:46:40 1970 +0000
36 36 summary: 2
37 37
38 38 resolving manifests
39 39 overwrite False partial False
40 ancestor 33aaa84a386b local 802f095af299+ remote 33aaa84a386b
40 ancestor 802f095af299 local 802f095af299+ remote 33aaa84a386b
41 41 a: versions differ -> m
42 42 b: other deleted -> r
43 43 preserving a for resolve of a
44 44 removing b
45 45 picked tool 'true' for a (binary False symlink False)
46 46 merging a
47 47 my a@802f095af299+ other a@33aaa84a386b ancestor a@33aaa84a386b
48 48 premerge successful
49 49 0 files updated, 1 files merged, 1 files removed, 0 files unresolved
50 50 changeset: 0:33aaa84a386b
51 51 user: test
52 52 date: Mon Jan 12 13:46:40 1970 +0000
53 53 summary: 1
54 54
55 55 abort: there is nothing to merge - use "hg update" instead
56 56 failed
57 57 changeset: 0:33aaa84a386b
58 58 user: test
59 59 date: Mon Jan 12 13:46:40 1970 +0000
60 60 summary: 1
61 61
62 searching for copies back to rev 1
63 unmatched files in other:
64 b
62 65 resolving manifests
63 66 overwrite False partial False
64 67 ancestor 33aaa84a386b local 33aaa84a386b+ remote 802f095af299
65 searching for copies back to rev 1
66 unmatched files in other:
67 b
68 68 a: versions differ -> m
69 69 b: remote created -> g
70 70 preserving a for resolve of a
71 71 picked tool 'true' for a (binary False symlink False)
72 72 merging a
73 73 my a@33aaa84a386b+ other a@802f095af299 ancestor a@33aaa84a386b
74 74 getting b
75 75 1 files updated, 1 files merged, 0 files removed, 0 files unresolved
76 76 changeset: 1:802f095af299
77 77 tag: tip
78 78 user: test
79 79 date: Mon Jan 12 13:46:40 1970 +0000
80 80 summary: 2
81 81
82 82 changeset: 1:802f095af299
83 83 tag: tip
84 84 user: test
85 85 date: Mon Jan 12 13:46:40 1970 +0000
86 86 files: a b
87 87 description:
88 88 2
89 89
90 90
91 91 changeset: 0:33aaa84a386b
92 92 user: test
93 93 date: Mon Jan 12 13:46:40 1970 +0000
94 94 files: a
95 95 description:
96 96 1
97 97
98 98
99 99 diff -r 802f095af299 a
100 100 --- a/a
101 101 +++ b/a
102 102 @@ -1,1 +1,1 @@
103 103 -a2
104 104 +abc
105 105 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
106 106 adding b
107 107 created new head
108 108 M a
109 109 changeset: 1:802f095af299
110 110 user: test
111 111 date: Mon Jan 12 13:46:40 1970 +0000
112 112 summary: 2
113 113
114 114 abort: crosses branches (use 'hg merge' or 'hg update -C' to discard changes)
115 115 failed
116 116 abort: outstanding uncommitted changes (use 'hg status' to list changes)
117 117 failed
118 searching for copies back to rev 1
118 119 resolving manifests
119 120 overwrite False partial False
120 121 ancestor 33aaa84a386b local 802f095af299+ remote 030602aee63d
121 searching for copies back to rev 1
122 122 a: versions differ -> m
123 123 b: versions differ -> m
124 124 preserving a for resolve of a
125 125 preserving b for resolve of b
126 126 picked tool 'true' for a (binary False symlink False)
127 127 merging a
128 128 my a@802f095af299+ other a@030602aee63d ancestor a@33aaa84a386b
129 129 picked tool 'true' for b (binary False symlink False)
130 130 merging b
131 131 my b@802f095af299+ other b@030602aee63d ancestor b@000000000000
132 132 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
133 133 (branch merge, don't forget to commit)
134 134 changeset: 1:802f095af299
135 135 user: test
136 136 date: Mon Jan 12 13:46:40 1970 +0000
137 137 summary: 2
138 138
139 139 changeset: 2:030602aee63d
140 140 tag: tip
141 141 parent: 0:33aaa84a386b
142 142 user: test
143 143 date: Mon Jan 12 13:46:40 1970 +0000
144 144 summary: 3
145 145
146 146 diff -r 802f095af299 a
147 147 --- a/a
148 148 +++ b/a
149 149 @@ -1,1 +1,1 @@
150 150 -a2
151 151 +abc
152 152 adding a
153 153 pulling from ../a
154 154 requesting all changes
155 155 adding changesets
156 156 adding manifests
157 157 adding file changes
158 158 added 1 changesets with 1 changes to 1 files
159 159 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
@@ -1,55 +1,55 b''
1 1 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
2 2 Main should be gone
3 3 a
4 4 created new head
5 5 changeset: 3:ded32b0db104
6 6 tag: tip
7 7 user: test
8 8 date: Mon Jan 12 13:46:40 1970 +0000
9 9 summary: Added side2
10 10
11 11 changeset: 2:92a816cea698
12 12 parent: 0:537353581d3d
13 13 user: test
14 14 date: Mon Jan 12 13:46:40 1970 +0000
15 15 summary: Added side1
16 16
17 17 changeset: 1:221226fb2bd8
18 18 user: test
19 19 date: Mon Jan 12 13:46:40 1970 +0000
20 20 summary: Added main
21 21
22 22 changeset: 0:537353581d3d
23 23 user: test
24 24 date: Mon Jan 12 13:46:40 1970 +0000
25 25 summary: Added a
26 26
27 27 Should have two heads, side2 and main
28 28 changeset: 3:ded32b0db104
29 29 tag: tip
30 30 user: test
31 31 date: Mon Jan 12 13:46:40 1970 +0000
32 32 summary: Added side2
33 33
34 34 changeset: 1:221226fb2bd8
35 35 user: test
36 36 date: Mon Jan 12 13:46:40 1970 +0000
37 37 summary: Added main
38 38
39 39 Should show a side1 side2
40 40 a
41 41 side1
42 42 side2
43 43 resolving manifests
44 44 overwrite True partial False
45 ancestor 537353581d3d local ded32b0db104+ remote 221226fb2bd8
45 ancestor ded32b0db104+ local ded32b0db104+ remote 221226fb2bd8
46 46 side2: other deleted -> r
47 47 side1: other deleted -> r
48 48 main: remote created -> g
49 49 removing side1
50 50 removing side2
51 51 getting main
52 52 1 files updated, 0 files merged, 2 files removed, 0 files unresolved
53 53 Should only show a main
54 54 a
55 55 main
General Comments 0
You need to be logged in to leave comments. Login now