diff -r 915728be8afd -r bbc653876876 hgext/evolve.py --- 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()