changeset 101:21dbec91e775

fix strip - seems good enougth now
author Alain Leufroy <alain.leufroy@logilab.fr>
date Wed, 28 Sep 2011 22:04:52 +0200
parents 7d0617e584ff
children 5111329280f1
files hgext/states.py tests/test-state-strip.t
diffstat 2 files changed, 16 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/hgext/states.py	Wed Sep 28 12:35:55 2011 +0200
+++ b/hgext/states.py	Wed Sep 28 22:04:52 2011 +0200
@@ -1055,9 +1055,16 @@
                 statesheads.setdefault(state, set([])).add(nd)
 
         for state, heads in repo._statesheads.iteritems():
-            if state.trackheads:
-                heads = set(heads) - tostrip | statesheads.get(state, set([]))
-                repo._statesheads[state] = list(heads)
+            if not state.trackheads:
+                continue
+            heads = set(heads) - tostrip | statesheads.get(state, set([]))
+            # reduce heads (make them really heads)
+            revs = set(map(cl.rev, heads))
+            minrev = min(revs)
+            for rev in cl.ancestors(*revs):
+                if rev >= minrev:
+                    revs.discard(rev)
+            repo._statesheads[state] = map(cl.node, revs)
         _writestateshead(repo)
 
         return ostrip(ui, repo, node, backup)
--- a/tests/test-state-strip.t	Wed Sep 28 12:35:55 2011 +0200
+++ b/tests/test-state-strip.t	Wed Sep 28 22:04:52 2011 +0200
@@ -15,7 +15,7 @@
   >    hg add "$1"
   >    hg ci -m "$1"
   > }
-  $ alias hglog='hg glog --template "{rev} {state} {node}\n"'
+  $ alias hglog='hg glog --template "{desc} {state} {node}\n"'
 
   $ hg init alpha
   $ cd alpha
@@ -276,13 +276,13 @@
   
   $ hg strip -n 1
   $ hglog
-  @  3 draft 036d507f2b771a3b7cc88580c93d5037bf4bf1bf
+  @  6 draft 036d507f2b771a3b7cc88580c93d5037bf4bf1bf
   |
-  o  2 ready 0fc8455e844047eab375a1f51816f697551e34cf
+  o  4 ready 0fc8455e844047eab375a1f51816f697551e34cf
   |
-  o  1 ready a00ba83de58390cbbdae1fc580df0bb0db2e8e88
+  o  2 ready a00ba83de58390cbbdae1fc580df0bb0db2e8e88
   |
   o  0 published 06254b90631198c9b9e426be9886af92fedc9a2d
   
-  $ hg log --template '{rev} {state} {node}\n' -r 'readyheads()'
-  2 ready 0fc8455e844047eab375a1f51816f697551e34cf
+  $ hg log --template '{desc} {state} {node}\n' -r 'readyheads()'
+  4 ready 0fc8455e844047eab375a1f51816f697551e34cf