hgext/evolve.py
changeset 750 ddbea2fdee5e
parent 749 f728edc7fcd1
child 751 a5474648a9d2
--- a/hgext/evolve.py	Wed Jul 31 19:56:28 2013 +0200
+++ b/hgext/evolve.py	Tue Oct 22 11:51:01 2013 +0200
@@ -850,6 +850,8 @@
     - rebase unstable changeset to make it stable again,
     - create proper diff from bumped changeset,
     - merge divergent changesets.
+    - update to a successor if the working directory parent is
+      obsolete
 
     By default, take the first trouble changeset that looks relevant.
 
@@ -881,6 +883,40 @@
 
     tr = _picknexttroubled(ui, repo, anyopt or allopt)
     if tr is None:
+        if repo['.'].obsolete():
+            displayer = cmdutil.show_changeset(ui, repo, {'template': shorttemplate})
+            successors = set()
+
+            for successorsset in obsolete.successorssets(repo, repo['.'].node()):
+                for nodeid in successorsset:
+                    successors.add(repo[nodeid])
+
+            if not successors:
+                ui.warn(_('parent is obsolete without successors; ' +
+                          'likely killed\n'))
+                return 2
+
+            elif len(successors) > 1:
+                ui.warn(_('parent is obsolete with multiple successors:\n'))
+
+                for ctx in sorted(successors, key=lambda ctx: ctx.rev()):
+                    displayer.show(ctx)
+
+                return 2
+
+            else:
+                ctx = successors.pop()
+
+                ui.status(_('update:'))
+                if not ui.quiet:
+                    displayer.show(ctx)
+
+                if dryrunopt:
+                    print 'hg update %s' % ctx.rev()
+                    return 0
+                else:
+                    return hg.update(repo, ctx.rev())
+
         troubled = repo.revs('troubled()')
         if troubled:
             ui.write_err(_('nothing to evolve here\n'))