[PATCH stable] rebase: derive node from target rev (issue3802)

Siddharth Agarwal sid0 at fb.com
Sun Feb 3 16:30:51 CST 2013


# HG changeset patch
# User Siddharth Agarwal <sid0 at fb.com>
# Date 1359930399 28800
# Node ID 6c45e953b3f4a12ed8deedea3adeac8e80fc04e0
# Parent  d29cfda81aece14f39cd9d3f87d30b08d1c05fc0
rebase: derive node from target rev (issue3802)

dest.rev() is the same as target when a new rebase is run, but dest isn't set
when rebase --continue is run.

diff --git a/hgext/rebase.py b/hgext/rebase.py
--- a/hgext/rebase.py
+++ b/hgext/rebase.py
@@ -316,6 +316,9 @@ def rebase(ui, repo, **opts):
             for k, v in state.iteritems():
                 if v > nullmerge:
                     nstate[repo[k].node()] = repo[v].node()
+            # XXX this is the same as dest.node() for the non-continue path --
+            # this should probably be cleaned up
+            targetnode = repo[target].node()
 
         if not keepf:
             collapsedas = None
@@ -324,7 +327,7 @@ def rebase(ui, repo, **opts):
             clearrebased(ui, repo, state, skipped, collapsedas)
 
         if currentbookmarks:
-            updatebookmarks(repo, dest, nstate, currentbookmarks)
+            updatebookmarks(repo, targetnode, nstate, currentbookmarks)
 
         clearstatus(repo)
         ui.note(_("rebase completed\n"))
@@ -501,15 +504,14 @@ def updatemq(repo, state, skipped, **opt
         mq.seriesdirty = True
         mq.savedirty()
 
-def updatebookmarks(repo, dest, nstate, originalbookmarks):
+def updatebookmarks(repo, targetnode, nstate, originalbookmarks):
     'Move bookmarks to their correct changesets, and delete divergent ones'
-    destnode = dest.node()
     marks = repo._bookmarks
     for k, v in originalbookmarks.iteritems():
         if v in nstate:
             # update the bookmarks for revs that have moved
             marks[k] = nstate[v]
-            bookmarks.deletedivergent(repo, [destnode], k)
+            bookmarks.deletedivergent(repo, [targetnode], k)
 
     marks.write()
 
diff --git a/tests/test-rebase-bookmarks.t b/tests/test-rebase-bookmarks.t
--- a/tests/test-rebase-bookmarks.t
+++ b/tests/test-rebase-bookmarks.t
@@ -128,4 +128,34 @@ Keep active bookmark on the correct chan
   o  0: 'A' bookmarks:
   
 
-  $ cd ..
+rebase --continue with bookmarks present (issue3802)
+
+  $ hg up 2
+  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  $ echo 'C' > c
+  $ hg add c
+  $ hg ci -m 'other C'
+  created new head
+  $ hg up 3
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ hg rebase
+  merging c
+  warning: conflicts during merge.
+  merging c incomplete! (edit conflicts, then use 'hg resolve --mark')
+  abort: unresolved conflicts (see hg resolve, then hg rebase --continue)
+  [255]
+  $ echo 'c' > c
+  $ hg resolve --mark c
+  $ hg rebase --continue
+  saved backup bundle to $TESTTMP/a3/.hg/strip-backup/3d5fa227f4b5-backup.hg (glob)
+  $ hg tglog
+  @  4: 'C' bookmarks: Y Z
+  |
+  o  3: 'other C' bookmarks:
+  |
+  o  2: 'B' bookmarks: X
+  |
+  o  1: 'D' bookmarks: W
+  |
+  o  0: 'A' bookmarks:
+  


More information about the Mercurial-devel mailing list