diff mercurial/commands.py @ 17264:ec7b9bec19c9 stable

strip: move bookmarks to nearest ancestor rather than '.' If you've got this graph: 0-1-2 \ 3 and 3 is checked out, 2 is bookmarked with "broken", and you do "hg strip 2", the bookmark will move to 3, not 1. That's always struck me as a bug. This change makes bookmarks move to the tipmost ancestor of the stripped set rather than the currently-checked-out revision, which is what I always expected should happen.
author Augie Fackler <raf@durin42.com>
date Thu, 26 Jul 2012 16:57:50 -0500
parents e432fb4b4221
children 4e35dea77e31
line wrap: on
line diff
--- a/mercurial/commands.py	Fri Jul 27 12:33:48 2012 -0500
+++ b/mercurial/commands.py	Thu Jul 26 16:57:50 2012 -0500
@@ -1298,10 +1298,20 @@
                                editor=editor,
                                extra=extra)
 
+        current = repo._bookmarkcurrent
+        marks = old.bookmarks()
         node = cmdutil.amend(ui, repo, commitfunc, old, extra, pats, opts)
         if node == old.node():
             ui.status(_("nothing changed\n"))
             return 1
+        elif marks:
+            ui.debug('moving bookmarks %r from %s to %s\n' %
+                     (marks, old.hex(), hex(node)))
+            for bm in marks:
+                repo._bookmarks[bm] = node
+                if bm == current:
+                    bookmarks.setcurrent(repo, bm)
+            bookmarks.write(repo)
     else:
         e = cmdutil.commiteditor
         if opts.get('force_editor'):