--- a/hgext/evolve.py Fri Feb 17 19:08:36 2012 +0100
+++ b/hgext/evolve.py Fri Feb 17 19:54:42 2012 +0100
@@ -120,29 +120,36 @@
for u in updates:
repo.addobsolete(u.node(), old.node())
repo.addobsolete(new.node(), u.node())
+ oldbookmarks = repo.nodebookmarks(old.node())
+ for book in oldbookmarks:
+ repo._bookmarks[book] = new.node()
+ if oldbookmarks:
+ bookmarks.write(repo)
finally:
wlock.release()
return newid
-def relocate(repo, rev, dest):
+def relocate(repo, orig, dest):
"""rewrite <rev> on dest"""
try:
rebase = extensions.find('rebase')
# dummy state to trick rebase node
- assert repo[rev].p2().rev() == node.nullrev, 'no support yet'
- cmdutil.duplicatecopies(repo, rev, repo[dest].node(),
- repo[rev].p2().node())
- rebase.rebasenode(repo, rev, dest, {node.nullrev: node.nullrev})
- nodenew = rebase.concludenode(repo, rev, dest, node.nullid)
- nodesrc = repo.changelog.node(rev)
+ assert orig.p2().rev() == node.nullrev, 'no support yet'
+ destbookmarks = repo.nodebookmarks(dest.node())
+ cmdutil.duplicatecopies(repo, orig.node(), dest.node())
+ rebase.rebasenode(repo, orig.node(), dest.node(), {node.nullrev: node.nullrev})
+ nodenew = rebase.concludenode(repo, orig.node(), dest.node(), node.nullid)
+ nodesrc = orig.node()
repo.addobsolete(nodenew, nodesrc)
phases.retractboundary(repo, repo[nodesrc].phase(), [nodenew])
oldbookmarks = repo.nodebookmarks(nodesrc)
for book in oldbookmarks:
repo._bookmarks[book] = nodenew
- if oldbookmarks:
+ for book in destbookmarks: # restore bookmark that rebase move
+ repo._bookmarks[book] = dest.node()
+ if oldbookmarks or destbookmarks:
bookmarks.write(repo)
except util.Abort:
# Invalidate the previous setparents
@@ -157,19 +164,21 @@
command = cmdutil.command(cmdtable)
@command('^stabilize',
- [],
+ [
+ ('n', 'dry-run', False, 'Do nothing but printing what should be done')
+ ],
'')
-def stabilize(ui, repo):
- """suggest the next evolution step"""
+def stabilize(ui, repo, **opts):
+ """move changeset out of they unstable state"""
obsolete = extensions.find('obsolete')
- unstable = repo.revs('unstable()')
+ unstable = list(repo.set('unstable()'))
if not unstable:
ui.write_err(_('no unstable changeset\n'))
return 1
- next = unstable[0]
- obs = repo[next].parents()[0]
+ node = unstable[0]
+ obs = node.parents()[0]
if not obs.obsolete():
- obs = next.parents()[1]
+ obs = node.parents()[1]
assert obs.obsolete()
newer = obsolete.newerversion(repo, obs.node())
if len(newer) > 1:
@@ -183,7 +192,22 @@
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]))
+ displayer = cmdutil.show_changeset(ui, repo, {'template': shorttemplate})
+ target = repo[target]
+ repo.ui.status(_('move:'))
+ displayer.show(node)
+ repo.ui.status(_('atop:'))
+ displayer.show(target)
+ todo= 'hg rebase -Dr %s -d %s\n' % (node, target)
+ if opts['dry_run']:
+ repo.ui.status(todo)
+ else:
+ repo.ui.note(todo)
+ lock = repo.lock()
+ try:
+ relocate(repo, node, target)
+ finally:
+ lock.release()
shorttemplate = '[{rev}] {desc|firstline}\n'