##// END OF EJS Templates
merge with upstream
Thomas Arendsen Hein -
r3323:b7a46cbf merge default
parent child Browse files
Show More
@@ -8,7 +8,7 b''
8 from node import *
8 from node import *
9 from i18n import gettext as _
9 from i18n import gettext as _
10 from demandload import demandload
10 from demandload import demandload
11 demandload(globals(), "ancestor bdiff repo revlog util")
11 demandload(globals(), "ancestor bdiff repo revlog util os")
12
12
13 class changectx(object):
13 class changectx(object):
14 """A changecontext object makes access to data related to a particular
14 """A changecontext object makes access to data related to a particular
@@ -191,6 +191,9 b' class filectx(object):'
191 def data(self): return self._filelog.read(self._filenode)
191 def data(self): return self._filelog.read(self._filenode)
192 def renamed(self): return self._filelog.renamed(self._filenode)
192 def renamed(self): return self._filelog.renamed(self._filenode)
193 def path(self): return self._path
193 def path(self): return self._path
194 def size(self): return self._filelog.size(self._filerev)
195
196 def cmp(self, text): return self._filelog.cmp(self._filenode, text)
194
197
195 def parents(self):
198 def parents(self):
196 p = self._path
199 p = self._path
@@ -327,7 +330,7 b' class workingctx(changectx):'
327 self._node = None
330 self._node = None
328
331
329 def __str__(self):
332 def __str__(self):
330 return "."
333 return str(self._parents[0]) + "+"
331
334
332 def __nonzero__(self):
335 def __nonzero__(self):
333 return True
336 return True
@@ -414,7 +417,9 b' class workingfilectx(filectx):'
414 self._changectx = workingctx(repo)
417 self._changectx = workingctx(repo)
415 return self._changectx
418 return self._changectx
416 elif name == '_repopath':
419 elif name == '_repopath':
417 self._repopath = self._repo.dirstate.copied(p) or self._path
420 self._repopath = (self._repo.dirstate.copied(self._path)
421 or self._path)
422 return self._repopath
418 elif name == '_filelog':
423 elif name == '_filelog':
419 self._filelog = self._repo.file(self._repopath)
424 self._filelog = self._repo.file(self._repopath)
420 return self._filelog
425 return self._filelog
@@ -425,7 +430,7 b' class workingfilectx(filectx):'
425 return True
430 return True
426
431
427 def __str__(self):
432 def __str__(self):
428 return "%s@." % self.path()
433 return "%s@%s" % (self.path(), self._changectx)
429
434
430 def filectx(self, fileid):
435 def filectx(self, fileid):
431 '''opens an arbitrary revision of the file without
436 '''opens an arbitrary revision of the file without
@@ -449,7 +454,7 b' class workingfilectx(filectx):'
449 '''return parent filectxs, following copies if necessary'''
454 '''return parent filectxs, following copies if necessary'''
450 p = self._path
455 p = self._path
451 rp = self._repopath
456 rp = self._repopath
452 pcl = self._workingctx._parents
457 pcl = self._changectx._parents
453 fl = self._filelog
458 fl = self._filelog
454 pl = [ (rp, pcl[0]._manifest.get(rp, nullid), fl) ]
459 pl = [ (rp, pcl[0]._manifest.get(rp, nullid), fl) ]
455 if len(pcl) > 1:
460 if len(pcl) > 1:
@@ -463,3 +468,6 b' class workingfilectx(filectx):'
463 def children(self):
468 def children(self):
464 return []
469 return []
465
470
471 def size(self): return os.stat(self._repo.wjoin(self._path)).st_size
472
473 def cmp(self, text): return self._repo.wread(self._path) == text
@@ -59,12 +59,6 b' class hgweb(object):'
59 if i in allowed or self.repo.ui.configbool("web", "allow" + i):
59 if i in allowed or self.repo.ui.configbool("web", "allow" + i):
60 yield {"type" : i, "extension" : spec[2], "node" : nodeid}
60 yield {"type" : i, "extension" : spec[2], "node" : nodeid}
61
61
62 def listfiles(self, files, mf):
63 for f in files[:self.maxfiles]:
64 yield self.t("filenodelink", node=hex(mf[f]), file=f)
65 if len(files) > self.maxfiles:
66 yield self.t("fileellipses")
67
68 def listfilediffs(self, files, changeset):
62 def listfilediffs(self, files, changeset):
69 for f in files[:self.maxfiles]:
63 for f in files[:self.maxfiles]:
70 yield self.t("filedifflink", node=hex(changeset), file=f)
64 yield self.t("filedifflink", node=hex(changeset), file=f)
@@ -436,9 +430,9 b' class hgweb(object):'
436 continue
430 continue
437
431
438 yield {"file": full,
432 yield {"file": full,
439 "filenode": hex(fnode),
440 "parity": self.stripes(parity),
433 "parity": self.stripes(parity),
441 "basename": f,
434 "basename": f,
435 "size": ctx.filectx(full).size(),
442 "permissions": mf.execf(full)}
436 "permissions": mf.execf(full)}
443 parity += 1
437 parity += 1
444
438
@@ -461,20 +461,18 b' class localrepository(repo.repository):'
461 self.wreload,
461 self.wreload,
462 desc=_('working directory of %s') % self.origroot)
462 desc=_('working directory of %s') % self.origroot)
463
463
464 def checkfilemerge(self, filename, text, filelog, manifest1, manifest2):
464 def filecommit(self, fn, manifest1, manifest2, linkrev, transaction, changelist):
465 """
465 """
466 Determine whether a new filenode is needed and what parent
466 commit an individual file as part of a larger transaction
467 and rename information is needed for a file commit.
467 """
468
468
469 Returns (old entry, file parent 1, file parent 2, metadata)
469 t = self.wread(fn)
470
470 fl = self.file(fn)
471 If old entry is not None, a commit is not needed.
471 fp1 = manifest1.get(fn, nullid)
472 """
472 fp2 = manifest2.get(fn, nullid)
473 fp1 = manifest1.get(filename, nullid)
474 fp2 = manifest2.get(filename, nullid)
475
473
476 meta = {}
474 meta = {}
477 cp = self.dirstate.copied(filename)
475 cp = self.dirstate.copied(fn)
478 if cp:
476 if cp:
479 meta["copy"] = cp
477 meta["copy"] = cp
480 if not manifest2: # not a branch merge
478 if not manifest2: # not a branch merge
@@ -486,21 +484,22 b' class localrepository(repo.repository):'
486 meta["copyrev"] = hex(manifest2.get(cp))
484 meta["copyrev"] = hex(manifest2.get(cp))
487 fp2 = nullid
485 fp2 = nullid
488 self.ui.debug(_(" %s: copy %s:%s\n") %
486 self.ui.debug(_(" %s: copy %s:%s\n") %
489 (filename, cp, meta["copyrev"]))
487 (fn, cp, meta["copyrev"]))
490 fp1 = nullid
488 fp1 = nullid
491 elif fp2 != nullid:
489 elif fp2 != nullid:
492 # is one parent an ancestor of the other?
490 # is one parent an ancestor of the other?
493 fpa = filelog.ancestor(fp1, fp2)
491 fpa = fl.ancestor(fp1, fp2)
494 if fpa == fp1:
492 if fpa == fp1:
495 fp1, fp2 = fp2, nullid
493 fp1, fp2 = fp2, nullid
496 elif fpa == fp2:
494 elif fpa == fp2:
497 fp2 = nullid
495 fp2 = nullid
498
496
499 # is the file unmodified from the parent? report existing entry
497 # is the file unmodified from the parent? report existing entry
500 if fp2 == nullid and not filelog.cmp(fp1, text):
498 if fp2 == nullid and not fl.cmp(fp1, t):
501 return (fp1, None, None, {})
499 return fp1
502
500
503 return (None, fp1, fp2, meta)
501 changelist.append(fn)
502 return fl.add(t, meta, transaction, linkrev, fp1, fp2)
504
503
505 def rawcommit(self, files, text, user, date, p1=None, p2=None, wlock=None):
504 def rawcommit(self, files, text, user, date, p1=None, p2=None, wlock=None):
506 orig_parent = self.dirstate.parents()[0] or nullid
505 orig_parent = self.dirstate.parents()[0] or nullid
@@ -524,19 +523,8 b' class localrepository(repo.repository):'
524 linkrev = self.changelog.count()
523 linkrev = self.changelog.count()
525 for f in files:
524 for f in files:
526 try:
525 try:
527 t = self.wread(f)
526 m1[f] = self.filecommit(f, m1, m2, linkrev, tr, changed)
528 m1.set(f, util.is_exec(self.wjoin(f), m1.execf(f)))
527 m1.set(f, util.is_exec(self.wjoin(f), m1.execf(f)))
529 r = self.file(f)
530
531 entry, fp1, fp2, meta = self.checkfilemerge(f, t, r, m1, m2)
532 if entry:
533 m1[f] = entry
534 continue
535
536 m1[f] = r.add(t, meta, tr, linkrev, fp1, fp2)
537 changed.append(f)
538 if update_dirstate:
539 self.dirstate.update([f], "n")
540 except IOError:
528 except IOError:
541 try:
529 try:
542 del m1[f]
530 del m1[f]
@@ -603,31 +591,18 b' class localrepository(repo.repository):'
603 for f in commit:
591 for f in commit:
604 self.ui.note(f + "\n")
592 self.ui.note(f + "\n")
605 try:
593 try:
594 new[f] = self.filecommit(f, m1, m2, linkrev, tr, changed)
606 m1.set(f, util.is_exec(self.wjoin(f), m1.execf(f)))
595 m1.set(f, util.is_exec(self.wjoin(f), m1.execf(f)))
607 t = self.wread(f)
608 except IOError:
596 except IOError:
609 self.ui.warn(_("trouble committing %s!\n") % f)
597 self.ui.warn(_("trouble committing %s!\n") % f)
610 raise
598 raise
611
599
612 r = self.file(f)
613
614 entry, fp1, fp2, meta = self.checkfilemerge(f, t, r, m1, m2)
615 if entry:
616 new[f] = entry
617 continue
618
619 new[f] = r.add(t, meta, tr, linkrev, fp1, fp2)
620 # remember what we've added so that we can later calculate
621 # the files to pull from a set of changesets
622 changed.append(f)
623
624 # update manifest
600 # update manifest
625 m1.update(new)
601 m1.update(new)
626 for f in remove:
602 for f in remove:
627 if f in m1:
603 if f in m1:
628 del m1[f]
604 del m1[f]
629 mn = self.manifest.add(m1, tr, linkrev, c1[0], c2[0],
605 mn = self.manifest.add(m1, tr, linkrev, c1[0], c2[0], (new, remove))
630 (new, remove))
631
606
632 # add changeset
607 # add changeset
633 new = new.keys()
608 new = new.keys()
@@ -10,16 +10,12 b' from i18n import gettext as _'
10 from demandload import *
10 from demandload import *
11 demandload(globals(), "errno util os tempfile")
11 demandload(globals(), "errno util os tempfile")
12
12
13 def filemerge(repo, fw, fo, fd, my, other, p1, p2, move):
13 def filemerge(repo, fw, fo, wctx, mctx):
14 """perform a 3-way merge in the working directory
14 """perform a 3-way merge in the working directory
15
15
16 fw = filename in the working directory and first parent
16 fw = filename in the working directory and first parent
17 fo = filename in other parent
17 fo = filename in other parent
18 fd = destination filename
18 wctx, mctx = working and merge changecontexts
19 my = fileid in first parent
20 other = fileid in second parent
21 p1, p2 = hex changeset ids for merge command
22 move = whether to move or copy the file to the destination
23
19
24 TODO:
20 TODO:
25 if fw is copied in the working directory, we get confused
21 if fw is copied in the working directory, we get confused
@@ -34,8 +30,12 b' def filemerge(repo, fw, fo, fd, my, othe'
34 f.close()
30 f.close()
35 return name
31 return name
36
32
37 fcm = repo.filectx(fw, fileid=my)
33 fcm = wctx.filectx(fw)
38 fco = repo.filectx(fo, fileid=other)
34 fco = mctx.filectx(fo)
35
36 if not fco.cmp(fcm.data()): # files identical?
37 return 0
38
39 fca = fcm.ancestor(fco)
39 fca = fcm.ancestor(fco)
40 if not fca:
40 if not fca:
41 fca = repo.filectx(fw, fileid=-1)
41 fca = repo.filectx(fw, fileid=-1)
@@ -43,40 +43,38 b' def filemerge(repo, fw, fo, fd, my, othe'
43 b = temp("base", fca)
43 b = temp("base", fca)
44 c = temp("other", fco)
44 c = temp("other", fco)
45
45
46 repo.ui.note(_("resolving %s\n") % fw)
46 if fw != fo:
47 repo.ui.status(_("merging %s and %s\n") % (fw, fo))
48 else:
49 repo.ui.status(_("merging %s\n") % fw)
50
47 repo.ui.debug(_("my %s other %s ancestor %s\n") % (fcm, fco, fca))
51 repo.ui.debug(_("my %s other %s ancestor %s\n") % (fcm, fco, fca))
48
52
49 cmd = (os.environ.get("HGMERGE") or repo.ui.config("ui", "merge")
53 cmd = (os.environ.get("HGMERGE") or repo.ui.config("ui", "merge")
50 or "hgmerge")
54 or "hgmerge")
51 r = util.system('%s "%s" "%s" "%s"' % (cmd, a, b, c), cwd=repo.root,
55 r = util.system('%s "%s" "%s" "%s"' % (cmd, a, b, c), cwd=repo.root,
52 environ={'HG_FILE': fw,
56 environ={'HG_FILE': fw,
53 'HG_MY_NODE': p1,
57 'HG_MY_NODE': str(wctx.parents()[0]),
54 'HG_OTHER_NODE': p2})
58 'HG_OTHER_NODE': str(mctx)})
55 if r:
59 if r:
56 repo.ui.warn(_("merging %s failed!\n") % fw)
60 repo.ui.warn(_("merging %s failed!\n") % fw)
57 else:
58 if fd != fw:
59 repo.ui.debug(_("copying %s to %s\n") % (fw, fd))
60 repo.wwrite(fd, repo.wread(fw))
61 if move:
62 repo.ui.debug(_("removing %s\n") % fw)
63 os.unlink(a)
64
61
65 os.unlink(b)
62 os.unlink(b)
66 os.unlink(c)
63 os.unlink(c)
67 return r
64 return r
68
65
69 def checkunknown(repo, m2, wctx):
66 def checkunknown(wctx, mctx):
70 """
67 """
71 check for collisions between unknown files and files in m2
68 check for collisions between unknown files and files in m2
72 """
69 """
70 man = mctx.manifest()
73 for f in wctx.unknown():
71 for f in wctx.unknown():
74 if f in m2:
72 if f in man:
75 if repo.file(f).cmp(m2[f], repo.wread(f)):
73 if mctx.filectx(f).cmp(wctx.filectx(f).data()):
76 raise util.Abort(_("'%s' already exists in the working"
74 raise util.Abort(_("'%s' already exists in the working"
77 " dir and differs from remote") % f)
75 " dir and differs from remote") % f)
78
76
79 def forgetremoved(m2, wctx):
77 def forgetremoved(wctx, mctx):
80 """
78 """
81 Forget removed files
79 Forget removed files
82
80
@@ -88,9 +86,9 b' def forgetremoved(m2, wctx):'
88 """
86 """
89
87
90 action = []
88 action = []
91
89 man = mctx.manifest()
92 for f in wctx.deleted() + wctx.removed():
90 for f in wctx.deleted() + wctx.removed():
93 if f not in m2:
91 if f not in man:
94 action.append((f, "f"))
92 action.append((f, "f"))
95
93
96 return action
94 return action
@@ -174,11 +172,22 b' def findcopies(repo, m1, m2, limit):'
174
172
175 return copy
173 return copy
176
174
177 def manifestmerge(ui, m1, m2, ma, copy, overwrite, backwards, partial):
175 def manifestmerge(repo, p1, p2, pa, overwrite, partial):
178 """
176 """
179 Merge manifest m1 with m2 using ancestor ma and generate merge action list
177 Merge manifest m1 with m2 using ancestor ma and generate merge action list
180 """
178 """
181
179
180 repo.ui.note(_("resolving manifests\n"))
181 repo.ui.debug(_(" overwrite %s partial %s\n") % (overwrite, bool(partial)))
182 repo.ui.debug(_(" ancestor %s local %s remote %s\n") % (pa, p1, p2))
183
184 m1 = p1.manifest()
185 m2 = p2.manifest()
186 ma = pa.manifest()
187 backwards = (pa == p2)
188 action = []
189 copy = {}
190
182 def fmerge(f, f2=None, fa=None):
191 def fmerge(f, f2=None, fa=None):
183 """merge executable flags"""
192 """merge executable flags"""
184 if not f2:
193 if not f2:
@@ -187,11 +196,12 b' def manifestmerge(ui, m1, m2, ma, copy, '
187 a, b, c = ma.execf(fa), m1.execf(f), m2.execf(f2)
196 a, b, c = ma.execf(fa), m1.execf(f), m2.execf(f2)
188 return ((a^b) | (a^c)) ^ a
197 return ((a^b) | (a^c)) ^ a
189
198
190 action = []
199 def act(msg, m, f, *args):
200 repo.ui.debug(" %s: %s -> %s\n" % (f, msg, m))
201 action.append((f, m) + args)
191
202
192 def act(msg, f, m, *args):
203 if not (backwards or overwrite):
193 ui.debug(" %s: %s -> %s\n" % (f, msg, m))
204 copy = findcopies(repo, m1, m2, pa.rev())
194 action.append((f, m) + args)
195
205
196 # Compare manifests
206 # Compare manifests
197 for f, n in m1.iteritems():
207 for f, n in m1.iteritems():
@@ -203,43 +213,42 b' def manifestmerge(ui, m1, m2, ma, copy, '
203 a = ma.get(f, nullid)
213 a = ma.get(f, nullid)
204 # are both different from the ancestor?
214 # are both different from the ancestor?
205 if not overwrite and n != a and m2[f] != a:
215 if not overwrite and n != a and m2[f] != a:
206 act("versions differ", f, "m", fmerge(f), n[:20], m2[f])
216 act("versions differ", "m", f, f, f, fmerge(f), False)
207 # are we clobbering?
217 # are we clobbering?
208 # is remote's version newer?
218 # is remote's version newer?
209 # or are we going back in time and clean?
219 # or are we going back in time and clean?
210 elif overwrite or m2[f] != a or (backwards and not n[20:]):
220 elif overwrite or m2[f] != a or (backwards and not n[20:]):
211 act("remote is newer", f, "g", m2.execf(f), m2[f])
221 act("remote is newer", "g", f, m2.execf(f))
212 # local is newer, not overwrite, check mode bits
222 # local is newer, not overwrite, check mode bits
213 elif fmerge(f) != m1.execf(f):
223 elif fmerge(f) != m1.execf(f):
214 act("update permissions", f, "e", m2.execf(f))
224 act("update permissions", "e", f, m2.execf(f))
215 # contents same, check mode bits
225 # contents same, check mode bits
216 elif m1.execf(f) != m2.execf(f):
226 elif m1.execf(f) != m2.execf(f):
217 if overwrite or fmerge(f) != m1.execf(f):
227 if overwrite or fmerge(f) != m1.execf(f):
218 act("update permissions", f, "e", m2.execf(f))
228 act("update permissions", "e", f, m2.execf(f))
219 elif f in copy:
229 elif f in copy:
220 f2 = copy[f]
230 f2 = copy[f]
221 if f in ma: # case 3,20 A/B/A
231 if f in ma: # case 3,20 A/B/A
222 act("remote moved",
232 act("remote moved", "m", f, f2, f2, fmerge(f, f2, f), True)
223 f, "c", f2, f2, m1[f], m2[f2], fmerge(f, f2, f), True)
224 else:
233 else:
225 if f2 in m1: # case 2 A,B/B/B
234 if f2 in m1: # case 2 A,B/B/B
226 act("local copied",
235 act("local copied", "m",
227 f, "c", f2, f, m1[f], m2[f2], fmerge(f, f2, f2), False)
236 f, f2, f, fmerge(f, f2, f2), False)
228 else: # case 4,21 A/B/B
237 else: # case 4,21 A/B/B
229 act("local moved",
238 act("local moved", "m",
230 f, "c", f2, f, m1[f], m2[f2], fmerge(f, f2, f2), False)
239 f, f2, f, fmerge(f, f2, f2), False)
231 elif f in ma:
240 elif f in ma:
232 if n != ma[f] and not overwrite:
241 if n != ma[f] and not overwrite:
233 if ui.prompt(
242 if repo.ui.prompt(
234 (_(" local changed %s which remote deleted\n") % f) +
243 (_(" local changed %s which remote deleted\n") % f) +
235 _("(k)eep or (d)elete?"), _("[kd]"), _("k")) == _("d"):
244 _("(k)eep or (d)elete?"), _("[kd]"), _("k")) == _("d"):
236 act("prompt delete", f, "r")
245 act("prompt delete", "r", f)
237 else:
246 else:
238 act("other deleted", f, "r")
247 act("other deleted", "r", f)
239 else:
248 else:
240 # file is created on branch or in working directory
249 # file is created on branch or in working directory
241 if (overwrite and n[20:] != "u") or (backwards and not n[20:]):
250 if (overwrite and n[20:] != "u") or (backwards and not n[20:]):
242 act("remote deleted", f, "r")
251 act("remote deleted", "r", f)
243
252
244 for f, n in m2.iteritems():
253 for f, n in m2.iteritems():
245 if partial and not partial(f):
254 if partial and not partial(f):
@@ -251,22 +260,21 b' def manifestmerge(ui, m1, m2, ma, copy, '
251 if f2 not in m2: # already seen
260 if f2 not in m2: # already seen
252 continue
261 continue
253 # rename case 1, A/A,B/A
262 # rename case 1, A/A,B/A
254 act("remote copied",
263 act("remote copied", "m", f2, f, f, fmerge(f2, f, f2), False)
255 f2, "c", f, f, m1[f2], m2[f], fmerge(f2, f, f2), False)
256 elif f in ma:
264 elif f in ma:
257 if overwrite or backwards:
265 if overwrite or backwards:
258 act("recreating", f, "g", m2.execf(f), n)
266 act("recreating", "g", f, m2.execf(f))
259 elif n != ma[f]:
267 elif n != ma[f]:
260 if ui.prompt(
268 if repo.ui.prompt(
261 (_("remote changed %s which local deleted\n") % f) +
269 (_("remote changed %s which local deleted\n") % f) +
262 _("(k)eep or (d)elete?"), _("[kd]"), _("k")) == _("k"):
270 _("(k)eep or (d)elete?"), _("[kd]"), _("k")) == _("k"):
263 act("prompt recreating", f, "g", m2.execf(f), n)
271 act("prompt recreating", "g", f, m2.execf(f))
264 else:
272 else:
265 act("remote created", f, "g", m2.execf(f), n)
273 act("remote created", "g", f, m2.execf(f))
266
274
267 return action
275 return action
268
276
269 def applyupdates(repo, action, xp1, xp2):
277 def applyupdates(repo, action, wctx, mctx):
270 updated, merged, removed, unresolved = 0, 0, 0, 0
278 updated, merged, removed, unresolved = 0, 0, 0, 0
271 action.sort()
279 action.sort()
272 for a in action:
280 for a in action:
@@ -283,34 +291,34 b' def applyupdates(repo, action, xp1, xp2)'
283 repo.ui.warn(_("update failed to remove %s: %s!\n") %
291 repo.ui.warn(_("update failed to remove %s: %s!\n") %
284 (f, inst.strerror))
292 (f, inst.strerror))
285 removed +=1
293 removed +=1
286 elif m == "c": # copy
294 elif m == "m": # merge
287 f2, fd, my, other, flag, move = a[2:]
295 f2, fd, flag, move = a[2:]
288 repo.ui.status(_("merging %s and %s to %s\n") % (f, f2, fd))
296 if filemerge(repo, f, f2, wctx, mctx):
289 if filemerge(repo, f, f2, fd, my, other, xp1, xp2, move):
290 unresolved += 1
297 unresolved += 1
298 else:
299 if f != fd:
300 repo.ui.debug(_("copying %s to %s\n") % (f, fd))
301 repo.wwrite(fd, repo.wread(f))
302 if move:
303 repo.ui.debug(_("removing %s\n") % f)
304 os.unlink(repo.wjoin(f))
305
291 util.set_exec(repo.wjoin(fd), flag)
306 util.set_exec(repo.wjoin(fd), flag)
292 merged += 1
307 merged += 1
293 elif m == "m": # merge
294 flag, my, other = a[2:]
295 repo.ui.status(_("merging %s\n") % f)
296 if filemerge(repo, f, f, f, my, other, xp1, xp2, False):
297 unresolved += 1
298 util.set_exec(repo.wjoin(f), flag)
299 merged += 1
300 elif m == "g": # get
308 elif m == "g": # get
301 flag, node = a[2:]
309 flag = a[2]
302 repo.ui.note(_("getting %s\n") % f)
310 repo.ui.note(_("getting %s\n") % f)
303 t = repo.file(f).read(node)
311 t = mctx.filectx(f).data()
304 repo.wwrite(f, t)
312 repo.wwrite(f, t)
305 util.set_exec(repo.wjoin(f), flag)
313 util.set_exec(repo.wjoin(f), flag)
306 updated += 1
314 updated += 1
307 elif m == "e": # exec
315 elif m == "e": # exec
308 flag = a[2:]
316 flag = a[2]
309 util.set_exec(repo.wjoin(f), flag)
317 util.set_exec(repo.wjoin(f), flag)
310
318
311 return updated, merged, removed, unresolved
319 return updated, merged, removed, unresolved
312
320
313 def recordupdates(repo, action, branchmerge):
321 def recordupdates(repo, action, branchmerge, mctx):
314 for a in action:
322 for a in action:
315 f, m = a[:2]
323 f, m = a[:2]
316 if m == "r": # remove
324 if m == "r": # remove
@@ -326,22 +334,7 b' def recordupdates(repo, action, branchme'
326 else:
334 else:
327 repo.dirstate.update([f], 'n')
335 repo.dirstate.update([f], 'n')
328 elif m == "m": # merge
336 elif m == "m": # merge
329 flag, my, other = a[2:]
337 f2, fd, flag, move = a[2:]
330 if branchmerge:
331 # We've done a branch merge, mark this file as merged
332 # so that we properly record the merger later
333 repo.dirstate.update([f], 'm')
334 else:
335 # We've update-merged a locally modified file, so
336 # we set the dirstate to emulate a normal checkout
337 # of that file some time in the past. Thus our
338 # merge will appear as a normal local file
339 # modification.
340 fl = repo.file(f)
341 f_len = fl.size(fl.rev(other))
342 repo.dirstate.update([f], 'n', st_size=f_len, st_mtime=-1)
343 elif m == "c": # copy
344 f2, fd, my, other, flag, move = a[2:]
345 if branchmerge:
338 if branchmerge:
346 # We've done a branch merge, mark this file as merged
339 # We've done a branch merge, mark this file as merged
347 # so that we properly record the merger later
340 # so that we properly record the merger later
@@ -352,92 +345,59 b' def recordupdates(repo, action, branchme'
352 # of that file some time in the past. Thus our
345 # of that file some time in the past. Thus our
353 # merge will appear as a normal local file
346 # merge will appear as a normal local file
354 # modification.
347 # modification.
355 fl = repo.file(f)
348 f_len = mctx.filectx(f).size()
356 f_len = fl.size(fl.rev(other))
357 repo.dirstate.update([fd], 'n', st_size=f_len, st_mtime=-1)
349 repo.dirstate.update([fd], 'n', st_size=f_len, st_mtime=-1)
358 if move:
350 if f != f2: # copy/rename
359 repo.dirstate.update([f], 'r')
351 if move:
360 if f != fd:
352 repo.dirstate.update([f], 'r')
361 repo.dirstate.copy(f, fd)
353 if f != fd:
362 else:
354 repo.dirstate.copy(f, fd)
363 repo.dirstate.copy(f2, fd)
355 else:
356 repo.dirstate.copy(f2, fd)
364
357
365 def update(repo, node, branchmerge=False, force=False, partial=None,
358 def update(repo, node, branchmerge=False, force=False, partial=None,
366 wlock=None, show_stats=True, remind=True):
359 wlock=None, show_stats=True, remind=True):
367
360
368 overwrite = force and not branchmerge
369 forcemerge = force and branchmerge
370
371 if not wlock:
361 if not wlock:
372 wlock = repo.wlock()
362 wlock = repo.wlock()
373
363
374 ### check phase
364 overwrite = force and not branchmerge
375
365 forcemerge = force and branchmerge
376 wc = repo.workingctx()
366 wc = repo.workingctx()
377 pl = wc.parents()
367 pl = wc.parents()
368 p1, p2 = pl[0], repo.changectx(node)
369 pa = p1.ancestor(p2)
370 fp1, fp2, xp1, xp2 = p1.node(), p2.node(), str(p1), str(p2)
371
372 ### check phase
378 if not overwrite and len(pl) > 1:
373 if not overwrite and len(pl) > 1:
379 raise util.Abort(_("outstanding uncommitted merges"))
374 raise util.Abort(_("outstanding uncommitted merges"))
380
375 if pa == p1 or pa == p2: # is there a linear path from p1 to p2?
381 p1, p2 = pl[0], repo.changectx(node)
382 pa = p1.ancestor(p2)
383
384 # are we going backwards?
385 backwards = (pa == p2)
386
387 # is there a linear path from p1 to p2?
388 if pa == p1 or pa == p2:
389 if branchmerge:
376 if branchmerge:
390 raise util.Abort(_("there is nothing to merge, just use "
377 raise util.Abort(_("there is nothing to merge, just use "
391 "'hg update' or look at 'hg heads'"))
378 "'hg update' or look at 'hg heads'"))
392 elif not (overwrite or branchmerge):
379 elif not (overwrite or branchmerge):
393 raise util.Abort(_("update spans branches, use 'hg merge' "
380 raise util.Abort(_("update spans branches, use 'hg merge' "
394 "or 'hg update -C' to lose changes"))
381 "or 'hg update -C' to lose changes"))
395
396 if branchmerge and not forcemerge:
382 if branchmerge and not forcemerge:
397 if wc.modified() or wc.added() or wc.removed():
383 if wc.modified() or wc.added() or wc.removed():
398 raise util.Abort(_("outstanding uncommitted changes"))
384 raise util.Abort(_("outstanding uncommitted changes"))
399
385
400 m1 = wc.manifest()
386 ### calculate phase
401 m2 = p2.manifest()
402 ma = pa.manifest()
403
404 # resolve the manifest to determine which files
405 # we care about merging
406 repo.ui.note(_("resolving manifests\n"))
407 repo.ui.debug(_(" overwrite %s branchmerge %s partial %s\n") %
408 (overwrite, branchmerge, bool(partial)))
409 repo.ui.debug(_(" ancestor %s local %s remote %s\n") % (p1, p2, pa))
410
411 action = []
387 action = []
412 copy = {}
413
414 if not force:
388 if not force:
415 checkunknown(repo, m2, wc)
389 checkunknown(wc, p2)
416 if not branchmerge:
390 if not branchmerge:
417 action += forgetremoved(m2, wc)
391 action += forgetremoved(wc, p2)
418 if not (backwards or overwrite):
392 action += manifestmerge(repo, wc, p2, pa, overwrite, partial)
419 copy = findcopies(repo, m1, m2, pa.rev())
420
421 action += manifestmerge(repo.ui, m1, m2, ma, copy,
422 overwrite, backwards, partial)
423
393
424 ### apply phase
394 ### apply phase
425
395 if not branchmerge: # just jump to the new rev
426 if not branchmerge:
396 fp1, fp2, xp1, xp2 = fp2, nullid, xp2, ''
427 # we don't need to do any magic, just jump to the new rev
397 if not partial:
428 p1, p2 = p2, repo.changectx(nullid)
398 repo.hook('preupdate', throw=True, parent1=xp1, parent2=xp2)
429
430 xp1, xp2 = str(p1), str(p2)
431 if not p2: xp2 = ''
432
399
433 repo.hook('preupdate', throw=True, parent1=xp1, parent2=xp2)
400 updated, merged, removed, unresolved = applyupdates(repo, action, wc, p2)
434
435 updated, merged, removed, unresolved = applyupdates(repo, action, xp1, xp2)
436
437 # update dirstate
438 if not partial:
439 recordupdates(repo, action, branchmerge)
440 repo.dirstate.setparents(p1.node(), p2.node())
441
401
442 if show_stats:
402 if show_stats:
443 stats = ((updated, _("updated")),
403 stats = ((updated, _("updated")),
@@ -447,6 +407,10 b' def update(repo, node, branchmerge=False'
447 note = ", ".join([_("%d files %s") % s for s in stats])
407 note = ", ".join([_("%d files %s") % s for s in stats])
448 repo.ui.status("%s\n" % note)
408 repo.ui.status("%s\n" % note)
449 if not partial:
409 if not partial:
410 recordupdates(repo, action, branchmerge, p2)
411 repo.dirstate.setparents(fp1, fp2)
412 repo.hook('update', parent1=xp1, parent2=xp2, error=unresolved)
413
450 if branchmerge:
414 if branchmerge:
451 if unresolved:
415 if unresolved:
452 repo.ui.status(_("There are unresolved merges,"
416 repo.ui.status(_("There are unresolved merges,"
@@ -460,6 +424,5 b' def update(repo, node, branchmerge=False'
460 repo.ui.status(_("There are unresolved merges with"
424 repo.ui.status(_("There are unresolved merges with"
461 " locally modified files.\n"))
425 " locally modified files.\n"))
462
426
463 repo.hook('update', parent1=xp1, parent2=xp2, error=unresolved)
464 return unresolved
427 return unresolved
465
428
@@ -23,6 +23,7 b' manifest |'
23 <table cellspacing="0">
23 <table cellspacing="0">
24 <tr class="light">
24 <tr class="light">
25 <td style="font-family:monospace">drwxr-xr-x</td>
25 <td style="font-family:monospace">drwxr-xr-x</td>
26 <td style="font-family:monospace"></td>
26 <td><a href="{url}file/#node|short##up|urlescape#{getentries}">[up]</a></td>
27 <td><a href="{url}file/#node|short##up|urlescape#{getentries}">[up]</a></td>
27 <td class="link">&nbsp;</td>
28 <td class="link">&nbsp;</td>
28 </tr>
29 </tr>
@@ -14,8 +14,8 b' changelogentry = changelogentry.tmpl'
14 searchentry = changelogentry.tmpl
14 searchentry = changelogentry.tmpl
15 changeset = changeset.tmpl
15 changeset = changeset.tmpl
16 manifest = manifest.tmpl
16 manifest = manifest.tmpl
17 manifestdirentry = '<tr class="parity#parity#"><td style="font-family:monospace">drwxr-xr-x</td><td><a href="#url#file/#node|short##path|urlescape#{getentries}">#basename|escape#/</a></td><td class="link"><a href="#url#file/#node|short##path|urlescape#{getentries}">manifest</a></td></tr>'
17 manifestdirentry = '<tr class="parity#parity#"><td style="font-family:monospace">drwxr-xr-x</td><td style="font-family:monospace"></td><td><a href="#url#file/#node|short##path|urlescape#{getentries}">#basename|escape#/</a></td><td class="link"><a href="#url#file/#node|short##path|urlescape#{getentries}">manifest</a></td></tr>'
18 manifestfileentry = '<tr class="parity#parity#"><td style="font-family:monospace">#permissions|permissions#</td><td class="list"><a class="list" href="#url#file/#node|short#/#file|urlescape#{getentries}">#basename|escape#</a></td><td class="link"><a href="#url#file/#node|short#/#file|urlescape#{getentries}">file</a> | <a href="#url#log/#node|short#/#file|urlescape#{getentries}">revisions</a> | <a href="#url#annotate/#node|short#/#file|urlescape#{getentries}">annotate</a></td></tr>'
18 manifestfileentry = '<tr class="parity#parity#"><td style="font-family:monospace">#permissions|permissions#</td><td style="font-family:monospace" align=right>#size#</td><td class="list"><a class="list" href="#url#file/#node|short#/#file|urlescape#{getentries}">#basename|escape#</a></td><td class="link"><a href="#url#file/#node|short#/#file|urlescape#{getentries}">file</a> | <a href="#url#log/#node|short#/#file|urlescape#{getentries}">revisions</a> | <a href="#url#annotate/#node|short#/#file|urlescape#{getentries}">annotate</a></td></tr>'
19 filerevision = filerevision.tmpl
19 filerevision = filerevision.tmpl
20 fileannotate = fileannotate.tmpl
20 fileannotate = fileannotate.tmpl
21 filelog = filelog.tmpl
21 filelog = filelog.tmpl
@@ -16,7 +16,9 b''
16 <table cellpadding="0" cellspacing="0">
16 <table cellpadding="0" cellspacing="0">
17 <tr class="parity1">
17 <tr class="parity1">
18 <td><tt>drwxr-xr-x</tt>&nbsp;
18 <td><tt>drwxr-xr-x</tt>&nbsp;
19 <td>&nbsp;
19 <td><a href="#url#file/#node|short##up|urlescape#{getentries}">[up]</a>
20 <td><a href="#url#file/#node|short##up|urlescape#{getentries}">[up]</a>
21 </tr>
20 #dentries%manifestdirentry#
22 #dentries%manifestdirentry#
21 #fentries%manifestfileentry#
23 #fentries%manifestfileentry#
22 </table>
24 </table>
@@ -14,8 +14,8 b' changelogentry = changelogentry.tmpl'
14 searchentry = changelogentry.tmpl
14 searchentry = changelogentry.tmpl
15 changeset = changeset.tmpl
15 changeset = changeset.tmpl
16 manifest = manifest.tmpl
16 manifest = manifest.tmpl
17 manifestdirentry = '<tr class="parity#parity#"><td><tt>drwxr-xr-x</tt>&nbsp;<td><a href="#url#file/#node|short##path|urlescape#{getentries}">#basename|escape#/</a>'
17 manifestdirentry = '<tr class="parity#parity#"><td><tt>drwxr-xr-x</tt>&nbsp;<td>&nbsp;<td><a href="#url#file/#node|short##path|urlescape#{getentries}">#basename|escape#/</a>'
18 manifestfileentry = '<tr class="parity#parity#"><td><tt>#permissions|permissions#</tt>&nbsp;<td><a href="#url#file/#node|short#/#file|urlescape#{getentries}">#basename|escape#</a>'
18 manifestfileentry = '<tr class="parity#parity#"><td><tt>#permissions|permissions#</tt>&nbsp;<td align=right><tt>#size#</tt>&nbsp;<td><a href="#url#file/#node|short#/#file|urlescape#{getentries}">#basename|escape#</a>'
19 filerevision = filerevision.tmpl
19 filerevision = filerevision.tmpl
20 fileannotate = fileannotate.tmpl
20 fileannotate = fileannotate.tmpl
21 filediff = filediff.tmpl
21 filediff = filediff.tmpl
@@ -32,6 +32,11 b' parser.add_option("-s", "--cover_stdlib"'
32 help="print a test coverage report inc. standard libraries")
32 help="print a test coverage report inc. standard libraries")
33 parser.add_option("-C", "--annotate", action="store_true",
33 parser.add_option("-C", "--annotate", action="store_true",
34 help="output files annotated with coverage")
34 help="output files annotated with coverage")
35 parser.add_option("-r", "--retest", action="store_true",
36 help="retest failed tests")
37 parser.add_option("-f", "--first", action="store_true",
38 help="exit on the first test failure")
39
35 parser.set_defaults(timeout=180)
40 parser.set_defaults(timeout=180)
36 (options, args) = parser.parse_args()
41 (options, args) = parser.parse_args()
37 verbose = options.verbose
42 verbose = options.verbose
@@ -360,11 +365,16 b' try:'
360 if (test.startswith("test-") and '~' not in test and
365 if (test.startswith("test-") and '~' not in test and
361 ('.' not in test or test.endswith('.py') or
366 ('.' not in test or test.endswith('.py') or
362 test.endswith('.bat'))):
367 test.endswith('.bat'))):
368 if options.retest and not os.path.exists(test + ".err"):
369 skipped += 1
370 continue
363 ret = run_one(test)
371 ret = run_one(test)
364 if ret is None:
372 if ret is None:
365 skipped += 1
373 skipped += 1
366 elif not ret:
374 elif not ret:
367 failed += 1
375 failed += 1
376 if options.first:
377 break
368 tests += 1
378 tests += 1
369
379
370 print "\n# Ran %d tests, %d skipped, %d failed." % (tests, skipped,
380 print "\n# Ran %d tests, %d skipped, %d failed." % (tests, skipped,
@@ -13,4 +13,5 b' rollback completed'
13 abort: date exceeds 32 bits: 111111111111
13 abort: date exceeds 32 bits: 111111111111
14 transaction abort!
14 transaction abort!
15 rollback completed
15 rollback completed
16 trouble committing bar!
16 abort: No such file or directory: .../test/bar
17 abort: No such file or directory: .../test/bar
@@ -19,7 +19,6 b' merging for foo'
19 resolving manifests
19 resolving manifests
20 getting bar
20 getting bar
21 merging foo
21 merging foo
22 resolving foo
23 1 files updated, 1 files merged, 0 files removed, 0 files unresolved
22 1 files updated, 1 files merged, 0 files removed, 0 files unresolved
24 (branch merge, don't forget to commit)
23 (branch merge, don't forget to commit)
25 we shouldn't have anything but foo in merge state here
24 we shouldn't have anything but foo in merge state here
@@ -45,7 +45,6 b' summary: added a b'
45
45
46 resolving manifests
46 resolving manifests
47 merging a
47 merging a
48 resolving a
49 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
48 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
50 (branch merge, don't forget to commit)
49 (branch merge, don't forget to commit)
51 pulling from ../test2
50 pulling from ../test2
@@ -11,7 +11,6 b' 1 files updated, 0 files merged, 0 files'
11 ? file1.orig
11 ? file1.orig
12 016807e6fdaf tip
12 016807e6fdaf tip
13 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
13 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
14 merging file1
15 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
14 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
16 ? file1.orig
15 ? file1.orig
17 016807e6fdaf tip
16 016807e6fdaf tip
@@ -1,7 +1,5 b''
1 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
2 %% no merges expected
2 %% no merges expected
3 merging for b
4 merging b
5 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
3 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
6 (branch merge, don't forget to commit)
4 (branch merge, don't forget to commit)
7 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
5 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
@@ -19,8 +17,6 b' This is file b1'
19 %% merge fails
17 %% merge fails
20 abort: outstanding uncommitted changes
18 abort: outstanding uncommitted changes
21 %% merge expected!
19 %% merge expected!
22 merging for b
23 merging b
24 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
20 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
25 (branch merge, don't forget to commit)
21 (branch merge, don't forget to commit)
26 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
22 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
@@ -22,12 +22,11 b' added 1 changesets with 1 changes to 1 f'
22 (run 'hg heads' to see heads, 'hg merge' to merge)
22 (run 'hg heads' to see heads, 'hg merge' to merge)
23 merge: warning: conflicts during merge
23 merge: warning: conflicts during merge
24 resolving manifests
24 resolving manifests
25 overwrite None branchmerge True partial False
25 overwrite None partial False
26 ancestor 451c744aabcc local a070d41e8360 remote faaea63e63a9
26 ancestor faaea63e63a9 local 451c744aabcc+ remote a070d41e8360
27 test.txt: versions differ -> m
27 test.txt: versions differ -> m
28 merging test.txt
28 merging test.txt
29 resolving test.txt
29 my test.txt@451c744aabcc+ other test.txt@a070d41e8360 ancestor test.txt@faaea63e63a9
30 my test.txt@451c744aabcc other test.txt@a070d41e8360 ancestor test.txt@faaea63e63a9
31 merging test.txt failed!
30 merging test.txt failed!
32 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
31 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
33 There are unresolved merges, you can redo the full merge using:
32 There are unresolved merges, you can redo the full merge using:
@@ -2,13 +2,12 b' checkout'
2 2 files updated, 0 files merged, 2 files removed, 0 files unresolved
2 2 files updated, 0 files merged, 2 files removed, 0 files unresolved
3 merge
3 merge
4 resolving manifests
4 resolving manifests
5 overwrite None branchmerge True partial False
5 overwrite None partial False
6 ancestor f26ec4fc3fa3 local 8e765a822af2 remote af1939970a1c
6 ancestor af1939970a1c local f26ec4fc3fa3+ remote 8e765a822af2
7 a: remote moved -> c
7 a: remote moved -> m
8 b2: remote created -> g
8 b2: remote created -> g
9 merging a and b to b
9 merging a and b
10 resolving a
10 my a@f26ec4fc3fa3+ other b@8e765a822af2 ancestor a@af1939970a1c
11 my a@f26ec4fc3fa3 other b@8e765a822af2 ancestor a@af1939970a1c
12 copying a to b
11 copying a to b
13 removing a
12 removing a
14 getting b2
13 getting b2
@@ -2,17 +2,15 b''
2 test L:up a R:nc a b W: - 1 get local a to b
2 test L:up a R:nc a b W: - 1 get local a to b
3 --------------
3 --------------
4 resolving manifests
4 resolving manifests
5 overwrite None branchmerge True partial False
5 overwrite None partial False
6 ancestor e300d1c794ec local 735846fee2d7 remote 924404dff337
6 ancestor 924404dff337 local e300d1c794ec+ remote 735846fee2d7
7 rev: versions differ -> m
7 rev: versions differ -> m
8 a: remote copied -> c
8 a: remote copied -> m
9 merging a and b to b
9 merging a and b
10 resolving a
10 my a@e300d1c794ec+ other b@735846fee2d7 ancestor a@924404dff337
11 my a@e300d1c794ec other b@735846fee2d7 ancestor a@924404dff337
12 copying a to b
11 copying a to b
13 merging rev
12 merging rev
14 resolving rev
13 my rev@e300d1c794ec+ other rev@735846fee2d7 ancestor rev@924404dff337
15 my rev@e300d1c794ec other rev@735846fee2d7 ancestor rev@924404dff337
16 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
14 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
17 (branch merge, don't forget to commit)
15 (branch merge, don't forget to commit)
18 --------------
16 --------------
@@ -25,18 +23,16 b' M b'
25 test L:nc a b R:up a W: - 2 get rem change to a and b
23 test L:nc a b R:up a W: - 2 get rem change to a and b
26 --------------
24 --------------
27 resolving manifests
25 resolving manifests
28 overwrite None branchmerge True partial False
26 overwrite None partial False
29 ancestor ac809aeed39a local f4db7e329e71 remote 924404dff337
27 ancestor 924404dff337 local ac809aeed39a+ remote f4db7e329e71
30 a: remote is newer -> g
28 a: remote is newer -> g
31 b: local copied -> c
29 b: local copied -> m
32 rev: versions differ -> m
30 rev: versions differ -> m
33 getting a
31 getting a
34 merging b and a to b
32 merging b and a
35 resolving b
33 my b@ac809aeed39a+ other a@f4db7e329e71 ancestor a@924404dff337
36 my b@ac809aeed39a other a@f4db7e329e71 ancestor a@924404dff337
37 merging rev
34 merging rev
38 resolving rev
35 my rev@ac809aeed39a+ other rev@f4db7e329e71 ancestor rev@924404dff337
39 my rev@ac809aeed39a other rev@f4db7e329e71 ancestor rev@924404dff337
40 1 files updated, 2 files merged, 0 files removed, 0 files unresolved
36 1 files updated, 2 files merged, 0 files removed, 0 files unresolved
41 (branch merge, don't forget to commit)
37 (branch merge, don't forget to commit)
42 --------------
38 --------------
@@ -49,18 +45,16 b' M b'
49 test L:up a R:nm a b W: - 3 get local a change to b, remove a
45 test L:up a R:nm a b W: - 3 get local a change to b, remove a
50 --------------
46 --------------
51 resolving manifests
47 resolving manifests
52 overwrite None branchmerge True partial False
48 overwrite None partial False
53 ancestor e300d1c794ec local e03727d2d66b remote 924404dff337
49 ancestor 924404dff337 local e300d1c794ec+ remote e03727d2d66b
54 a: remote moved -> c
50 a: remote moved -> m
55 rev: versions differ -> m
51 rev: versions differ -> m
56 merging a and b to b
52 merging a and b
57 resolving a
53 my a@e300d1c794ec+ other b@e03727d2d66b ancestor a@924404dff337
58 my a@e300d1c794ec other b@e03727d2d66b ancestor a@924404dff337
59 copying a to b
54 copying a to b
60 removing a
55 removing a
61 merging rev
56 merging rev
62 resolving rev
57 my rev@e300d1c794ec+ other rev@e03727d2d66b ancestor rev@924404dff337
63 my rev@e300d1c794ec other rev@e03727d2d66b ancestor rev@924404dff337
64 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
58 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
65 (branch merge, don't forget to commit)
59 (branch merge, don't forget to commit)
66 --------------
60 --------------
@@ -72,16 +66,14 b' M b'
72 test L:nm a b R:up a W: - 4 get remote change to b
66 test L:nm a b R:up a W: - 4 get remote change to b
73 --------------
67 --------------
74 resolving manifests
68 resolving manifests
75 overwrite None branchmerge True partial False
69 overwrite None partial False
76 ancestor ecf3cb2a4219 local f4db7e329e71 remote 924404dff337
70 ancestor 924404dff337 local ecf3cb2a4219+ remote f4db7e329e71
77 b: local moved -> c
71 b: local moved -> m
78 rev: versions differ -> m
72 rev: versions differ -> m
79 merging b and a to b
73 merging b and a
80 resolving b
74 my b@ecf3cb2a4219+ other a@f4db7e329e71 ancestor a@924404dff337
81 my b@ecf3cb2a4219 other a@f4db7e329e71 ancestor a@924404dff337
82 merging rev
75 merging rev
83 resolving rev
76 my rev@ecf3cb2a4219+ other rev@f4db7e329e71 ancestor rev@924404dff337
84 my rev@ecf3cb2a4219 other rev@f4db7e329e71 ancestor rev@924404dff337
85 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
77 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
86 (branch merge, don't forget to commit)
78 (branch merge, don't forget to commit)
87 --------------
79 --------------
@@ -93,39 +85,31 b' M b'
93 test L: R:nc a b W: - 5 get b
85 test L: R:nc a b W: - 5 get b
94 --------------
86 --------------
95 resolving manifests
87 resolving manifests
96 overwrite None branchmerge True partial False
88 overwrite None partial False
97 ancestor 94b33a1b7f2d local 735846fee2d7 remote 924404dff337
89 ancestor 924404dff337 local 94b33a1b7f2d+ remote 735846fee2d7
98 rev: versions differ -> m
90 rev: versions differ -> m
99 a: remote copied -> c
91 a: remote copied -> m
100 merging a and b to b
101 resolving a
102 my a@924404dff337 other b@735846fee2d7 ancestor a@924404dff337
103 copying a to b
92 copying a to b
104 merging rev
93 merging rev
105 resolving rev
94 my rev@94b33a1b7f2d+ other rev@735846fee2d7 ancestor rev@924404dff337
106 my rev@94b33a1b7f2d other rev@735846fee2d7 ancestor rev@924404dff337
107 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
95 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
108 (branch merge, don't forget to commit)
96 (branch merge, don't forget to commit)
109 --------------
97 --------------
110 M a
111 M b
98 M b
112 a
99 a
100 C a
113 --------------
101 --------------
114
102
115 --------------
103 --------------
116 test L:nc a b R: W: - 6 nothing
104 test L:nc a b R: W: - 6 nothing
117 --------------
105 --------------
118 resolving manifests
106 resolving manifests
119 overwrite None branchmerge True partial False
107 overwrite None partial False
120 ancestor ac809aeed39a local 97c705ade336 remote 924404dff337
108 ancestor 924404dff337 local ac809aeed39a+ remote 97c705ade336
121 b: local copied -> c
109 b: local copied -> m
122 rev: versions differ -> m
110 rev: versions differ -> m
123 merging b and a to b
124 resolving b
125 my b@ac809aeed39a other a@924404dff337 ancestor a@924404dff337
126 merging rev
111 merging rev
127 resolving rev
112 my rev@ac809aeed39a+ other rev@97c705ade336 ancestor rev@924404dff337
128 my rev@ac809aeed39a other rev@97c705ade336 ancestor rev@924404dff337
129 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
113 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
130 (branch merge, don't forget to commit)
114 (branch merge, don't forget to commit)
131 --------------
115 --------------
@@ -138,18 +122,14 b' C a'
138 test L: R:nm a b W: - 7 get b
122 test L: R:nm a b W: - 7 get b
139 --------------
123 --------------
140 resolving manifests
124 resolving manifests
141 overwrite None branchmerge True partial False
125 overwrite None partial False
142 ancestor 94b33a1b7f2d local e03727d2d66b remote 924404dff337
126 ancestor 924404dff337 local 94b33a1b7f2d+ remote e03727d2d66b
143 a: remote moved -> c
127 a: remote moved -> m
144 rev: versions differ -> m
128 rev: versions differ -> m
145 merging a and b to b
146 resolving a
147 my a@924404dff337 other b@e03727d2d66b ancestor a@924404dff337
148 copying a to b
129 copying a to b
149 removing a
130 removing a
150 merging rev
131 merging rev
151 resolving rev
132 my rev@94b33a1b7f2d+ other rev@e03727d2d66b ancestor rev@924404dff337
152 my rev@94b33a1b7f2d other rev@e03727d2d66b ancestor rev@924404dff337
153 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
133 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
154 (branch merge, don't forget to commit)
134 (branch merge, don't forget to commit)
155 --------------
135 --------------
@@ -161,16 +141,12 b' M b'
161 test L:nm a b R: W: - 8 nothing
141 test L:nm a b R: W: - 8 nothing
162 --------------
142 --------------
163 resolving manifests
143 resolving manifests
164 overwrite None branchmerge True partial False
144 overwrite None partial False
165 ancestor ecf3cb2a4219 local 97c705ade336 remote 924404dff337
145 ancestor 924404dff337 local ecf3cb2a4219+ remote 97c705ade336
166 b: local moved -> c
146 b: local moved -> m
167 rev: versions differ -> m
147 rev: versions differ -> m
168 merging b and a to b
169 resolving b
170 my b@ecf3cb2a4219 other a@924404dff337 ancestor a@924404dff337
171 merging rev
148 merging rev
172 resolving rev
149 my rev@ecf3cb2a4219+ other rev@97c705ade336 ancestor rev@924404dff337
173 my rev@ecf3cb2a4219 other rev@97c705ade336 ancestor rev@924404dff337
174 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
150 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
175 (branch merge, don't forget to commit)
151 (branch merge, don't forget to commit)
176 --------------
152 --------------
@@ -182,16 +158,14 b' M b'
182 test L:um a b R:um a b W: - 9 do merge with ancestor in a
158 test L:um a b R:um a b W: - 9 do merge with ancestor in a
183 --------------
159 --------------
184 resolving manifests
160 resolving manifests
185 overwrite None branchmerge True partial False
161 overwrite None partial False
186 ancestor ec03c2ca8642 local 79cc6877a3b7 remote 924404dff337
162 ancestor 924404dff337 local ec03c2ca8642+ remote 79cc6877a3b7
187 b: versions differ -> m
163 b: versions differ -> m
188 rev: versions differ -> m
164 rev: versions differ -> m
189 merging b
165 merging b
190 resolving b
166 my b@ec03c2ca8642+ other b@79cc6877a3b7 ancestor a@924404dff337
191 my b@ec03c2ca8642 other b@79cc6877a3b7 ancestor a@924404dff337
192 merging rev
167 merging rev
193 resolving rev
168 my rev@ec03c2ca8642+ other rev@79cc6877a3b7 ancestor rev@924404dff337
194 my rev@ec03c2ca8642 other rev@79cc6877a3b7 ancestor rev@924404dff337
195 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
169 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
196 (branch merge, don't forget to commit)
170 (branch merge, don't forget to commit)
197 --------------
171 --------------
@@ -202,14 +176,13 b' M b'
202 test L:nm a b R:nm a c W: - 11 get c, keep b
176 test L:nm a b R:nm a c W: - 11 get c, keep b
203 --------------
177 --------------
204 resolving manifests
178 resolving manifests
205 overwrite None branchmerge True partial False
179 overwrite None partial False
206 ancestor ecf3cb2a4219 local e6abcc1a30c2 remote 924404dff337
180 ancestor 924404dff337 local ecf3cb2a4219+ remote e6abcc1a30c2
207 rev: versions differ -> m
181 rev: versions differ -> m
208 c: remote created -> g
182 c: remote created -> g
209 getting c
183 getting c
210 merging rev
184 merging rev
211 resolving rev
185 my rev@ecf3cb2a4219+ other rev@e6abcc1a30c2 ancestor rev@924404dff337
212 my rev@ecf3cb2a4219 other rev@e6abcc1a30c2 ancestor rev@924404dff337
213 1 files updated, 1 files merged, 0 files removed, 0 files unresolved
186 1 files updated, 1 files merged, 0 files removed, 0 files unresolved
214 (branch merge, don't forget to commit)
187 (branch merge, don't forget to commit)
215 --------------
188 --------------
@@ -221,16 +194,14 b' C b'
221 test L:nc a b R:up b W: - 12 merge b no ancestor
194 test L:nc a b R:up b W: - 12 merge b no ancestor
222 --------------
195 --------------
223 resolving manifests
196 resolving manifests
224 overwrite None branchmerge True partial False
197 overwrite None partial False
225 ancestor ac809aeed39a local af30c7647fc7 remote 924404dff337
198 ancestor 924404dff337 local ac809aeed39a+ remote af30c7647fc7
226 b: versions differ -> m
199 b: versions differ -> m
227 rev: versions differ -> m
200 rev: versions differ -> m
228 merging b
201 merging b
229 resolving b
202 my b@ac809aeed39a+ other b@af30c7647fc7 ancestor b@000000000000
230 my b@ac809aeed39a other b@af30c7647fc7 ancestor b@000000000000
231 merging rev
203 merging rev
232 resolving rev
204 my rev@ac809aeed39a+ other rev@af30c7647fc7 ancestor rev@924404dff337
233 my rev@ac809aeed39a other rev@af30c7647fc7 ancestor rev@924404dff337
234 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
205 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
235 (branch merge, don't forget to commit)
206 (branch merge, don't forget to commit)
236 --------------
207 --------------
@@ -242,18 +213,16 b' C a'
242 test L:up b R:nm a b W: - 13 merge b no ancestor
213 test L:up b R:nm a b W: - 13 merge b no ancestor
243 --------------
214 --------------
244 resolving manifests
215 resolving manifests
245 overwrite None branchmerge True partial False
216 overwrite None partial False
246 ancestor 59318016310c local e03727d2d66b remote 924404dff337
217 ancestor 924404dff337 local 59318016310c+ remote e03727d2d66b
247 a: other deleted -> r
218 a: other deleted -> r
248 b: versions differ -> m
219 b: versions differ -> m
249 rev: versions differ -> m
220 rev: versions differ -> m
250 removing a
221 removing a
251 merging b
222 merging b
252 resolving b
223 my b@59318016310c+ other b@e03727d2d66b ancestor b@000000000000
253 my b@59318016310c other b@e03727d2d66b ancestor b@000000000000
254 merging rev
224 merging rev
255 resolving rev
225 my rev@59318016310c+ other rev@e03727d2d66b ancestor rev@924404dff337
256 my rev@59318016310c other rev@e03727d2d66b ancestor rev@924404dff337
257 0 files updated, 2 files merged, 1 files removed, 0 files unresolved
226 0 files updated, 2 files merged, 1 files removed, 0 files unresolved
258 (branch merge, don't forget to commit)
227 (branch merge, don't forget to commit)
259 --------------
228 --------------
@@ -264,18 +233,16 b' M b'
264 test L:nc a b R:up a b W: - 14 merge b no ancestor
233 test L:nc a b R:up a b W: - 14 merge b no ancestor
265 --------------
234 --------------
266 resolving manifests
235 resolving manifests
267 overwrite None branchmerge True partial False
236 overwrite None partial False
268 ancestor ac809aeed39a local 8dbce441892a remote 924404dff337
237 ancestor 924404dff337 local ac809aeed39a+ remote 8dbce441892a
269 a: remote is newer -> g
238 a: remote is newer -> g
270 b: versions differ -> m
239 b: versions differ -> m
271 rev: versions differ -> m
240 rev: versions differ -> m
272 getting a
241 getting a
273 merging b
242 merging b
274 resolving b
243 my b@ac809aeed39a+ other b@8dbce441892a ancestor b@000000000000
275 my b@ac809aeed39a other b@8dbce441892a ancestor b@000000000000
276 merging rev
244 merging rev
277 resolving rev
245 my rev@ac809aeed39a+ other rev@8dbce441892a ancestor rev@924404dff337
278 my rev@ac809aeed39a other rev@8dbce441892a ancestor rev@924404dff337
279 1 files updated, 2 files merged, 0 files removed, 0 files unresolved
246 1 files updated, 2 files merged, 0 files removed, 0 files unresolved
280 (branch merge, don't forget to commit)
247 (branch merge, don't forget to commit)
281 --------------
248 --------------
@@ -287,18 +254,16 b' M b'
287 test L:up b R:nm a b W: - 15 merge b no ancestor, remove a
254 test L:up b R:nm a b W: - 15 merge b no ancestor, remove a
288 --------------
255 --------------
289 resolving manifests
256 resolving manifests
290 overwrite None branchmerge True partial False
257 overwrite None partial False
291 ancestor 59318016310c local e03727d2d66b remote 924404dff337
258 ancestor 924404dff337 local 59318016310c+ remote e03727d2d66b
292 a: other deleted -> r
259 a: other deleted -> r
293 b: versions differ -> m
260 b: versions differ -> m
294 rev: versions differ -> m
261 rev: versions differ -> m
295 removing a
262 removing a
296 merging b
263 merging b
297 resolving b
264 my b@59318016310c+ other b@e03727d2d66b ancestor b@000000000000
298 my b@59318016310c other b@e03727d2d66b ancestor b@000000000000
299 merging rev
265 merging rev
300 resolving rev
266 my rev@59318016310c+ other rev@e03727d2d66b ancestor rev@924404dff337
301 my rev@59318016310c other rev@e03727d2d66b ancestor rev@924404dff337
302 0 files updated, 2 files merged, 1 files removed, 0 files unresolved
267 0 files updated, 2 files merged, 1 files removed, 0 files unresolved
303 (branch merge, don't forget to commit)
268 (branch merge, don't forget to commit)
304 --------------
269 --------------
@@ -309,18 +274,16 b' M b'
309 test L:nc a b R:up a b W: - 16 get a, merge b no ancestor
274 test L:nc a b R:up a b W: - 16 get a, merge b no ancestor
310 --------------
275 --------------
311 resolving manifests
276 resolving manifests
312 overwrite None branchmerge True partial False
277 overwrite None partial False
313 ancestor ac809aeed39a local 8dbce441892a remote 924404dff337
278 ancestor 924404dff337 local ac809aeed39a+ remote 8dbce441892a
314 a: remote is newer -> g
279 a: remote is newer -> g
315 b: versions differ -> m
280 b: versions differ -> m
316 rev: versions differ -> m
281 rev: versions differ -> m
317 getting a
282 getting a
318 merging b
283 merging b
319 resolving b
284 my b@ac809aeed39a+ other b@8dbce441892a ancestor b@000000000000
320 my b@ac809aeed39a other b@8dbce441892a ancestor b@000000000000
321 merging rev
285 merging rev
322 resolving rev
286 my rev@ac809aeed39a+ other rev@8dbce441892a ancestor rev@924404dff337
323 my rev@ac809aeed39a other rev@8dbce441892a ancestor rev@924404dff337
324 1 files updated, 2 files merged, 0 files removed, 0 files unresolved
287 1 files updated, 2 files merged, 0 files removed, 0 files unresolved
325 (branch merge, don't forget to commit)
288 (branch merge, don't forget to commit)
326 --------------
289 --------------
@@ -332,16 +295,14 b' M b'
332 test L:up a b R:nc a b W: - 17 keep a, merge b no ancestor
295 test L:up a b R:nc a b W: - 17 keep a, merge b no ancestor
333 --------------
296 --------------
334 resolving manifests
297 resolving manifests
335 overwrite None branchmerge True partial False
298 overwrite None partial False
336 ancestor 0b76e65c8289 local 735846fee2d7 remote 924404dff337
299 ancestor 924404dff337 local 0b76e65c8289+ remote 735846fee2d7
337 b: versions differ -> m
300 b: versions differ -> m
338 rev: versions differ -> m
301 rev: versions differ -> m
339 merging b
302 merging b
340 resolving b
303 my b@0b76e65c8289+ other b@735846fee2d7 ancestor b@000000000000
341 my b@0b76e65c8289 other b@735846fee2d7 ancestor b@000000000000
342 merging rev
304 merging rev
343 resolving rev
305 my rev@0b76e65c8289+ other rev@735846fee2d7 ancestor rev@924404dff337
344 my rev@0b76e65c8289 other rev@735846fee2d7 ancestor rev@924404dff337
345 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
306 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
346 (branch merge, don't forget to commit)
307 (branch merge, don't forget to commit)
347 --------------
308 --------------
@@ -353,18 +314,16 b' C a'
353 test L:nm a b R:up a b W: - 18 merge b no ancestor
314 test L:nm a b R:up a b W: - 18 merge b no ancestor
354 --------------
315 --------------
355 resolving manifests
316 resolving manifests
356 overwrite None branchmerge True partial False
317 overwrite None partial False
357 ancestor ecf3cb2a4219 local 8dbce441892a remote 924404dff337
318 ancestor 924404dff337 local ecf3cb2a4219+ remote 8dbce441892a
358 b: versions differ -> m
319 b: versions differ -> m
359 rev: versions differ -> m
320 rev: versions differ -> m
360 a: prompt recreating -> g
321 a: prompt recreating -> g
361 getting a
322 getting a
362 merging b
323 merging b
363 resolving b
324 my b@ecf3cb2a4219+ other b@8dbce441892a ancestor b@000000000000
364 my b@ecf3cb2a4219 other b@8dbce441892a ancestor b@000000000000
365 merging rev
325 merging rev
366 resolving rev
326 my rev@ecf3cb2a4219+ other rev@8dbce441892a ancestor rev@924404dff337
367 my rev@ecf3cb2a4219 other rev@8dbce441892a ancestor rev@924404dff337
368 1 files updated, 2 files merged, 0 files removed, 0 files unresolved
327 1 files updated, 2 files merged, 0 files removed, 0 files unresolved
369 (branch merge, don't forget to commit)
328 (branch merge, don't forget to commit)
370 --------------
329 --------------
@@ -376,16 +335,14 b' M b'
376 test L:up a b R:nm a b W: - 19 merge b no ancestor, prompt remove a
335 test L:up a b R:nm a b W: - 19 merge b no ancestor, prompt remove a
377 --------------
336 --------------
378 resolving manifests
337 resolving manifests
379 overwrite None branchmerge True partial False
338 overwrite None partial False
380 ancestor 0b76e65c8289 local e03727d2d66b remote 924404dff337
339 ancestor 924404dff337 local 0b76e65c8289+ remote e03727d2d66b
381 b: versions differ -> m
340 b: versions differ -> m
382 rev: versions differ -> m
341 rev: versions differ -> m
383 merging b
342 merging b
384 resolving b
343 my b@0b76e65c8289+ other b@e03727d2d66b ancestor b@000000000000
385 my b@0b76e65c8289 other b@e03727d2d66b ancestor b@000000000000
386 merging rev
344 merging rev
387 resolving rev
345 my rev@0b76e65c8289+ other rev@e03727d2d66b ancestor rev@924404dff337
388 my rev@0b76e65c8289 other rev@e03727d2d66b ancestor rev@924404dff337
389 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
346 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
390 (branch merge, don't forget to commit)
347 (branch merge, don't forget to commit)
391 --------------
348 --------------
@@ -397,18 +354,16 b' C a'
397 test L:up a R:um a b W: - 20 merge a and b to b, remove a
354 test L:up a R:um a b W: - 20 merge a and b to b, remove a
398 --------------
355 --------------
399 resolving manifests
356 resolving manifests
400 overwrite None branchmerge True partial False
357 overwrite None partial False
401 ancestor e300d1c794ec local 79cc6877a3b7 remote 924404dff337
358 ancestor 924404dff337 local e300d1c794ec+ remote 79cc6877a3b7
402 a: remote moved -> c
359 a: remote moved -> m
403 rev: versions differ -> m
360 rev: versions differ -> m
404 merging a and b to b
361 merging a and b
405 resolving a
362 my a@e300d1c794ec+ other b@79cc6877a3b7 ancestor a@924404dff337
406 my a@e300d1c794ec other b@79cc6877a3b7 ancestor a@924404dff337
407 copying a to b
363 copying a to b
408 removing a
364 removing a
409 merging rev
365 merging rev
410 resolving rev
366 my rev@e300d1c794ec+ other rev@79cc6877a3b7 ancestor rev@924404dff337
411 my rev@e300d1c794ec other rev@79cc6877a3b7 ancestor rev@924404dff337
412 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
367 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
413 (branch merge, don't forget to commit)
368 (branch merge, don't forget to commit)
414 --------------
369 --------------
@@ -420,16 +375,14 b' M b'
420 test L:um a b R:up a W: - 21 merge a and b to b
375 test L:um a b R:up a W: - 21 merge a and b to b
421 --------------
376 --------------
422 resolving manifests
377 resolving manifests
423 overwrite None branchmerge True partial False
378 overwrite None partial False
424 ancestor ec03c2ca8642 local f4db7e329e71 remote 924404dff337
379 ancestor 924404dff337 local ec03c2ca8642+ remote f4db7e329e71
425 b: local moved -> c
380 b: local moved -> m
426 rev: versions differ -> m
381 rev: versions differ -> m
427 merging b and a to b
382 merging b and a
428 resolving b
383 my b@ec03c2ca8642+ other a@f4db7e329e71 ancestor a@924404dff337
429 my b@ec03c2ca8642 other a@f4db7e329e71 ancestor a@924404dff337
430 merging rev
384 merging rev
431 resolving rev
385 my rev@ec03c2ca8642+ other rev@f4db7e329e71 ancestor rev@924404dff337
432 my rev@ec03c2ca8642 other rev@f4db7e329e71 ancestor rev@924404dff337
433 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
386 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
434 (branch merge, don't forget to commit)
387 (branch merge, don't forget to commit)
435 --------------
388 --------------
@@ -441,18 +394,16 b' M b'
441 test L:nm a b R:up a c W: - 23 get c, keep b
394 test L:nm a b R:up a c W: - 23 get c, keep b
442 --------------
395 --------------
443 resolving manifests
396 resolving manifests
444 overwrite None branchmerge True partial False
397 overwrite None partial False
445 ancestor ecf3cb2a4219 local 2b958612230f remote 924404dff337
398 ancestor 924404dff337 local ecf3cb2a4219+ remote 2b958612230f
446 b: local moved -> c
399 b: local moved -> m
447 rev: versions differ -> m
400 rev: versions differ -> m
448 c: remote created -> g
401 c: remote created -> g
449 merging b and a to b
402 merging b and a
450 resolving b
403 my b@ecf3cb2a4219+ other a@2b958612230f ancestor a@924404dff337
451 my b@ecf3cb2a4219 other a@2b958612230f ancestor a@924404dff337
452 getting c
404 getting c
453 merging rev
405 merging rev
454 resolving rev
406 my rev@ecf3cb2a4219+ other rev@2b958612230f ancestor rev@924404dff337
455 my rev@ecf3cb2a4219 other rev@2b958612230f ancestor rev@924404dff337
456 1 files updated, 2 files merged, 0 files removed, 0 files unresolved
407 1 files updated, 2 files merged, 0 files removed, 0 files unresolved
457 (branch merge, don't forget to commit)
408 (branch merge, don't forget to commit)
458 --------------
409 --------------
@@ -15,13 +15,12 b' date: Mon Jan 12 13:46:40 1970 +0'
15 summary: 1
15 summary: 1
16
16
17 resolving manifests
17 resolving manifests
18 overwrite False branchmerge False partial False
18 overwrite False partial False
19 ancestor 33aaa84a386b local 802f095af299 remote 33aaa84a386b
19 ancestor 33aaa84a386b local 33aaa84a386b+ remote 802f095af299
20 a: versions differ -> m
20 a: versions differ -> m
21 b: remote created -> g
21 b: remote created -> g
22 merging a
22 merging a
23 resolving a
23 my a@33aaa84a386b+ other a@802f095af299 ancestor a@33aaa84a386b
24 my a@33aaa84a386b other a@802f095af299 ancestor a@33aaa84a386b
25 getting b
24 getting b
26 1 files updated, 1 files merged, 0 files removed, 0 files unresolved
25 1 files updated, 1 files merged, 0 files removed, 0 files unresolved
27 changeset: 1:802f095af299
26 changeset: 1:802f095af299
@@ -31,8 +30,8 b' date: Mon Jan 12 13:46:40 1970 +0'
31 summary: 2
30 summary: 2
32
31
33 resolving manifests
32 resolving manifests
34 overwrite False branchmerge False partial False
33 overwrite False partial False
35 ancestor 802f095af299 local 33aaa84a386b remote 33aaa84a386b
34 ancestor 33aaa84a386b local 802f095af299+ remote 33aaa84a386b
36 b: remote deleted -> r
35 b: remote deleted -> r
37 removing b
36 removing b
38 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
37 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
@@ -49,13 +48,12 b' date: Mon Jan 12 13:46:40 1970 +0'
49 summary: 1
48 summary: 1
50
49
51 resolving manifests
50 resolving manifests
52 overwrite False branchmerge False partial False
51 overwrite False partial False
53 ancestor 33aaa84a386b local 802f095af299 remote 33aaa84a386b
52 ancestor 33aaa84a386b local 33aaa84a386b+ remote 802f095af299
54 a: versions differ -> m
53 a: versions differ -> m
55 b: remote created -> g
54 b: remote created -> g
56 merging a
55 merging a
57 resolving a
56 my a@33aaa84a386b+ other a@802f095af299 ancestor a@33aaa84a386b
58 my a@33aaa84a386b other a@802f095af299 ancestor a@33aaa84a386b
59 getting b
57 getting b
60 1 files updated, 1 files merged, 0 files removed, 0 files unresolved
58 1 files updated, 1 files merged, 0 files removed, 0 files unresolved
61 changeset: 1:802f095af299
59 changeset: 1:802f095af299
@@ -100,16 +98,14 b' failed'
100 abort: outstanding uncommitted changes
98 abort: outstanding uncommitted changes
101 failed
99 failed
102 resolving manifests
100 resolving manifests
103 overwrite False branchmerge True partial False
101 overwrite False partial False
104 ancestor 802f095af299 local 030602aee63d remote 33aaa84a386b
102 ancestor 33aaa84a386b local 802f095af299+ remote 030602aee63d
105 a: versions differ -> m
103 a: versions differ -> m
106 b: versions differ -> m
104 b: versions differ -> m
107 merging a
105 merging a
108 resolving a
106 my a@802f095af299+ other a@030602aee63d ancestor a@33aaa84a386b
109 my a@802f095af299 other a@030602aee63d ancestor a@33aaa84a386b
110 merging b
107 merging b
111 resolving b
108 my b@802f095af299+ other b@030602aee63d ancestor b@000000000000
112 my b@802f095af299 other b@030602aee63d ancestor b@000000000000
113 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
109 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
114 (branch merge, don't forget to commit)
110 (branch merge, don't forget to commit)
115 changeset: 1:802f095af299
111 changeset: 1:802f095af299
@@ -137,5 +133,4 b' adding changesets'
137 adding manifests
133 adding manifests
138 adding file changes
134 adding file changes
139 added 1 changesets with 1 changes to 1 files
135 added 1 changesets with 1 changes to 1 files
140 merging a
141 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
136 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
@@ -40,8 +40,8 b' a'
40 side1
40 side1
41 side2
41 side2
42 resolving manifests
42 resolving manifests
43 overwrite True branchmerge False partial False
43 overwrite True partial False
44 ancestor ded32b0db104 local 221226fb2bd8 remote 537353581d3d
44 ancestor 537353581d3d local ded32b0db104+ remote 221226fb2bd8
45 side2: remote deleted -> r
45 side2: remote deleted -> r
46 side1: remote deleted -> r
46 side1: remote deleted -> r
47 main: remote created -> g
47 main: remote created -> g
General Comments 0
You need to be logged in to leave comments. Login now