Message ID | 234ac9f024bf4e6b4944fd8f3912cf6367cf828b.1554151449.git.liu.denton@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | rebase: teach rebase --keep-base | expand |
On Mon, Apr 01, 2019 at 01:51:57PM -0700, Denton Liu wrote: > Signed-off-by: Denton Liu <liu.denton@gmail.com> > --- > t/t3431-rebase-fork-point.sh | 53 ++++++++++++++++++++++++++++++++++++ > 1 file changed, 53 insertions(+) > create mode 100755 t/t3431-rebase-fork-point.sh > > diff --git a/t/t3431-rebase-fork-point.sh b/t/t3431-rebase-fork-point.sh > new file mode 100755 > index 0000000000..8e2483b73e > --- /dev/null > +++ b/t/t3431-rebase-fork-point.sh > @@ -0,0 +1,53 @@ > +#!/bin/sh > +# > +# Copyright (c) 2019 Denton Liu > +# > + > +test_description='git rebase --fork-point test' > + > +. ./test-lib.sh > + > +# A---B---D---E (master) > +# \ > +# C*---F---G (side) > +# > +# C was formerly part of master but is side out Sorry, small typo. We should probably fix this before it gets merged into next. This should read "C was formerly part of master but master was rewound to remove C" Thanks, Denton > +# > +test_expect_success setup ' > + test_commit A && > + test_commit B && > + test_commit C && > + git branch -t side && > + git reset --hard HEAD^ && > + test_commit D && > + test_commit E && > + git checkout side && > + test_commit F && > + test_commit G > +' > + > +test_rebase() { > + expected="$1" && > + shift && > + test_expect_success "git rebase $@" " > + git checkout master && > + git reset --hard E && > + git checkout side && > + git reset --hard G && > + git rebase $@ && > + test_write_lines $expected >expect && > + git log --pretty=%s >actual && > + test_cmp expect actual > + " > +} > + > +test_rebase 'G F E D B A' '' > +test_rebase 'G F D B A' '--onto D' > +test_rebase 'G F C E D B A' '--no-fork-point' > +test_rebase 'G F C D B A' '--no-fork-point --onto D' > +test_rebase 'G F E D B A' '--fork-point refs/heads/master' > +test_rebase 'G F D B A' '--fork-point --onto D refs/heads/master' > +test_rebase 'G F C E D B A' 'refs/heads/master' > +test_rebase 'G F C D B A' '--onto D refs/heads/master' > + > +test_done > -- > 2.21.0.695.gaf8658f249 >
On Mon, Apr 01, 2019 at 01:51:57PM -0700, Denton Liu wrote: > Signed-off-by: Denton Liu <liu.denton@gmail.com> > --- > t/t3431-rebase-fork-point.sh | 53 ++++++++++++++++++++++++++++++++++++ > 1 file changed, 53 insertions(+) > create mode 100755 t/t3431-rebase-fork-point.sh > > diff --git a/t/t3431-rebase-fork-point.sh b/t/t3431-rebase-fork-point.sh > new file mode 100755 > index 0000000000..8e2483b73e > --- /dev/null > +++ b/t/t3431-rebase-fork-point.sh > @@ -0,0 +1,53 @@ > +#!/bin/sh > +# > +# Copyright (c) 2019 Denton Liu > +# > + > +test_description='git rebase --fork-point test' > + > +. ./test-lib.sh > + > +# A---B---D---E (master) > +# \ > +# C*---F---G (side) > +# > +# C was formerly part of master but is side out > +# > +test_expect_success setup ' > + test_commit A && > + test_commit B && > + test_commit C && > + git branch -t side && > + git reset --hard HEAD^ && > + test_commit D && > + test_commit E && > + git checkout side && > + test_commit F && > + test_commit G > +' > + > +test_rebase() { > + expected="$1" && > + shift && > + test_expect_success "git rebase $@" " > + git checkout master && > + git reset --hard E && > + git checkout side && > + git reset --hard G && > + git rebase $@ && > + test_write_lines $expected >expect && > + git log --pretty=%s >actual && > + test_cmp expect actual > + " > +} > + > +test_rebase 'G F E D B A' '' It appears that this last empty argument triggers some bug in Bash v4.2 and older (and on macOS such an old Bash is the default /bin/sh), as it turns that empty argument into something else, which in turn fails the test with: <...> ++ git rebase $'\177' fatal: invalid upstream '?' error: last command exited with $?=128 not ok 2 - git rebase https://travis-ci.org/git/git/jobs/516070862#L2276 Omitting that empty argument avoids this issue, and the test still checks what it was supposed to. > +test_rebase 'G F D B A' '--onto D' > +test_rebase 'G F C E D B A' '--no-fork-point' > +test_rebase 'G F C D B A' '--no-fork-point --onto D' > +test_rebase 'G F E D B A' '--fork-point refs/heads/master' > +test_rebase 'G F D B A' '--fork-point --onto D refs/heads/master' > +test_rebase 'G F C E D B A' 'refs/heads/master' > +test_rebase 'G F C D B A' '--onto D refs/heads/master' > + > +test_done > -- > 2.21.0.695.gaf8658f249 >
Hi Denton, On Mon, 1 Apr 2019, Denton Liu wrote: > diff --git a/t/t3431-rebase-fork-point.sh b/t/t3431-rebase-fork-point.sh > new file mode 100755 > index 0000000000..8e2483b73e > --- /dev/null > +++ b/t/t3431-rebase-fork-point.sh > @@ -0,0 +1,53 @@ > +#!/bin/sh > +# > +# Copyright (c) 2019 Denton Liu > +# > + > +test_description='git rebase --fork-point test' > + > +. ./test-lib.sh > + > +# A---B---D---E (master) > +# \ > +# C*---F---G (side) > +# > +# C was formerly part of master but is side out > +# > +test_expect_success setup ' > + test_commit A && > + test_commit B && > + test_commit C && > + git branch -t side && > + git reset --hard HEAD^ && > + test_commit D && > + test_commit E && > + git checkout side && > + test_commit F && > + test_commit G > +' > + > +test_rebase() { > + expected="$1" && > + shift && > + test_expect_success "git rebase $@" " > + git checkout master && > + git reset --hard E && > + git checkout side && > + git reset --hard G && > + git rebase $@ && I think we need this patch, to make the macOS build happy: -- snip -- Subject: fixup??? t3431: add rebase --fork-point tests Try to fix the Mac build, which currently fails thusly: ++ git reset --hard G HEAD is now at d8775ba G ++ git rebase $'\177' fatal: invalid upstream '?' error: last command exited with $?=128 Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> diff --git a/t/t3431-rebase-fork-point.sh b/t/t3431-rebase-fork-point.sh index 4607e65de6..b41a0c0b68 100755 --- a/t/t3431-rebase-fork-point.sh +++ b/t/t3431-rebase-fork-point.sh @@ -34,7 +34,7 @@ test_rebase() { git reset --hard E && git checkout side && git reset --hard G && - git rebase $@ && + eval git rebase \"$@\" && test_write_lines $expected >expect && git log --pretty=%s >actual && test_cmp expect actual -- snap -- Ciao, Dscho > + test_write_lines $expected >expect && > + git log --pretty=%s >actual && > + test_cmp expect actual > + " > +} > + > +test_rebase 'G F E D B A' '' > +test_rebase 'G F D B A' '--onto D' > +test_rebase 'G F C E D B A' '--no-fork-point' > +test_rebase 'G F C D B A' '--no-fork-point --onto D' > +test_rebase 'G F E D B A' '--fork-point refs/heads/master' > +test_rebase 'G F D B A' '--fork-point --onto D refs/heads/master' > +test_rebase 'G F C E D B A' 'refs/heads/master' > +test_rebase 'G F C D B A' '--onto D refs/heads/master' > + > +test_done > -- > 2.21.0.695.gaf8658f249 > >
On Fri, Apr 05, 2019 at 04:55:37PM +0200, Johannes Schindelin wrote: > Hi Denton, > > On Mon, 1 Apr 2019, Denton Liu wrote: > > > diff --git a/t/t3431-rebase-fork-point.sh b/t/t3431-rebase-fork-point.sh > > new file mode 100755 > > index 0000000000..8e2483b73e > > --- /dev/null > > +++ b/t/t3431-rebase-fork-point.sh > > @@ -0,0 +1,53 @@ > > +#!/bin/sh > > +# > > +# Copyright (c) 2019 Denton Liu > > +# > > + > > +test_description='git rebase --fork-point test' > > + > > +. ./test-lib.sh > > + > > +# A---B---D---E (master) > > +# \ > > +# C*---F---G (side) > > +# > > +# C was formerly part of master but is side out > > +# > > +test_expect_success setup ' > > + test_commit A && > > + test_commit B && > > + test_commit C && > > + git branch -t side && > > + git reset --hard HEAD^ && > > + test_commit D && > > + test_commit E && > > + git checkout side && > > + test_commit F && > > + test_commit G > > +' > > + > > +test_rebase() { > > + expected="$1" && > > + shift && > > + test_expect_success "git rebase $@" " > > + git checkout master && > > + git reset --hard E && > > + git checkout side && > > + git reset --hard G && > > + git rebase $@ && > > I think we need this patch, to make the macOS build happy: Thanks for digging into this, both. Out of curiosity, t3432 is written similarly: test_rebase_same_head() { status="$1" && shift && test_expect_$status "git rebase $@ with $changes is no-op" " oldhead=\$(git rev-parse HEAD) && test_when_finished 'git reset --hard \$oldhead' && git rebase $@ && newhead=\$(git rev-parse HEAD) && test_cmp_rev \$oldhead \$newhead " } and is also invoked similarly test_rebase_same_head success '' but it doesn't seem to fail. Any ideas on why? Thanks, Denton > > -- snip -- > Subject: fixup??? t3431: add rebase --fork-point tests > > Try to fix the Mac build, which currently fails thusly: > > ++ git reset --hard G > HEAD is now at d8775ba G > ++ git rebase $'\177' > fatal: invalid upstream '?' > error: last command exited with $?=128 > > Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> > > diff --git a/t/t3431-rebase-fork-point.sh b/t/t3431-rebase-fork-point.sh > index 4607e65de6..b41a0c0b68 100755 > --- a/t/t3431-rebase-fork-point.sh > +++ b/t/t3431-rebase-fork-point.sh > @@ -34,7 +34,7 @@ test_rebase() { > git reset --hard E && > git checkout side && > git reset --hard G && > - git rebase $@ && > + eval git rebase \"$@\" && > test_write_lines $expected >expect && > git log --pretty=%s >actual && > test_cmp expect actual > -- snap -- > > Ciao, > Dscho > > > + test_write_lines $expected >expect && > > + git log --pretty=%s >actual && > > + test_cmp expect actual > > + " > > +} > > + > > +test_rebase 'G F E D B A' '' > > +test_rebase 'G F D B A' '--onto D' > > +test_rebase 'G F C E D B A' '--no-fork-point' > > +test_rebase 'G F C D B A' '--no-fork-point --onto D' > > +test_rebase 'G F E D B A' '--fork-point refs/heads/master' > > +test_rebase 'G F D B A' '--fork-point --onto D refs/heads/master' > > +test_rebase 'G F C E D B A' 'refs/heads/master' > > +test_rebase 'G F C D B A' '--onto D refs/heads/master' > > + > > +test_done > > -- > > 2.21.0.695.gaf8658f249 > > > >
Am 05.04.19 um 19:25 schrieb Denton Liu: > On Fri, Apr 05, 2019 at 04:55:37PM +0200, Johannes Schindelin wrote: >> On Mon, 1 Apr 2019, Denton Liu wrote: >>> +test_rebase() { >>> + expected="$1" && >>> + shift && >>> + test_expect_success "git rebase $@" " >>> + git checkout master && >>> + git reset --hard E && >>> + git checkout side && >>> + git reset --hard G && >>> + git rebase $@ && >> >> I think we need this patch, to make the macOS build happy: > > Thanks for digging into this, both. > > Out of curiosity, t3432 is written similarly: > > test_rebase_same_head() { > status="$1" && > shift && > test_expect_$status "git rebase $@ with $changes is no-op" " > oldhead=\$(git rev-parse HEAD) && > test_when_finished 'git reset --hard \$oldhead' && > git rebase $@ && > newhead=\$(git rev-parse HEAD) && > test_cmp_rev \$oldhead \$newhead > " > } Using $@ in these expansions is wrong. You do not want to forward an argument list, but you want to construct a command line. $* is correct here. Then you can remove the single-quotes at the invocation, like so: test_rebase_same_head success test_rebase_same_head success --onto B B Function test_rebase() could be done in the same way, but the first argument, expected, still needs quotes at the call site, of course. -- Hannes
Hi Hannes & Denton, On Fri, 5 Apr 2019, Johannes Sixt wrote: > Am 05.04.19 um 19:25 schrieb Denton Liu: > > On Fri, Apr 05, 2019 at 04:55:37PM +0200, Johannes Schindelin wrote: > >> On Mon, 1 Apr 2019, Denton Liu wrote: > >>> +test_rebase() { > >>> + expected="$1" && > >>> + shift && > >>> + test_expect_success "git rebase $@" " > >>> + git checkout master && > >>> + git reset --hard E && > >>> + git checkout side && > >>> + git reset --hard G && > >>> + git rebase $@ && > >> > >> I think we need this patch, to make the macOS build happy: Actually, my patch did not even fix the build, I looked at the wrong (succeeding) build, sorry for the noise. > > Thanks for digging into this, both. > > > > Out of curiosity, t3432 is written similarly: > > > > test_rebase_same_head() { > > status="$1" && > > shift && > > test_expect_$status "git rebase $@ with $changes is no-op" " > > oldhead=\$(git rev-parse HEAD) && > > test_when_finished 'git reset --hard \$oldhead' && > > git rebase $@ && > > newhead=\$(git rev-parse HEAD) && > > test_cmp_rev \$oldhead \$newhead > > " > > } That is curious, indeed! > Using $@ in these expansions is wrong. You do not want to forward an > argument list, but you want to construct a command line. $* is correct > here. Then you can remove the single-quotes at the invocation, like so: > > test_rebase_same_head success > test_rebase_same_head success --onto B B > > Function test_rebase() could be done in the same way, but the first > argument, expected, still needs quotes at the call site, of course. That's a good idea, let me run with it. Ciao, Dscho
Hi, On Fri, 5 Apr 2019, Johannes Schindelin wrote: > On Fri, 5 Apr 2019, Johannes Sixt wrote: > > > Am 05.04.19 um 19:25 schrieb Denton Liu: > > > On Fri, Apr 05, 2019 at 04:55:37PM +0200, Johannes Schindelin wrote: > > >> On Mon, 1 Apr 2019, Denton Liu wrote: > > >>> +test_rebase() { > > >>> + expected="$1" && > > >>> + shift && > > >>> + test_expect_success "git rebase $@" " > > >>> + git checkout master && > > >>> + git reset --hard E && > > >>> + git checkout side && > > >>> + git reset --hard G && > > >>> + git rebase $@ && > > > Using $@ in these expansions is wrong. You do not want to forward an > > argument list, but you want to construct a command line. $* is correct > > here. Then you can remove the single-quotes at the invocation, like so: > > > > test_rebase_same_head success > > test_rebase_same_head success --onto B B > > > > Function test_rebase() could be done in the same way, but the first > > argument, expected, still needs quotes at the call site, of course. > > That's a good idea, let me run with it. Indeed, this patch fixes it (see e.g. https://dev.azure.com/Git-for-Windows/git/_build/results?buildId=34370): -- snipsnap -- Subject: [PATCH] fixup??? t3431: add rebase --fork-point tests Try to fix the Mac build, which currently fails thusly: ++ git reset --hard G HEAD is now at d8775ba G ++ git rebase $'\177' fatal: invalid upstream '?' error: last command exited with $?=128 Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> --- t/t3431-rebase-fork-point.sh | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/t/t3431-rebase-fork-point.sh b/t/t3431-rebase-fork-point.sh index 4607e65de6..daa0c77467 100755 --- a/t/t3431-rebase-fork-point.sh +++ b/t/t3431-rebase-fork-point.sh @@ -29,29 +29,29 @@ test_expect_success setup ' test_rebase() { expected="$1" && shift && - test_expect_success "git rebase $@" " + test_expect_success "git rebase $*" " git checkout master && git reset --hard E && git checkout side && git reset --hard G && - git rebase $@ && + eval git rebase $* && test_write_lines $expected >expect && git log --pretty=%s >actual && test_cmp expect actual " } -test_rebase 'G F E D B A' '' -test_rebase 'G F D B A' '--onto D' -test_rebase 'G F B A' '--keep-base' -test_rebase 'G F C E D B A' '--no-fork-point' -test_rebase 'G F C D B A' '--no-fork-point --onto D' -test_rebase 'G F C B A' '--no-fork-point --keep-base' -test_rebase 'G F E D B A' '--fork-point refs/heads/master' -test_rebase 'G F D B A' '--fork-point --onto D refs/heads/master' -test_rebase 'G F B A' '--fork-point --keep-base refs/heads/master' -test_rebase 'G F C E D B A' 'refs/heads/master' -test_rebase 'G F C D B A' '--onto D refs/heads/master' -test_rebase 'G F C B A' '--keep-base refs/heads/master' +test_rebase 'G F E D B A' +test_rebase 'G F D B A' --onto D +test_rebase 'G F B A' --keep-base +test_rebase 'G F C E D B A' --no-fork-point +test_rebase 'G F C D B A' --no-fork-point --onto D +test_rebase 'G F C B A' --no-fork-point --keep-base +test_rebase 'G F E D B A' --fork-point refs/heads/master +test_rebase 'G F D B A' --fork-point --onto D refs/heads/master +test_rebase 'G F B A' --fork-point --keep-base refs/heads/master +test_rebase 'G F C E D B A' refs/heads/master +test_rebase 'G F C D B A' --onto D refs/heads/master +test_rebase 'G F C B A' --keep-base refs/heads/master test_done -- 2.21.0.windows.1.152.g5895f170b6
On Fri, Apr 05, 2019 at 10:19:59PM +0200, Johannes Schindelin wrote: > Hi, > > On Fri, 5 Apr 2019, Johannes Schindelin wrote: > > > On Fri, 5 Apr 2019, Johannes Sixt wrote: > > > > > Am 05.04.19 um 19:25 schrieb Denton Liu: > > > > On Fri, Apr 05, 2019 at 04:55:37PM +0200, Johannes Schindelin wrote: > > > >> On Mon, 1 Apr 2019, Denton Liu wrote: > > > >>> +test_rebase() { > > > >>> + expected="$1" && > > > >>> + shift && > > > >>> + test_expect_success "git rebase $@" " > > > >>> + git checkout master && > > > >>> + git reset --hard E && > > > >>> + git checkout side && > > > >>> + git reset --hard G && > > > >>> + git rebase $@ && > > > > > Using $@ in these expansions is wrong. You do not want to forward an > > > argument list, but you want to construct a command line. $* is correct > > > here. Then you can remove the single-quotes at the invocation, like so: > > > > > > test_rebase_same_head success > > > test_rebase_same_head success --onto B B > > > > > > Function test_rebase() could be done in the same way, but the first > > > argument, expected, still needs quotes at the call site, of course. > > > > That's a good idea, let me run with it. > > Indeed, this patch fixes it (see e.g. > https://dev.azure.com/Git-for-Windows/git/_build/results?buildId=34370): > > -- snipsnap -- > Subject: [PATCH] fixup??? t3431: add rebase --fork-point tests > > Try to fix the Mac build, which currently fails thusly: > > ++ git reset --hard G > HEAD is now at d8775ba G > ++ git rebase $'\177' > fatal: invalid upstream '?' > error: last command exited with $?=128 > > Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> > --- > t/t3431-rebase-fork-point.sh | 28 ++++++++++++++-------------- > 1 file changed, 14 insertions(+), 14 deletions(-) > > diff --git a/t/t3431-rebase-fork-point.sh b/t/t3431-rebase-fork-point.sh > index 4607e65de6..daa0c77467 100755 > --- a/t/t3431-rebase-fork-point.sh > +++ b/t/t3431-rebase-fork-point.sh > @@ -29,29 +29,29 @@ test_expect_success setup ' > test_rebase() { > expected="$1" && > shift && > - test_expect_success "git rebase $@" " > + test_expect_success "git rebase $*" " > git checkout master && > git reset --hard E && > git checkout side && > git reset --hard G && > - git rebase $@ && > + eval git rebase $* && The 'eval' is not necessary, all Bash versions down to v3.0 work without it. > test_write_lines $expected >expect && > git log --pretty=%s >actual && > test_cmp expect actual > " > } > > -test_rebase 'G F E D B A' '' > -test_rebase 'G F D B A' '--onto D' > -test_rebase 'G F B A' '--keep-base' > -test_rebase 'G F C E D B A' '--no-fork-point' > -test_rebase 'G F C D B A' '--no-fork-point --onto D' > -test_rebase 'G F C B A' '--no-fork-point --keep-base' > -test_rebase 'G F E D B A' '--fork-point refs/heads/master' > -test_rebase 'G F D B A' '--fork-point --onto D refs/heads/master' > -test_rebase 'G F B A' '--fork-point --keep-base refs/heads/master' > -test_rebase 'G F C E D B A' 'refs/heads/master' > -test_rebase 'G F C D B A' '--onto D refs/heads/master' > -test_rebase 'G F C B A' '--keep-base refs/heads/master' > +test_rebase 'G F E D B A' > +test_rebase 'G F D B A' --onto D > +test_rebase 'G F B A' --keep-base > +test_rebase 'G F C E D B A' --no-fork-point > +test_rebase 'G F C D B A' --no-fork-point --onto D > +test_rebase 'G F C B A' --no-fork-point --keep-base > +test_rebase 'G F E D B A' --fork-point refs/heads/master > +test_rebase 'G F D B A' --fork-point --onto D refs/heads/master > +test_rebase 'G F B A' --fork-point --keep-base refs/heads/master > +test_rebase 'G F C E D B A' refs/heads/master > +test_rebase 'G F C D B A' --onto D refs/heads/master > +test_rebase 'G F C B A' --keep-base refs/heads/master > > test_done > -- > 2.21.0.windows.1.152.g5895f170b6 >
SZEDER Gábor <szeder.dev@gmail.com> writes: >> + test_expect_success "git rebase $@" " >> +... >> + git rebase $@ && >> +... >> + " >> +} >> + >> +test_rebase 'G F E D B A' '' > > It appears that this last empty argument triggers some bug in Bash > v4.2 and older (and on macOS such an old Bash is the default /bin/sh), > as it turns that empty argument into something else, which in turn > fails the test with: > > <...> > ++ git rebase $'\177' > fatal: invalid upstream '?' > error: last command exited with $?=128 > not ok 2 - git rebase > > https://travis-ci.org/git/git/jobs/516070862#L2276 Yeah, every time I see $@ that appears in any form other than "$@" (i.e. within a pair of double-quotes without anything else in it), it makes me feel very uneasy. Shouldn't the argument to the above "rebase" be spelled $* instead? I somehow do not think use of $@ there is buying us anything. Of course, if we were really passing an arg with $IFS character in it, we could probably eval 'git rebase "$@"' it (with appropriate quoting to adjust for the surrounding quote pair). > Omitting that empty argument avoids this issue, and the test still > checks what it was supposed to. > >> +test_rebase 'G F D B A' '--onto D' >> +test_rebase 'G F C E D B A' '--no-fork-point' >> +test_rebase 'G F C D B A' '--no-fork-point --onto D' >> +test_rebase 'G F E D B A' '--fork-point refs/heads/master' >> +test_rebase 'G F D B A' '--fork-point --onto D refs/heads/master' >> +test_rebase 'G F C E D B A' 'refs/heads/master' >> +test_rebase 'G F C D B A' '--onto D refs/heads/master' >> + >> +test_done >> -- >> 2.21.0.695.gaf8658f249 >>
diff --git a/t/t3431-rebase-fork-point.sh b/t/t3431-rebase-fork-point.sh new file mode 100755 index 0000000000..8e2483b73e --- /dev/null +++ b/t/t3431-rebase-fork-point.sh @@ -0,0 +1,53 @@ +#!/bin/sh +# +# Copyright (c) 2019 Denton Liu +# + +test_description='git rebase --fork-point test' + +. ./test-lib.sh + +# A---B---D---E (master) +# \ +# C*---F---G (side) +# +# C was formerly part of master but is side out +# +test_expect_success setup ' + test_commit A && + test_commit B && + test_commit C && + git branch -t side && + git reset --hard HEAD^ && + test_commit D && + test_commit E && + git checkout side && + test_commit F && + test_commit G +' + +test_rebase() { + expected="$1" && + shift && + test_expect_success "git rebase $@" " + git checkout master && + git reset --hard E && + git checkout side && + git reset --hard G && + git rebase $@ && + test_write_lines $expected >expect && + git log --pretty=%s >actual && + test_cmp expect actual + " +} + +test_rebase 'G F E D B A' '' +test_rebase 'G F D B A' '--onto D' +test_rebase 'G F C E D B A' '--no-fork-point' +test_rebase 'G F C D B A' '--no-fork-point --onto D' +test_rebase 'G F E D B A' '--fork-point refs/heads/master' +test_rebase 'G F D B A' '--fork-point --onto D refs/heads/master' +test_rebase 'G F C E D B A' 'refs/heads/master' +test_rebase 'G F C D B A' '--onto D refs/heads/master' + +test_done
Signed-off-by: Denton Liu <liu.denton@gmail.com> --- t/t3431-rebase-fork-point.sh | 53 ++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100755 t/t3431-rebase-fork-point.sh