changeset 11470:34e33d50c26b stable

subrepo: correctly handle update -C with modified subrepos (issue2022) (based on a patch by Saint Germain)
author Matt Mackall <mpm@selenic.com>
date Wed, 30 Jun 2010 23:56:35 -0500
parents c37f35d7f2f5
children 44b4873ea59b
files mercurial/merge.py mercurial/subrepo.py tests/test-subrepo tests/test-subrepo.out
diffstat 4 files changed, 23 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/merge.py	Wed Jun 30 18:15:23 2010 -0500
+++ b/mercurial/merge.py	Wed Jun 30 23:56:35 2010 -0500
@@ -167,7 +167,7 @@
     m1, m2, ma = p1.manifest(), p2.manifest(), pa.manifest()
     copied = set(copy.values())
 
-    if not overwrite and '.hgsubstate' in m1:
+    if '.hgsubstate' in m1:
         # check whether sub state is modified
         for s in p1.substate:
             if p1.sub(s).dirty():
--- a/mercurial/subrepo.py	Wed Jun 30 18:15:23 2010 -0500
+++ b/mercurial/subrepo.py	Wed Jun 30 23:56:35 2010 -0500
@@ -67,11 +67,13 @@
         repo.ui.debug("  subrepo %s: %s %s\n" % (s, msg, r))
 
     for s, l in s1.items():
+        a = sa.get(s, nullstate)
         ld = l # local state with possible dirty flag for compares
-        if wctx != actx and wctx.sub(s).dirty():
+        if wctx.sub(s).dirty():
             ld = (l[0], l[1] + "+")
+        if wctx == actx: # overwrite
+            a = ld
 
-        a = sa.get(s, nullstate)
         if s in s2:
             r = s2[s]
             if ld == r or r == a: # no change or local is newer
--- a/tests/test-subrepo	Wed Jun 30 18:15:23 2010 -0500
+++ b/tests/test-subrepo	Wed Jun 30 23:56:35 2010 -0500
@@ -19,6 +19,13 @@
 hg sum
 hg ci -m1
 
+# issue 2022 - update -C
+
+echo b > s/a
+hg sum
+hg co -C 1
+hg sum
+
 echo % add sub sub
 echo ss = ss > s/.hgsub
 hg init s/ss
--- a/tests/test-subrepo.out	Wed Jun 30 18:15:23 2010 -0500
+++ b/tests/test-subrepo.out	Wed Jun 30 23:56:35 2010 -0500
@@ -8,6 +8,17 @@
 commit: 1 added, 1 subrepos
 update: (current)
 committing subrepository s
+parent: 1:7cf8cfea66e4 tip
+ 1
+branch: default
+commit: 1 subrepos
+update: (current)
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+parent: 1:7cf8cfea66e4 tip
+ 1
+branch: default
+commit: (clean)
+update: (current)
 % add sub sub
 parent: 1:7cf8cfea66e4 tip
  1