--- a/mercurial/merge.py Tue Jan 27 12:33:56 2015 +0000
+++ b/mercurial/merge.py Fri Jan 30 04:59:05 2015 +0900
@@ -741,7 +741,15 @@
numupdates = sum(len(l) for m, l in actions.items() if m != 'k')
+ def dirtysubstate():
+ # mark '.hgsubstate' as possibly dirty forcibly, because
+ # modified '.hgsubstate' is misunderstood as clean,
+ # when both st_size/st_mtime of '.hgsubstate' aren't changed,
+ # even if "submerge" fails and '.hgsubstate' is inconsistent
+ repo.dirstate.normallookup('.hgsubstate')
+
if [a for a in actions['r'] if a[0] == '.hgsubstate']:
+ dirtysubstate()
subrepo.submerge(repo, wctx, mctx, wctx, overwrite)
# remove in parallel (must come first)
@@ -760,6 +768,7 @@
updated = len(actions['g'])
if [a for a in actions['g'] if a[0] == '.hgsubstate']:
+ dirtysubstate()
subrepo.submerge(repo, wctx, mctx, wctx, overwrite)
# forget (manifest only, just log it) (must come first)
@@ -785,6 +794,7 @@
z += 1
progress(_updating, z, item=f, total=numupdates, unit=_files)
if f == '.hgsubstate': # subrepo states need updating
+ dirtysubstate()
subrepo.submerge(repo, wctx, mctx, wctx.ancestor(mctx),
overwrite)
continue