changeset 710:79a1d2816bdb stable

merge --all option from tak
author Pierre-Yves David <pierre-yves.david@ens-lyon.org>
date Sat, 09 Feb 2013 20:53:03 +0000
parents 60582b861a00 (current diff) 0ff2251adfe0 (diff)
children 7d4427db811b
files hgext/evolve.py tests/test-evolve.t
diffstat 2 files changed, 60 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/hgext/evolve.py	Sat Feb 09 20:52:30 2013 +0000
+++ b/hgext/evolve.py	Sat Feb 09 20:53:03 2013 +0000
@@ -833,6 +833,7 @@
 @command('^evolve|stabilize|evolve|solve',
     [('n', 'dry-run', False, 'do not perform actions, print what to be done'),
     ('A', 'any', False, 'evolve any troubled changeset'),
+    ('a', 'all', False, 'evolve all troubled changesets'),
     ('c', 'continue', False, 'continue an interrupted evolution'), ],
     _('[OPTIONS]...'))
 def evolve(ui, repo, **opts):
@@ -840,33 +841,37 @@
 
     - rebase unstable changeset to make it stable again,
     - create proper diff from bumped changeset,
-    - merge divergent changeset.
+    - merge divergent changesets.
 
-    By default, take the first troubles changeset that looks relevant.
+    By default, take the first trouble changeset that looks relevant.
 
     (The logic is still a bit fuzzy)
 
-    - For unstable, that mean the first which could be rebased as child of the
-      working directory parent revision or one of its descendants and rebase
-      it.
+    - For unstable, this means taking the first which could be rebased as a
+      child of the working directory parent revision or one of its descendants
+      and rebasing it.
 
-    - For divergent this mean "." if applicable.
+    - For divergent, this means taking "." if applicable.
 
-    With --any, evolve pick any troubled changeset to solve
+    With --any, evolve picks any troubled changeset to solve.
 
     The working directory is updated to the newly created revision.
     """
 
     contopt = opts['continue']
     anyopt = opts['any']
+    allopt = opts['all']
+    dryrunopt = opts['dry_run']
 
     if contopt:
         if anyopt:
             raise util.Abort('can not specify both "--any" and "--continue"')
+        if allopt:
+            raise util.Abort('can not specify both "--all" and "--continue"')
         graftcmd = commands.table['graft'][0]
         return graftcmd(ui, repo, old_obsolete=True, **{'continue': True})
 
-    tr = _picknexttroubled(ui, repo, anyopt)
+    tr = _picknexttroubled(ui, repo, anyopt or allopt)
     if tr is None:
         troubled = repo.revs('troubled()')
         if troubled:
@@ -875,20 +880,29 @@
                       % len(troubled))
             return 2
         else:
-            ui.write_err(_('no troubled changeset\n'))
+            ui.write_err(_('no troubled changesets\n')) 
             return 1
+
+    while tr is not None:
+        result = _evolveany(ui, repo, tr, dryrunopt)
+        if not allopt:
+            return result
+        tr = _picknexttroubled(ui, repo, anyopt or allopt)
+        
+
+def _evolveany(ui, repo, tr, dryrunopt):
     repo = repo.unfiltered()
     tr = repo[tr.rev()]
     cmdutil.bailifchanged(repo)
     troubles = tr.troubles()
     if 'unstable' in troubles:
-        return _solveunstable(ui, repo, tr, opts['dry_run'])
+        return _solveunstable(ui, repo, tr, dryrunopt)
     elif 'bumped' in troubles:
-        return _solvebumped(ui, repo, tr, opts['dry_run'])
+        return _solvebumped(ui, repo, tr, dryrunopt)
     elif 'divergent' in troubles:
         repo = repo.unfiltered()
         tr = repo[tr.rev()]
-        return _solvedivergent(ui, repo, tr, opts['dry_run'])
+        return _solvedivergent(ui, repo, tr, dryrunopt)
     else:
         assert False  # WHAT? unknown troubles
 
@@ -948,12 +962,11 @@
         obs = obs.parents()[0]
         newer = obsolete.successorssets(repo, obs.node())
     if len(newer) > 1:
-        ui.write_err(_("conflict rewriting. can't choose destination\n"))
-        return 2
+        raise util.Abort(_("conflict rewriting. can't choose destination\n"))
     targets = newer[0]
     assert targets
     if len(targets) > 1:
-        ui.write_err(_("does not handle splitted parent yet\n"))
+        raise util.Abort(_("does not handle split parents yet\n"))
         return 2
     target = targets[0]
     displayer = cmdutil.show_changeset(ui, repo, {'template': shorttemplate})
--- a/tests/test-evolve.t	Sat Feb 09 20:52:30 2013 +0000
+++ b/tests/test-evolve.t	Sat Feb 09 20:53:03 2013 +0000
@@ -333,6 +333,38 @@
   +deux
   $ hg log -r 'bumped()' # no more bumped
 
+test evolve --all
+  $ sed -i'' -e s/deux/to/ main-file-1
+  $ hg commit -m 'dansk 2!'
+  $ sed -i'' -e s/Three/tre/ main-file-1
+  $ hg commit -m 'dansk 3!'
+  $ hg update 9
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ sed -i'' -e s/Un/Én/ main-file-1
+  $ hg commit --amend -m 'dansk!'
+  2 new unstable changesets
+
+  $ hg evolve --all --traceback
+  move:[10] dansk 2!
+  atop:[13] dansk!
+  merging main-file-1
+  move:[11] dansk 3!
+  atop:[14] dansk 2!
+  merging main-file-1
+  $ hg glog
+  @  15	: dansk 3! - test
+  |
+  o  14	: dansk 2! - test
+  |
+  o  13	feature-B: dansk! - test
+  |
+  o  7	: another feature - test
+  |
+  o  6	feature-A: a nifty feature - test
+  |
+  o  0	: base - test
+  
+
   $ cd ..
 
 enable general delta