mercurial/merge.py
branchstable
changeset 23971 6becb9dbca25
parent 23879 b88278a308c6
child 24471 1ff35d76421c
--- 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