rebase: reinstate old-style rev spec support for the source and base (issue3181) stable
authorSteven Brown <StevenGBrown@gmail.com>
Sun, 08 Jan 2012 23:09:35 +0800
branchstable
changeset 15800 e4fc0f0b4f7e
parent 15799 e43c140eb08f
child 15801 bfd3ce759682
child 15825 8b611944eb84
child 15844 1855b0747c91
rebase: reinstate old-style rev spec support for the source and base (issue3181) As of b12362ab13e7 (first released as part of Mercurial 2.0), the rebase command accepted ONLY revsets for the source and base arguments and no longer accepted old-style revision specifications. As a result, some revision names were no longer recognised, e.g. hg rebase --base br-anch abort: unknown revision 'br'! These arguments are now interpreted first as old-style revision specifications, then as revsets when no matching revision is found. This restores backwards compatibility with releases prior to 2.0.
hgext/rebase.py
tests/test-rebase-named-branches.t
--- a/hgext/rebase.py	Fri Jan 06 07:37:59 2012 +0100
+++ b/hgext/rebase.py	Sun Jan 08 23:09:35 2012 +0800
@@ -15,7 +15,7 @@
 '''
 
 from mercurial import hg, util, repair, merge, cmdutil, commands, bookmarks
-from mercurial import extensions, patch
+from mercurial import extensions, patch, scmutil
 from mercurial.commands import templateopts
 from mercurial.node import nullrev
 from mercurial.lock import release
@@ -187,10 +187,11 @@
             if revf:
                 revgen = repo.set('%lr', revf)
             elif srcf:
-                revgen = repo.set('(%r)::', srcf)
+                src = scmutil.revrange(repo, [srcf])
+                revgen = repo.set('(%ld)::', src)
             else:
-                base = basef or '.'
-                revgen = repo.set('(children(ancestor(%r, %d)) and ::(%r))::',
+                base = scmutil.revrange(repo, [basef or '.'])
+                revgen = repo.set('(children(ancestor(%ld, %d)) and ::(%ld))::',
                                   base, dest, base)
 
             rebaseset = [c.rev() for c in revgen]
--- a/tests/test-rebase-named-branches.t	Fri Jan 06 07:37:59 2012 +0100
+++ b/tests/test-rebase-named-branches.t	Sun Jan 08 23:09:35 2012 +0800
@@ -19,25 +19,156 @@
   3 files updated, 0 files merged, 0 files removed, 0 files unresolved
   $ cd ..
 
-
-Rebasing descendant onto ancestor across different named branches
-
   $ hg clone -q -u . a a1
 
   $ cd a1
 
-  $ hg branch dev
-  marked working directory as branch dev
+  $ hg update 3
+  3 files updated, 0 files merged, 2 files removed, 0 files unresolved
+  $ hg branch dev-one
+  marked working directory as branch dev-one
+  (branches are permanent and global, did you want a bookmark?)
+  $ hg ci -m 'dev-one named branch'
+
+  $ hg update 7
+  2 files updated, 0 files merged, 3 files removed, 0 files unresolved
+  $ hg branch dev-two
+  marked working directory as branch dev-two
   (branches are permanent and global, did you want a bookmark?)
 
   $ echo x > x
 
   $ hg add x
 
-  $ hg ci -m 'extra named branch'
+  $ hg ci -m 'dev-two named branch'
+
+  $ hg tglog
+  @  9: 'dev-two named branch' dev-two
+  |
+  | o  8: 'dev-one named branch' dev-one
+  | |
+  o |  7: 'H'
+  | |
+  +---o  6: 'G'
+  | | |
+  o | |  5: 'F'
+  | | |
+  +---o  4: 'E'
+  | |
+  | o  3: 'D'
+  | |
+  | o  2: 'C'
+  | |
+  | o  1: 'B'
+  |/
+  o  0: 'A'
+  
+
+Branch name containing a dash (issue3181)
+
+  $ hg rebase -b dev-two -d dev-one --keepbranches
+  saved backup bundle to $TESTTMP/a1/.hg/strip-backup/*-backup.hg (glob)
+
+  $ hg tglog
+  @  9: 'dev-two named branch' dev-two
+  |
+  o  8: 'H'
+  |
+  | o  7: 'G'
+  |/|
+  o |  6: 'F'
+  | |
+  o |  5: 'dev-one named branch' dev-one
+  | |
+  | o  4: 'E'
+  | |
+  o |  3: 'D'
+  | |
+  o |  2: 'C'
+  | |
+  o |  1: 'B'
+  |/
+  o  0: 'A'
+  
+  $ hg rebase -s dev-one -d 0 --keepbranches
+  saved backup bundle to $TESTTMP/a1/.hg/strip-backup/*-backup.hg (glob)
 
   $ hg tglog
-  @  8: 'extra named branch' dev
+  @  8: 'dev-two named branch' dev-two
+  |
+  o  7: 'H'
+  |
+  | o  6: 'G'
+  |/|
+  o |  5: 'F'
+  | |
+  | o  4: 'E'
+  |/
+  | o  3: 'D'
+  | |
+  | o  2: 'C'
+  | |
+  | o  1: 'B'
+  |/
+  o  0: 'A'
+  
+  $ hg update 3
+  3 files updated, 0 files merged, 3 files removed, 0 files unresolved
+  $ hg branch dev-one
+  marked working directory as branch dev-one
+  (branches are permanent and global, did you want a bookmark?)
+  $ hg ci -m 'dev-one named branch'
+
+  $ hg tglog
+  @  9: 'dev-one named branch' dev-one
+  |
+  | o  8: 'dev-two named branch' dev-two
+  | |
+  | o  7: 'H'
+  | |
+  | | o  6: 'G'
+  | |/|
+  | o |  5: 'F'
+  | | |
+  | | o  4: 'E'
+  | |/
+  o |  3: 'D'
+  | |
+  o |  2: 'C'
+  | |
+  o |  1: 'B'
+  |/
+  o  0: 'A'
+  
+  $ hg rebase -b 'max(branch("dev-two"))' -d dev-one --keepbranches
+  saved backup bundle to $TESTTMP/a1/.hg/strip-backup/*-backup.hg (glob)
+
+  $ hg tglog
+  @  9: 'dev-two named branch' dev-two
+  |
+  o  8: 'H'
+  |
+  | o  7: 'G'
+  |/|
+  o |  6: 'F'
+  | |
+  o |  5: 'dev-one named branch' dev-one
+  | |
+  | o  4: 'E'
+  | |
+  o |  3: 'D'
+  | |
+  o |  2: 'C'
+  | |
+  o |  1: 'B'
+  |/
+  o  0: 'A'
+  
+  $ hg rebase -s 'max(branch("dev-one"))' -d 0 --keepbranches
+  saved backup bundle to $TESTTMP/a1/.hg/strip-backup/*-backup.hg (glob)
+
+  $ hg tglog
+  @  8: 'dev-two named branch' dev-two
   |
   o  7: 'H'
   |
@@ -56,6 +187,7 @@
   o  0: 'A'
   
 
+Rebasing descendant onto ancestor across different named branches
 
   $ hg rebase -s 1 -d 8 --keepbranches
   saved backup bundle to $TESTTMP/a1/.hg/strip-backup/*-backup.hg (glob)
@@ -67,7 +199,7 @@
   |
   o  6: 'B'
   |
-  o  5: 'extra named branch' dev
+  o  5: 'dev-two named branch' dev-two
   |
   o  4: 'H'
   |
@@ -93,7 +225,7 @@
   |
   o  6: 'B'
   |
-  o  5: 'extra named branch'
+  o  5: 'dev-two named branch'
   |
   o  4: 'H'
   |