--- a/hgext/evolve.py Fri Feb 17 17:55:12 2012 +0100
+++ b/hgext/evolve.py Fri Feb 17 19:01:25 2012 +0100
@@ -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()