--- a/contrib/mergetools.hgrc Wed Feb 13 19:34:28 2008 -0200
+++ b/contrib/mergetools.hgrc Thu Feb 14 00:13:20 2008 +0100
@@ -28,6 +28,7 @@
xxdiff.priority=-8
diffmerge.args=--nosplash --merge --title1=base --title2=local --title3=other $base $local $other
+diffmerge.checkchanged=True
diffmerge.gui=True
p4merge.args=$base $local $other $output
--- a/doc/hgrc.5.txt Wed Feb 13 19:34:28 2008 -0200
+++ b/doc/hgrc.5.txt Thu Feb 14 00:13:20 2008 +0100
@@ -289,6 +289,10 @@
Check whether there are conflicts even though the tool reported
success.
Default: False
+ checkchanged;;
+ Check whether outputs were written even though the tool reported
+ success.
+ Default: False
fixeol;;
Attempt to fix up EOL changes caused by the merge tool.
Default: False
--- a/hgext/convert/cvs.py Wed Feb 13 19:34:28 2008 -0200
+++ b/hgext/convert/cvs.py Thu Feb 14 00:13:20 2008 +0100
@@ -71,7 +71,7 @@
elif l.startswith("Ancestor branch"):
ancestor = l[17:-1]
# figure out the parent later
- self.parent[id] = None
+ self.parent[id] = self.lastbranch[ancestor]
elif l.startswith("Author"):
author = self.recode(l[8:-1])
elif l.startswith("Tag:") or l.startswith("Tags:"):
@@ -101,13 +101,14 @@
p = []
if branch == "HEAD":
branch = ""
- if branch and p[0] == None:
+ if branch:
latest = None
# the last changeset that contains a base
# file is our parent
for r in oldrevs:
- latest = max(filerevids[r], latest)
- p = [latest]
+ latest = max(filerevids.get(r, None), latest)
+ if latest:
+ p = [latest]
# add current commit to set
c = commit(author=author, date=date, parents=p,
--- a/mercurial/filemerge.py Wed Feb 13 19:34:28 2008 -0200
+++ b/mercurial/filemerge.py Thu Feb 14 00:13:20 2008 +0100
@@ -7,7 +7,7 @@
from node import *
from i18n import _
-import util, os, tempfile, context, simplemerge, re
+import util, os, tempfile, context, simplemerge, re, filecmp
def _toolstr(ui, tool, part, default=""):
return ui.config("merge-tools", tool + "." + part, default)
@@ -60,10 +60,14 @@
t = k.split('.')[0]
if t not in tools:
tools[t] = int(_toolstr(ui, t, "priority", "0"))
+ names = tools.keys()
tools = [(-p,t) for t,p in tools.items()]
tools.sort()
- if ui.config("ui", "merge"):
- tools.insert(0, (None, ui.config("ui", "merge"))) # highest priority
+ uimerge = ui.config("ui", "merge")
+ if uimerge:
+ if uimerge not in names:
+ return (uimerge, uimerge)
+ tools.insert(0, (None, uimerge)) # highest priority
tools.append((None, "hgmerge")) # the old default, if found
for p,t in tools:
toolpath = _findtool(ui, t)
@@ -193,6 +197,13 @@
if re.match("^(<<<<<<< .*|=======|>>>>>>> .*)$", fcm.data()):
r = 1
+ if not r and _toolbool(ui, tool, "checkchanged"):
+ if filecmp.cmp(repo.wjoin(fd), back):
+ if ui.prompt(_(" output file %s appears unchanged\n"
+ "was merge successful (yn)?") % fd,
+ _("[yn]"), _("n")) != _("y"):
+ r = 1
+
if _toolbool(ui, tool, "fixeol"):
_matcheol(repo.wjoin(fd), back)
--- a/mercurial/util.py Wed Feb 13 19:34:28 2008 -0200
+++ b/mercurial/util.py Thu Feb 14 00:13:20 2008 +0100
@@ -459,6 +459,8 @@
return
try:
pat = '(?:%s)' % '|'.join([regex(k, p, tail) for (k, p) in pats])
+ if len(pat) > 20000:
+ raise OverflowError()
return re.compile(pat).match
except OverflowError:
# We're using a Python with a tiny regex engine and we