changeset 137:bbc653876876

fix evolve test
author Pierre-Yves David <pierre-yves.david@logilab.fr>
date Fri, 17 Feb 2012 19:01:25 +0100
parents 915728be8afd
children 605ed785268a
files hgext/evolve.py tests/test-evolution.t tests/test-evolve.t
diffstat 2 files changed, 74 insertions(+), 35 deletions(-) [+]
line wrap: on
line diff
--- a/hgext/evolve.py
+++ b/hgext/evolve.py
@@ -156,20 +156,34 @@
 cmdtable = {}
 command = cmdutil.command(cmdtable)
 
-@command('^evolve',
+@command('^stabilize',
     [],
     '')
-def evolve(ui, repo):
+def stabilize(ui, repo):
     """suggest the next evolution step"""
     obsolete = extensions.find('obsolete')
-    next = min(obsolete.unstables(repo))
+    unstable = repo.revs('unstable()')
+    if not unstable:
+        ui.write_err(_('no unstable changeset\n'))
+        return 1
+    next = unstable[0]
     obs = repo[next].parents()[0]
     if not obs.obsolete():
         obs = next.parents()[1]
     assert obs.obsolete()
     newer = obsolete.newerversion(repo, obs.node())
-    target = newer[-1]
-    repo.ui.status('hg relocate --rev %s %s\n' % (repo[next], repo[target]))
+    if len(newer) > 1:
+        ui.write_err(_("conflict rewriting. can't choose destination\n"))
+        return 2
+    targets = newer[0]
+    if not targets:
+        ui.write_err(_("does not handle kill parent yet\n"))
+        return 2
+    if len(targets) > 1:
+        ui.write_err(_("does not handle splitted parent yet\n"))
+        return 2
+    target = targets[0]
+    repo.ui.status('hg rebase -Dr %s -d %s\n' % (repo[next], repo[target]))
 
 shorttemplate = '[{rev}] {desc|firstline}\n'
 
@@ -355,15 +369,25 @@
         lock.release()
 
 def commitwrapper(orig, ui, repo, *arg, **kwargs):
-    obsoleted = kwargs.get('obsolete', [])
-    if obsoleted:
-        obsoleted = repo.set('%lr', obsoleted)
-    result = orig(ui, repo, *arg, **kwargs)
-    if not result: # commit successed
-        new = repo['-1']
-        for old in obsoleted:
-            repo.addobsolete(new.node(), old.node())
-    return result
+    lock = repo.lock()
+    try:
+        obsoleted = kwargs.get('obsolete', [])
+        if obsoleted:
+            obsoleted = repo.set('%lr', obsoleted)
+        result = orig(ui, repo, *arg, **kwargs)
+        if not result: # commit successed
+            new = repo['-1']
+            oldbookmarks = []
+            for old in obsoleted:
+                oldbookmarks.extend(repo.nodebookmarks(old.node()))
+                repo.addobsolete(new.node(), old.node())
+            for book in oldbookmarks:
+                repo._bookmarks[book] = new.node()
+            if oldbookmarks:
+                bookmarks.write(repo)
+        return result
+    finally:
+        lock.release()
 
 def graftwrapper(orig, ui, repo, *revs, **kwargs):
     lock = repo.lock()
rename from tests/test-evolution.t
rename to tests/test-evolve.t
--- a/tests/test-evolution.t
+++ b/tests/test-evolve.t
@@ -16,7 +16,7 @@
   > hgext.graphlog=
   > EOF
   $ echo "obsolete=$(echo $(dirname $TESTDIR))/hgext/obsolete.py" >> $HGRCPATH
-  $ echo "evolution=$(echo $(dirname $TESTDIR))/hgext/evolution.py" >> $HGRCPATH
+  $ echo "evolve=$(echo $(dirname $TESTDIR))/hgext/evolve.py" >> $HGRCPATH
   $ mkcommit() {
   >    echo "$1" > "$1"
   >    hg add "$1"
@@ -43,12 +43,12 @@
   created new head
   $ mkcommit f
   $ hg qlog
-  5 - e44648563c73 add f (1)
-  4 - fbb94e3a0ecf add e (1)
-  3 - 47d2a3944de8 add d (1)
-  2 - 4538525df7e2 add c (1)
-  1 - 7c3bad9141dc add b (0)
-  0 - 1f0dee641bb7 add a (0)
+  5 - e44648563c73 add f (draft)
+  4 - fbb94e3a0ecf add e (draft)
+  3 - 47d2a3944de8 add d (draft)
+  2 - 4538525df7e2 add c (draft)
+  1 - 7c3bad9141dc add b (public)
+  0 - 1f0dee641bb7 add a (public)
 
 test simple kill
 
@@ -56,11 +56,11 @@
   0 files updated, 0 files merged, 1 files removed, 0 files unresolved
   working directory now at fbb94e3a0ecf
   $ hg qlog
-  4 - fbb94e3a0ecf add e (1)
-  3 - 47d2a3944de8 add d (1)
-  2 - 4538525df7e2 add c (1)
-  1 - 7c3bad9141dc add b (0)
-  0 - 1f0dee641bb7 add a (0)
+  4 - fbb94e3a0ecf add e (draft)
+  3 - 47d2a3944de8 add d (draft)
+  2 - 4538525df7e2 add c (draft)
+  1 - 7c3bad9141dc add b (public)
+  0 - 1f0dee641bb7 add a (public)
 
 test multiple kill
 
@@ -68,9 +68,9 @@
   0 files updated, 0 files merged, 1 files removed, 0 files unresolved
   working directory now at 7c3bad9141dc
   $ hg qlog
-  2 - 4538525df7e2 add c (1)
-  1 - 7c3bad9141dc add b (0)
-  0 - 1f0dee641bb7 add a (0)
+  2 - 4538525df7e2 add c (draft)
+  1 - 7c3bad9141dc add b (public)
+  0 - 1f0dee641bb7 add a (public)
   $ cd ..
 
 ##########################
@@ -207,11 +207,22 @@
   4	feature-B: another feature - test
   1	: a nifty feature - test
   0	: base - test
-  $ hg evolve
-  hg relocate --rev f8111a076f09 23409eba69a0
-  $ hg up feature-B -q #prevent feature-A bookmark to move grml
-  $ hg relocate -r 4 6 --traceback
+  $ hg stabilize
+  hg rebase -Dr f8111a076f09 -d 23409eba69a0
+  $ hg up null -q #prevent feature-A bookmark to move # XXX grml
+  $ hg bookmark
+     feature-A                 6:23409eba69a0
+     feature-B                 4:f8111a076f09
+  $ hg up 6
+  3 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ hg bookmark
+     feature-A                 6:23409eba69a0
+     feature-B                 4:f8111a076f09
+  $ hg bookmark -if feature-A
+  $ hg graft -O 4
+  grafting revision 4
   merging main-file-1
+  $ hg bookmark -ifr 7 feature-B # XXX not bookmark support in rebase --keep :-/
   $ hg log
   7	feature-B: another feature - test
   6	feature-A: a nifty feature - test
@@ -220,10 +231,14 @@
 Test commit -o options
 
   $ hg up 6
+  1 files updated, 0 files merged, 1 files removed, 0 files unresolved
   $ hg revert -r 7 --all
+  adding file-from-B
+  reverting main-file-1
   $ sed -i'' -e s/Zwei/deux/ main-file-1
-  $ hg commit -m 'Feature B' -o 7
+  $ hg commit -m 'another feature that rox' -o 7
+  created new head
   $ hg log
-  8	feature-B: another feature - test
+  8	feature-B: another feature that rox - test
   6	feature-A: a nifty feature - test
   0	: base - test