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