merge with upstream

This commit is contained in:
Thomas Arendsen Hein 2006-10-10 09:30:05 +02:00
commit f8cc3a01a4
19 changed files with 271 additions and 380 deletions

View File

@ -8,7 +8,7 @@
from node import *
from i18n import gettext as _
from demandload import demandload
demandload(globals(), "ancestor bdiff repo revlog util")
demandload(globals(), "ancestor bdiff repo revlog util os")
class changectx(object):
"""A changecontext object makes access to data related to a particular
@ -191,6 +191,9 @@ class filectx(object):
def data(self): return self._filelog.read(self._filenode)
def renamed(self): return self._filelog.renamed(self._filenode)
def path(self): return self._path
def size(self): return self._filelog.size(self._filerev)
def cmp(self, text): return self._filelog.cmp(self._filenode, text)
def parents(self):
p = self._path
@ -327,7 +330,7 @@ class workingctx(changectx):
self._node = None
def __str__(self):
return "."
return str(self._parents[0]) + "+"
def __nonzero__(self):
return True
@ -414,7 +417,9 @@ class workingfilectx(filectx):
self._changectx = workingctx(repo)
return self._changectx
elif name == '_repopath':
self._repopath = self._repo.dirstate.copied(p) or self._path
self._repopath = (self._repo.dirstate.copied(self._path)
or self._path)
return self._repopath
elif name == '_filelog':
self._filelog = self._repo.file(self._repopath)
return self._filelog
@ -425,7 +430,7 @@ class workingfilectx(filectx):
return True
def __str__(self):
return "%s@." % self.path()
return "%s@%s" % (self.path(), self._changectx)
def filectx(self, fileid):
'''opens an arbitrary revision of the file without
@ -449,7 +454,7 @@ class workingfilectx(filectx):
'''return parent filectxs, following copies if necessary'''
p = self._path
rp = self._repopath
pcl = self._workingctx._parents
pcl = self._changectx._parents
fl = self._filelog
pl = [ (rp, pcl[0]._manifest.get(rp, nullid), fl) ]
if len(pcl) > 1:
@ -463,3 +468,6 @@ class workingfilectx(filectx):
def children(self):
return []
def size(self): return os.stat(self._repo.wjoin(self._path)).st_size
def cmp(self, text): return self._repo.wread(self._path) == text

View File

@ -59,12 +59,6 @@ class hgweb(object):
if i in allowed or self.repo.ui.configbool("web", "allow" + i):
yield {"type" : i, "extension" : spec[2], "node" : nodeid}
def listfiles(self, files, mf):
for f in files[:self.maxfiles]:
yield self.t("filenodelink", node=hex(mf[f]), file=f)
if len(files) > self.maxfiles:
yield self.t("fileellipses")
def listfilediffs(self, files, changeset):
for f in files[:self.maxfiles]:
yield self.t("filedifflink", node=hex(changeset), file=f)
@ -436,9 +430,9 @@ class hgweb(object):
continue
yield {"file": full,
"filenode": hex(fnode),
"parity": self.stripes(parity),
"basename": f,
"size": ctx.filectx(full).size(),
"permissions": mf.execf(full)}
parity += 1

View File

@ -461,20 +461,18 @@ class localrepository(repo.repository):
self.wreload,
desc=_('working directory of %s') % self.origroot)
def checkfilemerge(self, filename, text, filelog, manifest1, manifest2):
def filecommit(self, fn, manifest1, manifest2, linkrev, transaction, changelist):
"""
Determine whether a new filenode is needed and what parent
and rename information is needed for a file commit.
Returns (old entry, file parent 1, file parent 2, metadata)
If old entry is not None, a commit is not needed.
commit an individual file as part of a larger transaction
"""
fp1 = manifest1.get(filename, nullid)
fp2 = manifest2.get(filename, nullid)
t = self.wread(fn)
fl = self.file(fn)
fp1 = manifest1.get(fn, nullid)
fp2 = manifest2.get(fn, nullid)
meta = {}
cp = self.dirstate.copied(filename)
cp = self.dirstate.copied(fn)
if cp:
meta["copy"] = cp
if not manifest2: # not a branch merge
@ -486,21 +484,22 @@ class localrepository(repo.repository):
meta["copyrev"] = hex(manifest2.get(cp))
fp2 = nullid
self.ui.debug(_(" %s: copy %s:%s\n") %
(filename, cp, meta["copyrev"]))
(fn, cp, meta["copyrev"]))
fp1 = nullid
elif fp2 != nullid:
# is one parent an ancestor of the other?
fpa = filelog.ancestor(fp1, fp2)
fpa = fl.ancestor(fp1, fp2)
if fpa == fp1:
fp1, fp2 = fp2, nullid
elif fpa == fp2:
fp2 = nullid
# is the file unmodified from the parent? report existing entry
if fp2 == nullid and not filelog.cmp(fp1, text):
return (fp1, None, None, {})
if fp2 == nullid and not fl.cmp(fp1, t):
return fp1
return (None, fp1, fp2, meta)
changelist.append(fn)
return fl.add(t, meta, transaction, linkrev, fp1, fp2)
def rawcommit(self, files, text, user, date, p1=None, p2=None, wlock=None):
orig_parent = self.dirstate.parents()[0] or nullid
@ -524,19 +523,8 @@ class localrepository(repo.repository):
linkrev = self.changelog.count()
for f in files:
try:
t = self.wread(f)
m1[f] = self.filecommit(f, m1, m2, linkrev, tr, changed)
m1.set(f, util.is_exec(self.wjoin(f), m1.execf(f)))
r = self.file(f)
entry, fp1, fp2, meta = self.checkfilemerge(f, t, r, m1, m2)
if entry:
m1[f] = entry
continue
m1[f] = r.add(t, meta, tr, linkrev, fp1, fp2)
changed.append(f)
if update_dirstate:
self.dirstate.update([f], "n")
except IOError:
try:
del m1[f]
@ -603,31 +591,18 @@ class localrepository(repo.repository):
for f in commit:
self.ui.note(f + "\n")
try:
new[f] = self.filecommit(f, m1, m2, linkrev, tr, changed)
m1.set(f, util.is_exec(self.wjoin(f), m1.execf(f)))
t = self.wread(f)
except IOError:
self.ui.warn(_("trouble committing %s!\n") % f)
raise
r = self.file(f)
entry, fp1, fp2, meta = self.checkfilemerge(f, t, r, m1, m2)
if entry:
new[f] = entry
continue
new[f] = r.add(t, meta, tr, linkrev, fp1, fp2)
# remember what we've added so that we can later calculate
# the files to pull from a set of changesets
changed.append(f)
# update manifest
m1.update(new)
for f in remove:
if f in m1:
del m1[f]
mn = self.manifest.add(m1, tr, linkrev, c1[0], c2[0],
(new, remove))
mn = self.manifest.add(m1, tr, linkrev, c1[0], c2[0], (new, remove))
# add changeset
new = new.keys()

241
mercurial/merge.py Normal file → Executable file
View File

@ -10,16 +10,12 @@ from i18n import gettext as _
from demandload import *
demandload(globals(), "errno util os tempfile")
def filemerge(repo, fw, fo, fd, my, other, p1, p2, move):
def filemerge(repo, fw, fo, wctx, mctx):
"""perform a 3-way merge in the working directory
fw = filename in the working directory and first parent
fo = filename in other parent
fd = destination filename
my = fileid in first parent
other = fileid in second parent
p1, p2 = hex changeset ids for merge command
move = whether to move or copy the file to the destination
wctx, mctx = working and merge changecontexts
TODO:
if fw is copied in the working directory, we get confused
@ -34,8 +30,12 @@ def filemerge(repo, fw, fo, fd, my, other, p1, p2, move):
f.close()
return name
fcm = repo.filectx(fw, fileid=my)
fco = repo.filectx(fo, fileid=other)
fcm = wctx.filectx(fw)
fco = mctx.filectx(fo)
if not fco.cmp(fcm.data()): # files identical?
return 0
fca = fcm.ancestor(fco)
if not fca:
fca = repo.filectx(fw, fileid=-1)
@ -43,40 +43,38 @@ def filemerge(repo, fw, fo, fd, my, other, p1, p2, move):
b = temp("base", fca)
c = temp("other", fco)
repo.ui.note(_("resolving %s\n") % fw)
if fw != fo:
repo.ui.status(_("merging %s and %s\n") % (fw, fo))
else:
repo.ui.status(_("merging %s\n") % fw)
repo.ui.debug(_("my %s other %s ancestor %s\n") % (fcm, fco, fca))
cmd = (os.environ.get("HGMERGE") or repo.ui.config("ui", "merge")
or "hgmerge")
r = util.system('%s "%s" "%s" "%s"' % (cmd, a, b, c), cwd=repo.root,
environ={'HG_FILE': fw,
'HG_MY_NODE': p1,
'HG_OTHER_NODE': p2})
'HG_MY_NODE': str(wctx.parents()[0]),
'HG_OTHER_NODE': str(mctx)})
if r:
repo.ui.warn(_("merging %s failed!\n") % fw)
else:
if fd != fw:
repo.ui.debug(_("copying %s to %s\n") % (fw, fd))
repo.wwrite(fd, repo.wread(fw))
if move:
repo.ui.debug(_("removing %s\n") % fw)
os.unlink(a)
os.unlink(b)
os.unlink(c)
return r
def checkunknown(repo, m2, wctx):
def checkunknown(wctx, mctx):
"""
check for collisions between unknown files and files in m2
"""
man = mctx.manifest()
for f in wctx.unknown():
if f in m2:
if repo.file(f).cmp(m2[f], repo.wread(f)):
if f in man:
if mctx.filectx(f).cmp(wctx.filectx(f).data()):
raise util.Abort(_("'%s' already exists in the working"
" dir and differs from remote") % f)
def forgetremoved(m2, wctx):
def forgetremoved(wctx, mctx):
"""
Forget removed files
@ -88,9 +86,9 @@ def forgetremoved(m2, wctx):
"""
action = []
man = mctx.manifest()
for f in wctx.deleted() + wctx.removed():
if f not in m2:
if f not in man:
action.append((f, "f"))
return action
@ -174,11 +172,22 @@ def findcopies(repo, m1, m2, limit):
return copy
def manifestmerge(ui, m1, m2, ma, copy, overwrite, backwards, partial):
def manifestmerge(repo, p1, p2, pa, overwrite, partial):
"""
Merge manifest m1 with m2 using ancestor ma and generate merge action list
"""
repo.ui.note(_("resolving manifests\n"))
repo.ui.debug(_(" overwrite %s partial %s\n") % (overwrite, bool(partial)))
repo.ui.debug(_(" ancestor %s local %s remote %s\n") % (pa, p1, p2))
m1 = p1.manifest()
m2 = p2.manifest()
ma = pa.manifest()
backwards = (pa == p2)
action = []
copy = {}
def fmerge(f, f2=None, fa=None):
"""merge executable flags"""
if not f2:
@ -187,12 +196,13 @@ def manifestmerge(ui, m1, m2, ma, copy, overwrite, backwards, partial):
a, b, c = ma.execf(fa), m1.execf(f), m2.execf(f2)
return ((a^b) | (a^c)) ^ a
action = []
def act(msg, f, m, *args):
ui.debug(" %s: %s -> %s\n" % (f, msg, m))
def act(msg, m, f, *args):
repo.ui.debug(" %s: %s -> %s\n" % (f, msg, m))
action.append((f, m) + args)
if not (backwards or overwrite):
copy = findcopies(repo, m1, m2, pa.rev())
# Compare manifests
for f, n in m1.iteritems():
if partial and not partial(f):
@ -203,43 +213,42 @@ def manifestmerge(ui, m1, m2, ma, copy, overwrite, backwards, partial):
a = ma.get(f, nullid)
# are both different from the ancestor?
if not overwrite and n != a and m2[f] != a:
act("versions differ", f, "m", fmerge(f), n[:20], m2[f])
act("versions differ", "m", f, f, f, fmerge(f), False)
# are we clobbering?
# is remote's version newer?
# or are we going back in time and clean?
elif overwrite or m2[f] != a or (backwards and not n[20:]):
act("remote is newer", f, "g", m2.execf(f), m2[f])
act("remote is newer", "g", f, m2.execf(f))
# local is newer, not overwrite, check mode bits
elif fmerge(f) != m1.execf(f):
act("update permissions", f, "e", m2.execf(f))
act("update permissions", "e", f, m2.execf(f))
# contents same, check mode bits
elif m1.execf(f) != m2.execf(f):
if overwrite or fmerge(f) != m1.execf(f):
act("update permissions", f, "e", m2.execf(f))
act("update permissions", "e", f, m2.execf(f))
elif f in copy:
f2 = copy[f]
if f in ma: # case 3,20 A/B/A
act("remote moved",
f, "c", f2, f2, m1[f], m2[f2], fmerge(f, f2, f), True)
act("remote moved", "m", f, f2, f2, fmerge(f, f2, f), True)
else:
if f2 in m1: # case 2 A,B/B/B
act("local copied",
f, "c", f2, f, m1[f], m2[f2], fmerge(f, f2, f2), False)
act("local copied", "m",
f, f2, f, fmerge(f, f2, f2), False)
else: # case 4,21 A/B/B
act("local moved",
f, "c", f2, f, m1[f], m2[f2], fmerge(f, f2, f2), False)
act("local moved", "m",
f, f2, f, fmerge(f, f2, f2), False)
elif f in ma:
if n != ma[f] and not overwrite:
if ui.prompt(
if repo.ui.prompt(
(_(" local changed %s which remote deleted\n") % f) +
_("(k)eep or (d)elete?"), _("[kd]"), _("k")) == _("d"):
act("prompt delete", f, "r")
act("prompt delete", "r", f)
else:
act("other deleted", f, "r")
act("other deleted", "r", f)
else:
# file is created on branch or in working directory
if (overwrite and n[20:] != "u") or (backwards and not n[20:]):
act("remote deleted", f, "r")
act("remote deleted", "r", f)
for f, n in m2.iteritems():
if partial and not partial(f):
@ -251,22 +260,21 @@ def manifestmerge(ui, m1, m2, ma, copy, overwrite, backwards, partial):
if f2 not in m2: # already seen
continue
# rename case 1, A/A,B/A
act("remote copied",
f2, "c", f, f, m1[f2], m2[f], fmerge(f2, f, f2), False)
act("remote copied", "m", f2, f, f, fmerge(f2, f, f2), False)
elif f in ma:
if overwrite or backwards:
act("recreating", f, "g", m2.execf(f), n)
act("recreating", "g", f, m2.execf(f))
elif n != ma[f]:
if ui.prompt(
if repo.ui.prompt(
(_("remote changed %s which local deleted\n") % f) +
_("(k)eep or (d)elete?"), _("[kd]"), _("k")) == _("k"):
act("prompt recreating", f, "g", m2.execf(f), n)
act("prompt recreating", "g", f, m2.execf(f))
else:
act("remote created", f, "g", m2.execf(f), n)
act("remote created", "g", f, m2.execf(f))
return action
def applyupdates(repo, action, xp1, xp2):
def applyupdates(repo, action, wctx, mctx):
updated, merged, removed, unresolved = 0, 0, 0, 0
action.sort()
for a in action:
@ -283,34 +291,34 @@ def applyupdates(repo, action, xp1, xp2):
repo.ui.warn(_("update failed to remove %s: %s!\n") %
(f, inst.strerror))
removed +=1
elif m == "c": # copy
f2, fd, my, other, flag, move = a[2:]
repo.ui.status(_("merging %s and %s to %s\n") % (f, f2, fd))
if filemerge(repo, f, f2, fd, my, other, xp1, xp2, move):
elif m == "m": # merge
f2, fd, flag, move = a[2:]
if filemerge(repo, f, f2, wctx, mctx):
unresolved += 1
else:
if f != fd:
repo.ui.debug(_("copying %s to %s\n") % (f, fd))
repo.wwrite(fd, repo.wread(f))
if move:
repo.ui.debug(_("removing %s\n") % f)
os.unlink(repo.wjoin(f))
util.set_exec(repo.wjoin(fd), flag)
merged += 1
elif m == "m": # merge
flag, my, other = a[2:]
repo.ui.status(_("merging %s\n") % f)
if filemerge(repo, f, f, f, my, other, xp1, xp2, False):
unresolved += 1
util.set_exec(repo.wjoin(f), flag)
merged += 1
elif m == "g": # get
flag, node = a[2:]
flag = a[2]
repo.ui.note(_("getting %s\n") % f)
t = repo.file(f).read(node)
t = mctx.filectx(f).data()
repo.wwrite(f, t)
util.set_exec(repo.wjoin(f), flag)
updated += 1
elif m == "e": # exec
flag = a[2:]
flag = a[2]
util.set_exec(repo.wjoin(f), flag)
return updated, merged, removed, unresolved
def recordupdates(repo, action, branchmerge):
def recordupdates(repo, action, branchmerge, mctx):
for a in action:
f, m = a[:2]
if m == "r": # remove
@ -326,22 +334,7 @@ def recordupdates(repo, action, branchmerge):
else:
repo.dirstate.update([f], 'n')
elif m == "m": # merge
flag, my, other = a[2:]
if branchmerge:
# We've done a branch merge, mark this file as merged
# so that we properly record the merger later
repo.dirstate.update([f], 'm')
else:
# We've update-merged a locally modified file, so
# we set the dirstate to emulate a normal checkout
# of that file some time in the past. Thus our
# merge will appear as a normal local file
# modification.
fl = repo.file(f)
f_len = fl.size(fl.rev(other))
repo.dirstate.update([f], 'n', st_size=f_len, st_mtime=-1)
elif m == "c": # copy
f2, fd, my, other, flag, move = a[2:]
f2, fd, flag, move = a[2:]
if branchmerge:
# We've done a branch merge, mark this file as merged
# so that we properly record the merger later
@ -352,92 +345,59 @@ def recordupdates(repo, action, branchmerge):
# of that file some time in the past. Thus our
# merge will appear as a normal local file
# modification.
fl = repo.file(f)
f_len = fl.size(fl.rev(other))
f_len = mctx.filectx(f).size()
repo.dirstate.update([fd], 'n', st_size=f_len, st_mtime=-1)
if move:
repo.dirstate.update([f], 'r')
if f != fd:
repo.dirstate.copy(f, fd)
else:
repo.dirstate.copy(f2, fd)
if f != f2: # copy/rename
if move:
repo.dirstate.update([f], 'r')
if f != fd:
repo.dirstate.copy(f, fd)
else:
repo.dirstate.copy(f2, fd)
def update(repo, node, branchmerge=False, force=False, partial=None,
wlock=None, show_stats=True, remind=True):
overwrite = force and not branchmerge
forcemerge = force and branchmerge
if not wlock:
wlock = repo.wlock()
### check phase
overwrite = force and not branchmerge
forcemerge = force and branchmerge
wc = repo.workingctx()
pl = wc.parents()
if not overwrite and len(pl) > 1:
raise util.Abort(_("outstanding uncommitted merges"))
p1, p2 = pl[0], repo.changectx(node)
pa = p1.ancestor(p2)
fp1, fp2, xp1, xp2 = p1.node(), p2.node(), str(p1), str(p2)
# are we going backwards?
backwards = (pa == p2)
# is there a linear path from p1 to p2?
if pa == p1 or pa == p2:
### check phase
if not overwrite and len(pl) > 1:
raise util.Abort(_("outstanding uncommitted merges"))
if pa == p1 or pa == p2: # is there a linear path from p1 to p2?
if branchmerge:
raise util.Abort(_("there is nothing to merge, just use "
"'hg update' or look at 'hg heads'"))
elif not (overwrite or branchmerge):
raise util.Abort(_("update spans branches, use 'hg merge' "
"or 'hg update -C' to lose changes"))
if branchmerge and not forcemerge:
if wc.modified() or wc.added() or wc.removed():
raise util.Abort(_("outstanding uncommitted changes"))
m1 = wc.manifest()
m2 = p2.manifest()
ma = pa.manifest()
# resolve the manifest to determine which files
# we care about merging
repo.ui.note(_("resolving manifests\n"))
repo.ui.debug(_(" overwrite %s branchmerge %s partial %s\n") %
(overwrite, branchmerge, bool(partial)))
repo.ui.debug(_(" ancestor %s local %s remote %s\n") % (p1, p2, pa))
### calculate phase
action = []
copy = {}
if not force:
checkunknown(repo, m2, wc)
checkunknown(wc, p2)
if not branchmerge:
action += forgetremoved(m2, wc)
if not (backwards or overwrite):
copy = findcopies(repo, m1, m2, pa.rev())
action += manifestmerge(repo.ui, m1, m2, ma, copy,
overwrite, backwards, partial)
action += forgetremoved(wc, p2)
action += manifestmerge(repo, wc, p2, pa, overwrite, partial)
### apply phase
if not branchmerge:
# we don't need to do any magic, just jump to the new rev
p1, p2 = p2, repo.changectx(nullid)
xp1, xp2 = str(p1), str(p2)
if not p2: xp2 = ''
repo.hook('preupdate', throw=True, parent1=xp1, parent2=xp2)
updated, merged, removed, unresolved = applyupdates(repo, action, xp1, xp2)
# update dirstate
if not branchmerge: # just jump to the new rev
fp1, fp2, xp1, xp2 = fp2, nullid, xp2, ''
if not partial:
recordupdates(repo, action, branchmerge)
repo.dirstate.setparents(p1.node(), p2.node())
repo.hook('preupdate', throw=True, parent1=xp1, parent2=xp2)
updated, merged, removed, unresolved = applyupdates(repo, action, wc, p2)
if show_stats:
stats = ((updated, _("updated")),
@ -447,6 +407,10 @@ def update(repo, node, branchmerge=False, force=False, partial=None,
note = ", ".join([_("%d files %s") % s for s in stats])
repo.ui.status("%s\n" % note)
if not partial:
recordupdates(repo, action, branchmerge, p2)
repo.dirstate.setparents(fp1, fp2)
repo.hook('update', parent1=xp1, parent2=xp2, error=unresolved)
if branchmerge:
if unresolved:
repo.ui.status(_("There are unresolved merges,"
@ -460,6 +424,5 @@ def update(repo, node, branchmerge=False, force=False, partial=None,
repo.ui.status(_("There are unresolved merges with"
" locally modified files.\n"))
repo.hook('update', parent1=xp1, parent2=xp2, error=unresolved)
return unresolved

View File

@ -23,6 +23,7 @@ manifest |
<table cellspacing="0">
<tr class="light">
<td style="font-family:monospace">drwxr-xr-x</td>
<td style="font-family:monospace"></td>
<td><a href="{url}file/#node|short##up|urlescape#{getentries}">[up]</a></td>
<td class="link">&nbsp;</td>
</tr>

View File

@ -14,8 +14,8 @@ changelogentry = changelogentry.tmpl
searchentry = changelogentry.tmpl
changeset = changeset.tmpl
manifest = manifest.tmpl
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>'
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>'
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>'
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>'
filerevision = filerevision.tmpl
fileannotate = fileannotate.tmpl
filelog = filelog.tmpl

View File

@ -16,7 +16,9 @@
<table cellpadding="0" cellspacing="0">
<tr class="parity1">
<td><tt>drwxr-xr-x</tt>&nbsp;
<td>&nbsp;
<td><a href="#url#file/#node|short##up|urlescape#{getentries}">[up]</a>
</tr>
#dentries%manifestdirentry#
#fentries%manifestfileentry#
</table>

View File

@ -14,8 +14,8 @@ changelogentry = changelogentry.tmpl
searchentry = changelogentry.tmpl
changeset = changeset.tmpl
manifest = manifest.tmpl
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>'
manifestfileentry = '<tr class="parity#parity#"><td><tt>#permissions|permissions#</tt>&nbsp;<td><a href="#url#file/#node|short#/#file|urlescape#{getentries}">#basename|escape#</a>'
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>'
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>'
filerevision = filerevision.tmpl
fileannotate = fileannotate.tmpl
filediff = filediff.tmpl

View File

@ -32,6 +32,11 @@ parser.add_option("-s", "--cover_stdlib", action="store_true",
help="print a test coverage report inc. standard libraries")
parser.add_option("-C", "--annotate", action="store_true",
help="output files annotated with coverage")
parser.add_option("-r", "--retest", action="store_true",
help="retest failed tests")
parser.add_option("-f", "--first", action="store_true",
help="exit on the first test failure")
parser.set_defaults(timeout=180)
(options, args) = parser.parse_args()
verbose = options.verbose
@ -360,11 +365,16 @@ try:
if (test.startswith("test-") and '~' not in test and
('.' not in test or test.endswith('.py') or
test.endswith('.bat'))):
if options.retest and not os.path.exists(test + ".err"):
skipped += 1
continue
ret = run_one(test)
if ret is None:
skipped += 1
elif not ret:
failed += 1
if options.first:
break
tests += 1
print "\n# Ran %d tests, %d skipped, %d failed." % (tests, skipped,

View File

@ -13,4 +13,5 @@ rollback completed
abort: date exceeds 32 bits: 111111111111
transaction abort!
rollback completed
trouble committing bar!
abort: No such file or directory: .../test/bar

View File

@ -19,7 +19,6 @@ merging for foo
resolving manifests
getting bar
merging foo
resolving foo
1 files updated, 1 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
we shouldn't have anything but foo in merge state here

View File

@ -45,7 +45,6 @@ summary: added a b
resolving manifests
merging a
resolving a
0 files updated, 1 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
pulling from ../test2

View File

@ -11,7 +11,6 @@ eb43f19ff115
? file1.orig
016807e6fdaf tip
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
merging file1
0 files updated, 1 files merged, 0 files removed, 0 files unresolved
? file1.orig
016807e6fdaf tip

View File

@ -1,7 +1,5 @@
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
%% no merges expected
merging for b
merging b
0 files updated, 1 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
@ -19,8 +17,6 @@ This is file b1
%% merge fails
abort: outstanding uncommitted changes
%% merge expected!
merging for b
merging b
0 files updated, 1 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
1 files updated, 0 files merged, 0 files removed, 0 files unresolved

View File

@ -22,12 +22,11 @@ added 1 changesets with 1 changes to 1 files (+1 heads)
(run 'hg heads' to see heads, 'hg merge' to merge)
merge: warning: conflicts during merge
resolving manifests
overwrite None branchmerge True partial False
ancestor 451c744aabcc local a070d41e8360 remote faaea63e63a9
overwrite None partial False
ancestor faaea63e63a9 local 451c744aabcc+ remote a070d41e8360
test.txt: versions differ -> m
merging test.txt
resolving test.txt
my test.txt@451c744aabcc other test.txt@a070d41e8360 ancestor test.txt@faaea63e63a9
my test.txt@451c744aabcc+ other test.txt@a070d41e8360 ancestor test.txt@faaea63e63a9
merging test.txt failed!
0 files updated, 0 files merged, 0 files removed, 1 files unresolved
There are unresolved merges, you can redo the full merge using:

View File

@ -2,13 +2,12 @@ checkout
2 files updated, 0 files merged, 2 files removed, 0 files unresolved
merge
resolving manifests
overwrite None branchmerge True partial False
ancestor f26ec4fc3fa3 local 8e765a822af2 remote af1939970a1c
a: remote moved -> c
overwrite None partial False
ancestor af1939970a1c local f26ec4fc3fa3+ remote 8e765a822af2
a: remote moved -> m
b2: remote created -> g
merging a and b to b
resolving a
my a@f26ec4fc3fa3 other b@8e765a822af2 ancestor a@af1939970a1c
merging a and b
my a@f26ec4fc3fa3+ other b@8e765a822af2 ancestor a@af1939970a1c
copying a to b
removing a
getting b2

View File

@ -2,17 +2,15 @@
test L:up a R:nc a b W: - 1 get local a to b
--------------
resolving manifests
overwrite None branchmerge True partial False
ancestor e300d1c794ec local 735846fee2d7 remote 924404dff337
overwrite None partial False
ancestor 924404dff337 local e300d1c794ec+ remote 735846fee2d7
rev: versions differ -> m
a: remote copied -> c
merging a and b to b
resolving a
my a@e300d1c794ec other b@735846fee2d7 ancestor a@924404dff337
a: remote copied -> m
merging a and b
my a@e300d1c794ec+ other b@735846fee2d7 ancestor a@924404dff337
copying a to b
merging rev
resolving rev
my rev@e300d1c794ec other rev@735846fee2d7 ancestor rev@924404dff337
my rev@e300d1c794ec+ other rev@735846fee2d7 ancestor rev@924404dff337
0 files updated, 2 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
--------------
@ -25,18 +23,16 @@ M b
test L:nc a b R:up a W: - 2 get rem change to a and b
--------------
resolving manifests
overwrite None branchmerge True partial False
ancestor ac809aeed39a local f4db7e329e71 remote 924404dff337
overwrite None partial False
ancestor 924404dff337 local ac809aeed39a+ remote f4db7e329e71
a: remote is newer -> g
b: local copied -> c
b: local copied -> m
rev: versions differ -> m
getting a
merging b and a to b
resolving b
my b@ac809aeed39a other a@f4db7e329e71 ancestor a@924404dff337
merging b and a
my b@ac809aeed39a+ other a@f4db7e329e71 ancestor a@924404dff337
merging rev
resolving rev
my rev@ac809aeed39a other rev@f4db7e329e71 ancestor rev@924404dff337
my rev@ac809aeed39a+ other rev@f4db7e329e71 ancestor rev@924404dff337
1 files updated, 2 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
--------------
@ -49,18 +45,16 @@ M b
test L:up a R:nm a b W: - 3 get local a change to b, remove a
--------------
resolving manifests
overwrite None branchmerge True partial False
ancestor e300d1c794ec local e03727d2d66b remote 924404dff337
a: remote moved -> c
overwrite None partial False
ancestor 924404dff337 local e300d1c794ec+ remote e03727d2d66b
a: remote moved -> m
rev: versions differ -> m
merging a and b to b
resolving a
my a@e300d1c794ec other b@e03727d2d66b ancestor a@924404dff337
merging a and b
my a@e300d1c794ec+ other b@e03727d2d66b ancestor a@924404dff337
copying a to b
removing a
merging rev
resolving rev
my rev@e300d1c794ec other rev@e03727d2d66b ancestor rev@924404dff337
my rev@e300d1c794ec+ other rev@e03727d2d66b ancestor rev@924404dff337
0 files updated, 2 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
--------------
@ -72,16 +66,14 @@ M b
test L:nm a b R:up a W: - 4 get remote change to b
--------------
resolving manifests
overwrite None branchmerge True partial False
ancestor ecf3cb2a4219 local f4db7e329e71 remote 924404dff337
b: local moved -> c
overwrite None partial False
ancestor 924404dff337 local ecf3cb2a4219+ remote f4db7e329e71
b: local moved -> m
rev: versions differ -> m
merging b and a to b
resolving b
my b@ecf3cb2a4219 other a@f4db7e329e71 ancestor a@924404dff337
merging b and a
my b@ecf3cb2a4219+ other a@f4db7e329e71 ancestor a@924404dff337
merging rev
resolving rev
my rev@ecf3cb2a4219 other rev@f4db7e329e71 ancestor rev@924404dff337
my rev@ecf3cb2a4219+ other rev@f4db7e329e71 ancestor rev@924404dff337
0 files updated, 2 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
--------------
@ -93,39 +85,31 @@ M b
test L: R:nc a b W: - 5 get b
--------------
resolving manifests
overwrite None branchmerge True partial False
ancestor 94b33a1b7f2d local 735846fee2d7 remote 924404dff337
overwrite None partial False
ancestor 924404dff337 local 94b33a1b7f2d+ remote 735846fee2d7
rev: versions differ -> m
a: remote copied -> c
merging a and b to b
resolving a
my a@924404dff337 other b@735846fee2d7 ancestor a@924404dff337
a: remote copied -> m
copying a to b
merging rev
resolving rev
my rev@94b33a1b7f2d other rev@735846fee2d7 ancestor rev@924404dff337
my rev@94b33a1b7f2d+ other rev@735846fee2d7 ancestor rev@924404dff337
0 files updated, 2 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
--------------
M a
M b
a
C a
--------------
--------------
test L:nc a b R: W: - 6 nothing
--------------
resolving manifests
overwrite None branchmerge True partial False
ancestor ac809aeed39a local 97c705ade336 remote 924404dff337
b: local copied -> c
overwrite None partial False
ancestor 924404dff337 local ac809aeed39a+ remote 97c705ade336
b: local copied -> m
rev: versions differ -> m
merging b and a to b
resolving b
my b@ac809aeed39a other a@924404dff337 ancestor a@924404dff337
merging rev
resolving rev
my rev@ac809aeed39a other rev@97c705ade336 ancestor rev@924404dff337
my rev@ac809aeed39a+ other rev@97c705ade336 ancestor rev@924404dff337
0 files updated, 2 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
--------------
@ -138,18 +122,14 @@ C a
test L: R:nm a b W: - 7 get b
--------------
resolving manifests
overwrite None branchmerge True partial False
ancestor 94b33a1b7f2d local e03727d2d66b remote 924404dff337
a: remote moved -> c
overwrite None partial False
ancestor 924404dff337 local 94b33a1b7f2d+ remote e03727d2d66b
a: remote moved -> m
rev: versions differ -> m
merging a and b to b
resolving a
my a@924404dff337 other b@e03727d2d66b ancestor a@924404dff337
copying a to b
removing a
merging rev
resolving rev
my rev@94b33a1b7f2d other rev@e03727d2d66b ancestor rev@924404dff337
my rev@94b33a1b7f2d+ other rev@e03727d2d66b ancestor rev@924404dff337
0 files updated, 2 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
--------------
@ -161,16 +141,12 @@ M b
test L:nm a b R: W: - 8 nothing
--------------
resolving manifests
overwrite None branchmerge True partial False
ancestor ecf3cb2a4219 local 97c705ade336 remote 924404dff337
b: local moved -> c
overwrite None partial False
ancestor 924404dff337 local ecf3cb2a4219+ remote 97c705ade336
b: local moved -> m
rev: versions differ -> m
merging b and a to b
resolving b
my b@ecf3cb2a4219 other a@924404dff337 ancestor a@924404dff337
merging rev
resolving rev
my rev@ecf3cb2a4219 other rev@97c705ade336 ancestor rev@924404dff337
my rev@ecf3cb2a4219+ other rev@97c705ade336 ancestor rev@924404dff337
0 files updated, 2 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
--------------
@ -182,16 +158,14 @@ M b
test L:um a b R:um a b W: - 9 do merge with ancestor in a
--------------
resolving manifests
overwrite None branchmerge True partial False
ancestor ec03c2ca8642 local 79cc6877a3b7 remote 924404dff337
overwrite None partial False
ancestor 924404dff337 local ec03c2ca8642+ remote 79cc6877a3b7
b: versions differ -> m
rev: versions differ -> m
merging b
resolving b
my b@ec03c2ca8642 other b@79cc6877a3b7 ancestor a@924404dff337
my b@ec03c2ca8642+ other b@79cc6877a3b7 ancestor a@924404dff337
merging rev
resolving rev
my rev@ec03c2ca8642 other rev@79cc6877a3b7 ancestor rev@924404dff337
my rev@ec03c2ca8642+ other rev@79cc6877a3b7 ancestor rev@924404dff337
0 files updated, 2 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
--------------
@ -202,14 +176,13 @@ M b
test L:nm a b R:nm a c W: - 11 get c, keep b
--------------
resolving manifests
overwrite None branchmerge True partial False
ancestor ecf3cb2a4219 local e6abcc1a30c2 remote 924404dff337
overwrite None partial False
ancestor 924404dff337 local ecf3cb2a4219+ remote e6abcc1a30c2
rev: versions differ -> m
c: remote created -> g
getting c
merging rev
resolving rev
my rev@ecf3cb2a4219 other rev@e6abcc1a30c2 ancestor rev@924404dff337
my rev@ecf3cb2a4219+ other rev@e6abcc1a30c2 ancestor rev@924404dff337
1 files updated, 1 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
--------------
@ -221,16 +194,14 @@ C b
test L:nc a b R:up b W: - 12 merge b no ancestor
--------------
resolving manifests
overwrite None branchmerge True partial False
ancestor ac809aeed39a local af30c7647fc7 remote 924404dff337
overwrite None partial False
ancestor 924404dff337 local ac809aeed39a+ remote af30c7647fc7
b: versions differ -> m
rev: versions differ -> m
merging b
resolving b
my b@ac809aeed39a other b@af30c7647fc7 ancestor b@000000000000
my b@ac809aeed39a+ other b@af30c7647fc7 ancestor b@000000000000
merging rev
resolving rev
my rev@ac809aeed39a other rev@af30c7647fc7 ancestor rev@924404dff337
my rev@ac809aeed39a+ other rev@af30c7647fc7 ancestor rev@924404dff337
0 files updated, 2 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
--------------
@ -242,18 +213,16 @@ C a
test L:up b R:nm a b W: - 13 merge b no ancestor
--------------
resolving manifests
overwrite None branchmerge True partial False
ancestor 59318016310c local e03727d2d66b remote 924404dff337
overwrite None partial False
ancestor 924404dff337 local 59318016310c+ remote e03727d2d66b
a: other deleted -> r
b: versions differ -> m
rev: versions differ -> m
removing a
merging b
resolving b
my b@59318016310c other b@e03727d2d66b ancestor b@000000000000
my b@59318016310c+ other b@e03727d2d66b ancestor b@000000000000
merging rev
resolving rev
my rev@59318016310c other rev@e03727d2d66b ancestor rev@924404dff337
my rev@59318016310c+ other rev@e03727d2d66b ancestor rev@924404dff337
0 files updated, 2 files merged, 1 files removed, 0 files unresolved
(branch merge, don't forget to commit)
--------------
@ -264,18 +233,16 @@ M b
test L:nc a b R:up a b W: - 14 merge b no ancestor
--------------
resolving manifests
overwrite None branchmerge True partial False
ancestor ac809aeed39a local 8dbce441892a remote 924404dff337
overwrite None partial False
ancestor 924404dff337 local ac809aeed39a+ remote 8dbce441892a
a: remote is newer -> g
b: versions differ -> m
rev: versions differ -> m
getting a
merging b
resolving b
my b@ac809aeed39a other b@8dbce441892a ancestor b@000000000000
my b@ac809aeed39a+ other b@8dbce441892a ancestor b@000000000000
merging rev
resolving rev
my rev@ac809aeed39a other rev@8dbce441892a ancestor rev@924404dff337
my rev@ac809aeed39a+ other rev@8dbce441892a ancestor rev@924404dff337
1 files updated, 2 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
--------------
@ -287,18 +254,16 @@ M b
test L:up b R:nm a b W: - 15 merge b no ancestor, remove a
--------------
resolving manifests
overwrite None branchmerge True partial False
ancestor 59318016310c local e03727d2d66b remote 924404dff337
overwrite None partial False
ancestor 924404dff337 local 59318016310c+ remote e03727d2d66b
a: other deleted -> r
b: versions differ -> m
rev: versions differ -> m
removing a
merging b
resolving b
my b@59318016310c other b@e03727d2d66b ancestor b@000000000000
my b@59318016310c+ other b@e03727d2d66b ancestor b@000000000000
merging rev
resolving rev
my rev@59318016310c other rev@e03727d2d66b ancestor rev@924404dff337
my rev@59318016310c+ other rev@e03727d2d66b ancestor rev@924404dff337
0 files updated, 2 files merged, 1 files removed, 0 files unresolved
(branch merge, don't forget to commit)
--------------
@ -309,18 +274,16 @@ M b
test L:nc a b R:up a b W: - 16 get a, merge b no ancestor
--------------
resolving manifests
overwrite None branchmerge True partial False
ancestor ac809aeed39a local 8dbce441892a remote 924404dff337
overwrite None partial False
ancestor 924404dff337 local ac809aeed39a+ remote 8dbce441892a
a: remote is newer -> g
b: versions differ -> m
rev: versions differ -> m
getting a
merging b
resolving b
my b@ac809aeed39a other b@8dbce441892a ancestor b@000000000000
my b@ac809aeed39a+ other b@8dbce441892a ancestor b@000000000000
merging rev
resolving rev
my rev@ac809aeed39a other rev@8dbce441892a ancestor rev@924404dff337
my rev@ac809aeed39a+ other rev@8dbce441892a ancestor rev@924404dff337
1 files updated, 2 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
--------------
@ -332,16 +295,14 @@ M b
test L:up a b R:nc a b W: - 17 keep a, merge b no ancestor
--------------
resolving manifests
overwrite None branchmerge True partial False
ancestor 0b76e65c8289 local 735846fee2d7 remote 924404dff337
overwrite None partial False
ancestor 924404dff337 local 0b76e65c8289+ remote 735846fee2d7
b: versions differ -> m
rev: versions differ -> m
merging b
resolving b
my b@0b76e65c8289 other b@735846fee2d7 ancestor b@000000000000
my b@0b76e65c8289+ other b@735846fee2d7 ancestor b@000000000000
merging rev
resolving rev
my rev@0b76e65c8289 other rev@735846fee2d7 ancestor rev@924404dff337
my rev@0b76e65c8289+ other rev@735846fee2d7 ancestor rev@924404dff337
0 files updated, 2 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
--------------
@ -353,18 +314,16 @@ C a
test L:nm a b R:up a b W: - 18 merge b no ancestor
--------------
resolving manifests
overwrite None branchmerge True partial False
ancestor ecf3cb2a4219 local 8dbce441892a remote 924404dff337
overwrite None partial False
ancestor 924404dff337 local ecf3cb2a4219+ remote 8dbce441892a
b: versions differ -> m
rev: versions differ -> m
a: prompt recreating -> g
getting a
merging b
resolving b
my b@ecf3cb2a4219 other b@8dbce441892a ancestor b@000000000000
my b@ecf3cb2a4219+ other b@8dbce441892a ancestor b@000000000000
merging rev
resolving rev
my rev@ecf3cb2a4219 other rev@8dbce441892a ancestor rev@924404dff337
my rev@ecf3cb2a4219+ other rev@8dbce441892a ancestor rev@924404dff337
1 files updated, 2 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
--------------
@ -376,16 +335,14 @@ M b
test L:up a b R:nm a b W: - 19 merge b no ancestor, prompt remove a
--------------
resolving manifests
overwrite None branchmerge True partial False
ancestor 0b76e65c8289 local e03727d2d66b remote 924404dff337
overwrite None partial False
ancestor 924404dff337 local 0b76e65c8289+ remote e03727d2d66b
b: versions differ -> m
rev: versions differ -> m
merging b
resolving b
my b@0b76e65c8289 other b@e03727d2d66b ancestor b@000000000000
my b@0b76e65c8289+ other b@e03727d2d66b ancestor b@000000000000
merging rev
resolving rev
my rev@0b76e65c8289 other rev@e03727d2d66b ancestor rev@924404dff337
my rev@0b76e65c8289+ other rev@e03727d2d66b ancestor rev@924404dff337
0 files updated, 2 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
--------------
@ -397,18 +354,16 @@ C a
test L:up a R:um a b W: - 20 merge a and b to b, remove a
--------------
resolving manifests
overwrite None branchmerge True partial False
ancestor e300d1c794ec local 79cc6877a3b7 remote 924404dff337
a: remote moved -> c
overwrite None partial False
ancestor 924404dff337 local e300d1c794ec+ remote 79cc6877a3b7
a: remote moved -> m
rev: versions differ -> m
merging a and b to b
resolving a
my a@e300d1c794ec other b@79cc6877a3b7 ancestor a@924404dff337
merging a and b
my a@e300d1c794ec+ other b@79cc6877a3b7 ancestor a@924404dff337
copying a to b
removing a
merging rev
resolving rev
my rev@e300d1c794ec other rev@79cc6877a3b7 ancestor rev@924404dff337
my rev@e300d1c794ec+ other rev@79cc6877a3b7 ancestor rev@924404dff337
0 files updated, 2 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
--------------
@ -420,16 +375,14 @@ M b
test L:um a b R:up a W: - 21 merge a and b to b
--------------
resolving manifests
overwrite None branchmerge True partial False
ancestor ec03c2ca8642 local f4db7e329e71 remote 924404dff337
b: local moved -> c
overwrite None partial False
ancestor 924404dff337 local ec03c2ca8642+ remote f4db7e329e71
b: local moved -> m
rev: versions differ -> m
merging b and a to b
resolving b
my b@ec03c2ca8642 other a@f4db7e329e71 ancestor a@924404dff337
merging b and a
my b@ec03c2ca8642+ other a@f4db7e329e71 ancestor a@924404dff337
merging rev
resolving rev
my rev@ec03c2ca8642 other rev@f4db7e329e71 ancestor rev@924404dff337
my rev@ec03c2ca8642+ other rev@f4db7e329e71 ancestor rev@924404dff337
0 files updated, 2 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
--------------
@ -441,18 +394,16 @@ M b
test L:nm a b R:up a c W: - 23 get c, keep b
--------------
resolving manifests
overwrite None branchmerge True partial False
ancestor ecf3cb2a4219 local 2b958612230f remote 924404dff337
b: local moved -> c
overwrite None partial False
ancestor 924404dff337 local ecf3cb2a4219+ remote 2b958612230f
b: local moved -> m
rev: versions differ -> m
c: remote created -> g
merging b and a to b
resolving b
my b@ecf3cb2a4219 other a@2b958612230f ancestor a@924404dff337
merging b and a
my b@ecf3cb2a4219+ other a@2b958612230f ancestor a@924404dff337
getting c
merging rev
resolving rev
my rev@ecf3cb2a4219 other rev@2b958612230f ancestor rev@924404dff337
my rev@ecf3cb2a4219+ other rev@2b958612230f ancestor rev@924404dff337
1 files updated, 2 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
--------------

View File

@ -15,13 +15,12 @@ date: Mon Jan 12 13:46:40 1970 +0000
summary: 1
resolving manifests
overwrite False branchmerge False partial False
ancestor 33aaa84a386b local 802f095af299 remote 33aaa84a386b
overwrite False partial False
ancestor 33aaa84a386b local 33aaa84a386b+ remote 802f095af299
a: versions differ -> m
b: remote created -> g
merging a
resolving a
my a@33aaa84a386b other a@802f095af299 ancestor a@33aaa84a386b
my a@33aaa84a386b+ other a@802f095af299 ancestor a@33aaa84a386b
getting b
1 files updated, 1 files merged, 0 files removed, 0 files unresolved
changeset: 1:802f095af299
@ -31,8 +30,8 @@ date: Mon Jan 12 13:46:40 1970 +0000
summary: 2
resolving manifests
overwrite False branchmerge False partial False
ancestor 802f095af299 local 33aaa84a386b remote 33aaa84a386b
overwrite False partial False
ancestor 33aaa84a386b local 802f095af299+ remote 33aaa84a386b
b: remote deleted -> r
removing b
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
@ -49,13 +48,12 @@ date: Mon Jan 12 13:46:40 1970 +0000
summary: 1
resolving manifests
overwrite False branchmerge False partial False
ancestor 33aaa84a386b local 802f095af299 remote 33aaa84a386b
overwrite False partial False
ancestor 33aaa84a386b local 33aaa84a386b+ remote 802f095af299
a: versions differ -> m
b: remote created -> g
merging a
resolving a
my a@33aaa84a386b other a@802f095af299 ancestor a@33aaa84a386b
my a@33aaa84a386b+ other a@802f095af299 ancestor a@33aaa84a386b
getting b
1 files updated, 1 files merged, 0 files removed, 0 files unresolved
changeset: 1:802f095af299
@ -100,16 +98,14 @@ failed
abort: outstanding uncommitted changes
failed
resolving manifests
overwrite False branchmerge True partial False
ancestor 802f095af299 local 030602aee63d remote 33aaa84a386b
overwrite False partial False
ancestor 33aaa84a386b local 802f095af299+ remote 030602aee63d
a: versions differ -> m
b: versions differ -> m
merging a
resolving a
my a@802f095af299 other a@030602aee63d ancestor a@33aaa84a386b
my a@802f095af299+ other a@030602aee63d ancestor a@33aaa84a386b
merging b
resolving b
my b@802f095af299 other b@030602aee63d ancestor b@000000000000
my b@802f095af299+ other b@030602aee63d ancestor b@000000000000
0 files updated, 2 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
changeset: 1:802f095af299
@ -137,5 +133,4 @@ adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files
merging a
0 files updated, 1 files merged, 0 files removed, 0 files unresolved

View File

@ -40,8 +40,8 @@ a
side1
side2
resolving manifests
overwrite True branchmerge False partial False
ancestor ded32b0db104 local 221226fb2bd8 remote 537353581d3d
overwrite True partial False
ancestor 537353581d3d local ded32b0db104+ remote 221226fb2bd8
side2: remote deleted -> r
side1: remote deleted -> r
main: remote created -> g