rebase: restore bookmark state on abort
authorTony Tung <tonytung@fb.com>
Mon, 13 Apr 2015 14:54:02 -0400
changeset 24758 d7451adc72f6
parent 24757 7b59f16174c5
child 24759 d082c6ef9ec3
rebase: restore bookmark state on abort The bookmark state was already being preserved, but it wasn't being properly restored.
hgext/rebase.py
tests/test-bookmarks-rebase.t
--- a/hgext/rebase.py	Sat Apr 04 02:37:43 2015 -0700
+++ b/hgext/rebase.py	Mon Apr 13 14:54:02 2015 -0400
@@ -231,7 +231,8 @@
                     hint = _('use "hg rebase --abort" to clear broken state')
                     raise util.Abort(msg, hint=hint)
             if abortf:
-                return abort(repo, originalwd, target, state)
+                return abort(repo, originalwd, target, state,
+                             activebookmark=activebookmark)
         else:
             if srcf and basef:
                 raise util.Abort(_('cannot specify both a '
@@ -852,8 +853,11 @@
 
     return False
 
-def abort(repo, originalwd, target, state):
-    'Restore the repository to its original state'
+def abort(repo, originalwd, target, state, activebookmark=None):
+    '''Restore the repository to its original state.  Additional args:
+
+    activebookmark: the name of the bookmark that should be active after the
+        restore'''
     dstates = [s for s in state.values() if s >= 0]
     immutable = [d for d in dstates if not repo[d].mutable()]
     cleanup = True
@@ -883,6 +887,9 @@
             # no backup of rebased cset versions needed
             repair.strip(repo.ui, repo, strippoints)
 
+    if activebookmark:
+        bookmarks.setcurrent(repo, activebookmark)
+
     clearstatus(repo)
     repo.ui.warn(_('rebase aborted\n'))
     return 0
--- a/tests/test-bookmarks-rebase.t	Sat Apr 04 02:37:43 2015 -0700
+++ b/tests/test-bookmarks-rebase.t	Mon Apr 13 14:54:02 2015 -0400
@@ -66,3 +66,27 @@
   date:        Thu Jan 01 00:00:00 1970 +0000
   summary:     0
   
+aborted rebase should restore active bookmark.
+
+  $ hg up 1
+  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  (leaving bookmark two)
+  $ echo 'e' > d
+  $ hg ci -A -m "4"
+  adding d
+  created new head
+  $ hg bookmark three
+  $ hg rebase -s three -d two
+  rebasing 4:dd7c838e8362 "4" (tip three)
+  merging d
+  warning: conflicts during merge.
+  merging d incomplete! (edit conflicts, then use 'hg resolve --mark')
+  unresolved conflicts (see hg resolve, then hg rebase --continue)
+  [1]
+  $ hg rebase --abort
+  rebase aborted
+  $ hg bookmark
+     one                       1:925d80f479bb
+   * three                     4:dd7c838e8362
+     two                       3:42e5ed2cdcf4
+