Support git pull --rebase=i <remote> <branch>
cover Support git pull --rebase=i <remote> <branch>
The patch [https://github.com/git-for-windows/git/commit/4aa8b8c82] that introduced support for pull --rebase=<type> into the Git for Windows project still allowed the very convenient abbreviation
git pull --rebase=i
which was later lost when it was ported to the builtin git pull, and it was not introduced before the patch eventually made it into Git as f5eb87b98dd (pull: allow interactive rebase with --rebase=interactive, 2016-01-13).
However, it is really a useful short hand for the occasional rebasing pull on branches that do not usually want to be rebased.
So let's reintroduce this convenience, at long last.
Johannes Schindelin (1):
pull --rebase=<type>: allow single-letter abbreviations for the type
builtin/pull.c | 6 +++--- t/t5520-pull.sh | 12 ++++++++++++ 2 files changed, 15 insertions(+), 3 deletions(-)
base-commit: 1d89318c48d233d52f1db230cf622935ac3c69fa
Published-As: https://github.com/gitgitgadget/git/releases/tags/pr-14%2Fdscho%2Fpull-rebase-i-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-14/dscho/pull-rebase-i-v1
Pull-Request: https://github.com/gitgitgadget/git/pull/14
Signature · 1 line
gitgitgadget
PATCH 1/1 pull --rebase=<type>: allow single-letter abbreviations for the type
From: Johannes Schindelin <[email protected]>
Git for Windows' original 4aa8b8c8283 (Teach 'git pull' to handle --rebase=interactive, 2011-10-21) had support for the very convenient abbreviation
git pull --rebase=i
which was later lost when it was ported to the builtin git pull, and it was not introduced before the patch eventually made it into Git as f5eb87b98dd (pull: allow interactive rebase with --rebase=interactive, 2016-01-13).
However, it is *really* a useful short hand for the occasional rebasing pull on branches that do not usually want to be rebased.
So let's reintroduce this convenience, at long last.
--- builtin/pull.c | 6 +++--- t/t5520-pull.sh | 12 ++++++++++++ 2 files changed, 15 insertions(+), 3 deletions(-)
builtin/pull.c +3 -3
@@ -48,11 +48,11 @@ static enum rebase_type parse_config_rebase(const char *key, const char *value,return REBASE_FALSE ; else if (v > 0) return REBASE_TRUE; - else if (!strcmp(value, "preserve")) + else if (!strcmp(value, "preserve") || !strcmp(value, "p")) return REBASE_PRESERVE; - else if (!strcmp(value, "merges")) + else if (!strcmp(value, "merges") || !strcmp(value, "m")) return REBASE_MERGES; - else if (!strcmp(value, "interactive")) + else if (!strcmp(value, "interactive") || !strcmp(value, "i")) return REBASE_INTERACTIVE; if (fatal)
t/t5520-pull.sh +12 -0
@@ -475,10 +475,22 @@ test_expect_success 'pull.rebase=interactive' ' false EOF test_set_editor "$TRASH_DIRECTORY/fake-editor" && + test_when_finished "test_might_fail git rebase --abort" && test_must_fail git pull --rebase=interactive . copy && test "I was here" = "$(cat fake.out)" ' +test_expect_success 'pull --rebase=i' ' + write_script "$TRASH_DIRECTORY/fake-editor" <<-\EOF && + echo I was here, too >fake.out && + false + EOF + test_set_editor "$TRASH_DIRECTORY/fake-editor" && + test_when_finished "test_might_fail git rebase --abort" && + test_must_fail git pull --rebase=i . copy && + test "I was here, too" = "$(cat fake.out)" +' + test_expect_success 'pull.rebase=invalid fails' ' git reset --hard before-preserve-rebase && test_config pull.rebase invalid &&
Signature · 1 line
gitgitgadget
Re: [PATCH 1/1] pull --rebase=<type>: allow single-letter abbreviations for the type
"Johannes Schindelin via GitGitGadget" <[email protected]>
Quoted 13 lines · writes:
From: Johannes Schindelin <[email protected]>
Git for Windows' original
4aa8b8c8283(Teach 'git pull' to handle --rebase=interactive, 2011-10-21) had support for the very convenient abbreviationgit pull --rebase=iwhich was later lost when it was ported to the builtin
git pull, and it was not introduced before the patch eventually made it into Git asf5eb87b98dd(pull: allow interactive rebase with --rebase=interactive, 2016-01-13).
Quoted 7 lines
However, it is *really* a useful short hand for the occasional rebasing pull on branches that do not usually want to be rebased.
So let's reintroduce this convenience, at long last.
Signed-off-by Johannes Schindelin <[email protected]>---
Makes sense, whether this patch is adding back what in the past existed only in the Windows port but lost, and whether the lossage was long time ago or in just a few releases go, or it is adding a complete new feature for that matter. This looks like a good short-hand.
Will queue.
Re: [PATCH 1/1] pull --rebase=<type>: allow single-letter abbreviations for the type
Hi Junio,
Quoted 24 lines · Junio C Hamano
"Johannes Schindelin via GitGitGadget" <[email protected]>
Quoted 13 lines · writes:
From: Johannes Schindelin <[email protected]>
Git for Windows' original
4aa8b8c8283(Teach 'git pull' to handle --rebase=interactive, 2011-10-21) had support for the very convenient abbreviationgit pull --rebase=iwhich was later lost when it was ported to the builtin
git pull, and it was not introduced before the patch eventually made it into Git asf5eb87b98dd(pull: allow interactive rebase with --rebase=interactive, 2016-01-13).Quoted 7 lines
However, it is *really* a useful short hand for the occasional rebasing pull on branches that do not usually want to be rebased.
So let's reintroduce this convenience, at long last.
Signed-off-by Johannes Schindelin <[email protected]>---
Quoted 7 lines
Makes sense, whether this patch is adding back what in the past existed only in the Windows port but lost, and whether the lossage was long time ago or in just a few releases go, or it is adding a complete new feature for that matter. This looks like a good short-hand.
Will queue.
Thanks!
Dscho
Re: [PATCH 1/1] pull --rebase=<type>: allow single-letter abbreviations for the type
In reply to Johannes Schindelin via GitGitGadgetQuoted 13 lines · Johannes Schindelin via GitGitGadget
From: Johannes Schindelin <[email protected]>
Git for Windows' original
4aa8b8c8283(Teach 'git pull' to handle --rebase=interactive, 2011-10-21) had support for the very convenient abbreviationgit pull --rebase=iwhich was later lost when it was ported to the builtin
git pull, and it was not introduced before the patch eventually made it into Git asf5eb87b98dd(pull: allow interactive rebase with --rebase=interactive, 2016-01-13).
Quoted 4 lines
However, it is *really* a useful short hand for the occasional rebasing pull on branches that do not usually want to be rebased.
So let's reintroduce this convenience, at long last.
I agree with the shorthand, but I really think this should be documented. The amount of people who'll discover this by reading the code is much smaller than those who might discover it via the docs.
Quoted 13 lines
Signed-off-by Johannes Schindelin <[email protected]>--- builtin/pull.c | 6 +++--- t/t5520-pull.sh | 12 ++++++++++++ 2 files changed, 15 insertions(+), 3 deletions(-)builtin/pull.c +0
-0@@ -48,11 +48,11 @@ static enum rebase_type parse_config_rebase(const char *key, const char *value,return REBASE_FALSE ; else if (v > 0)
builtin/pull.c static enum rebase_type parse_config_rebase(const char *key, const char *value, · line 56
Quoted 10 lines
builtin/pull.c +3
-3return REBASE_TRUE ; - else if (!strcmp(value, "preserve")) + else if (!strcmp(value, "preserve") || !strcmp(value, "p"))return REBASE_PRESERVE ; - else if (!strcmp(value, "merges")) + else if (!strcmp(value, "merges") || !strcmp(value, "m"))return REBASE_MERGES ; - else if (!strcmp(value, "interactive")) + else if (!strcmp(value, "interactive") || !strcmp(value, "i"))return REBASE_INTERACTIVE ;
Here 3 special cases are added...
Quoted 18 lines
builtin/pull.c +0
-0if (fatal)t/t5520-pull.sh +5
-0@@ -475,10 +475,22 @@ test_expect_success 'pull.rebase=interactive' ' false EOF test_set_editor "$TRASH_DIRECTORY/fake-editor" && + test_when_finished "test_might_fail git rebase --abort" && test_must_fail git pull --rebase=interactive . copy && test "I was here" = "$(cat fake.out)" ' +test_expect_success 'pull --rebase=i' ' + write_script "$TRASH_DIRECTORY/fake-editor" <<-\EOF && + echo I was here, too >fake.out && + false
t/t5520-pull.sh test_expect_success 'pull.rebase=interactive' ' · line 496
Quoted 10 lines
t/t5520-pull.sh +7
-0+ EOF + test_set_editor "$TRASH_DIRECTORY/fake-editor" && + test_when_finished "test_might_fail git rebase --abort" && + test_must_fail git pull --rebase=i . copy && + test "I was here, too" = "$(cat fake.out)" +' + test_expect_success 'pull.rebase=invalid fails' ' git reset --hard before-preserve-rebase && test_config pull.rebase invalid &&
...but this test is only for 1/3. I haven't run this, but it looks like the tests will still pass if we remove --rebase=p and --rebase=m.
Re: [PATCH 1/1] pull --rebase=<type>: allow single-letter abbreviations for the type
Quoted 12 lines · Ævar Arnfjörð Bjarmason
builtin/pull.c static enum rebase_type parse_config_rebase(const char *key, const char *value, · line 56
Quoted 9 lines
builtin/pull.c +3
-3-else if (!strcmp (value,"preserve" )) +else if (!strcmp (value,"preserve" ) || !strcmp (value,"p" ))return REBASE_PRESERVE ; -else if (!strcmp (value,"merges" )) +else if (!strcmp (value,"merges" ) || !strcmp (value,"m" ))return REBASE_MERGES ; -else if (!strcmp (value,"interactive" )) +else if (!strcmp (value,"interactive" ) || !strcmp (value,"i" ))return REBASE_INTERACTIVE ;Here 3 special cases are added...
...
Quoted 10 lines
t/t5520-pull.sh test_expect_success 'pull.rebase=interactive' ' · line 496
Quoted 7 lines
t/t5520-pull.sh +3
-0+test_expect_success 'pull --rebase=i' ' +' + test_expect_success 'pull.rebase=invalid fails' ' git reset --hard before-preserve-rebase && test_config pull.rebase invalid &&...but this test is only for 1/3. I haven't run this, but it looks like the tests will still pass if we remove --rebase=p and --rebase=m.
Good eyes. It's not like that parsing these three is implemented with one thing; in other words, it is not hard to break one without breaking the other two.
Re: [PATCH 1/1] pull --rebase=<type>: allow single-letter abbreviations for the type
Quoted 25 lines · Junio C Hamano
Quoted 12 lines · Ævar Arnfjörð Bjarmason
builtin/pull.c static enum rebase_type parse_config_rebase(const char *key, const char *value, · line 56
Quoted 9 lines
builtin/pull.c +3
-3-else if (!strcmp (value,"preserve" )) +else if (!strcmp (value,"preserve" ) || !strcmp (value,"p" ))return REBASE_PRESERVE ; -else if (!strcmp (value,"merges" )) +else if (!strcmp (value,"merges" ) || !strcmp (value,"m" ))return REBASE_MERGES ; -else if (!strcmp (value,"interactive" )) +else if (!strcmp (value,"interactive" ) || !strcmp (value,"i" ))return REBASE_INTERACTIVE ;Here 3 special cases are added...
...Quoted 10 lines
t/t5520-pull.sh test_expect_success 'pull.rebase=interactive' ' · line 496
Quoted 7 lines
t/t5520-pull.sh +3
-0+test_expect_success 'pull --rebase=i' ' +' + test_expect_success 'pull.rebase=invalid fails' ' git reset --hard before-preserve-rebase && test_config pull.rebase invalid &&...but this test is only for 1/3. I haven't run this, but it looks like the tests will still pass if we remove --rebase=p and --rebase=m.
Quoted 3 lines
Good eyes. It's not like that parsing these three is implemented with one thing; in other words, it is not hard to break one without breaking the other two.
Having said that, that can be done as a follow-up "oops, the original was sloppy" patch. It's not as bad compared to "oops, the original was totally borked and here is a fix", so I am OK with that ;-)