##// END OF EJS Templates
rebase: allow for rebasing descendants onto ancestors on different named branches...
rebase: allow for rebasing descendants onto ancestors on different named branches So far we've been denying rebasing descendants onto ancestors, but there are situations in which this kind of operation makes perfect sense to me. Let's say we have made a commit (or more), that belongs to branch 'dev', on top of the named branch 'stable': ... a (stable) - b (dev) but then we realize that b should belong to branch 'stable'. In these cases a rebase means: "move these csets from named branch A to named branch B" and there isn't a valid reason to deny it. This patch basically doesn't block it, if source and destination are on different named branches. The old behaviour still applies for rebases across the same named branch. Can you think of any tricky corner cases in which this new behaviour could lead to problems? (I bet there are tons of them...) By the way, I created a brand new .t because I feel there should be more tests I can't think of at the moment.

File last commit:

r13733:4e2690a7 default
r13733:4e2690a7 default
Show More
test-rebase-named-branches.t
171 lines | 2.1 KiB | text/troff | Tads3Lexer
/ tests / test-rebase-named-branches.t
$ cat >> $HGRCPATH <<EOF
> [extensions]
> graphlog=
> rebase=
>
> [alias]
> tglog = log -G --template "{rev}: '{desc}' {branches}\n"
> EOF
$ hg init a
$ cd a
$ echo A > A
$ hg ci -Am A
adding A
$ echo B > B
$ hg ci -Am B
adding B
$ hg up -q -C 0
$ echo C > C
$ hg ci -Am C
adding C
created new head
$ hg up -q -C 0
$ echo D > D
$ hg ci -Am D
adding D
created new head
$ hg merge -r 2
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
$ hg ci -m E
$ hg up -q -C 3
$ echo F > F
$ hg ci -Am F
adding F
created new head
$ 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
$ echo x > x
$ hg add x
$ hg ci -m 'extra named branch'
$ hg tglog
@ 6: 'extra named branch' dev
|
o 5: 'F'
|
| o 4: 'E'
|/|
o | 3: 'D'
| |
| o 2: 'C'
|/
| o 1: 'B'
|/
o 0: 'A'
$ hg rebase -s 6 -d 5
saved backup bundle to $TESTTMP/a1/.hg/strip-backup/*-backup.hg (glob)
$ hg tglog
@ 6: 'extra named branch'
|
o 5: 'F'
|
| o 4: 'E'
|/|
o | 3: 'D'
| |
| o 2: 'C'
|/
| o 1: 'B'
|/
o 0: 'A'
$ cd ..
Rebasing descendant onto ancestor across the same named branches
$ hg clone -q -u . a a2
$ cd a2
$ echo x > x
$ hg add x
$ hg ci -m 'G'
$ hg tglog
@ 6: 'G'
|
o 5: 'F'
|
| o 4: 'E'
|/|
o | 3: 'D'
| |
| o 2: 'C'
|/
| o 1: 'B'
|/
o 0: 'A'
$ hg rebase -s 6 -d 5
abort: source is descendant of destination
[255]
$ cd ..
Rebasing ancestor onto descendant across different named branches
$ hg clone -q -u . a a3
$ cd a3
$ hg branch dev
marked working directory as branch dev
$ echo x > x
$ hg add x
$ hg ci -m 'extra named branch'
$ hg tglog
@ 6: 'extra named branch' dev
|
o 5: 'F'
|
| o 4: 'E'
|/|
o | 3: 'D'
| |
| o 2: 'C'
|/
| o 1: 'B'
|/
o 0: 'A'
$ hg rebase -s 5 -d 6
abort: source is ancestor of destination
[255]
$ cd ..