2007-09-01 11:25:27 +04:00
|
|
|
#!/bin/sh
|
|
|
|
|
|
|
|
test_description='messages from rebase operation'
|
|
|
|
|
|
|
|
. ./test-lib.sh
|
|
|
|
|
2013-06-07 10:11:42 +04:00
|
|
|
test_expect_success 'setup' '
|
|
|
|
test_commit O fileO &&
|
|
|
|
test_commit X fileX &&
|
|
|
|
test_commit A fileA &&
|
|
|
|
test_commit B fileB &&
|
|
|
|
test_commit Y fileY &&
|
2007-09-01 11:25:27 +04:00
|
|
|
|
2013-06-07 10:11:42 +04:00
|
|
|
git checkout -b topic O &&
|
|
|
|
git cherry-pick A B &&
|
|
|
|
test_commit Z fileZ &&
|
2009-03-02 01:11:38 +03:00
|
|
|
git tag start
|
2007-09-01 11:25:27 +04:00
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'rebase -m' '
|
|
|
|
git rebase -m master >report &&
|
rebase: implement --merge via the interactive machinery
As part of an ongoing effort to make rebase have more uniform behavior,
modify the merge backend to behave like the interactive one, by
re-implementing it on top of the latter.
Interactive rebases are implemented in terms of cherry-pick rather than
the merge-recursive builtin, but cherry-pick also calls into the
recursive merge machinery by default and can accept special merge
strategies and/or special strategy options. As such, there really is
not any need for having both git-rebase--merge and
git-rebase--interactive anymore. Delete git-rebase--merge.sh and
instead implement it in builtin/rebase.c.
This results in a few deliberate but small user-visible changes:
* The progress output is modified (see t3406 and t3420 for examples)
* A few known test failures are now fixed (see t3421)
* bash-prompt during a rebase --merge is now REBASE-i instead of
REBASE-m. Reason: The prompt is a reflection of the backend in use;
this allows users to report an issue to the git mailing list with
the appropriate backend information, and allows advanced users to
know where to search for relevant control files. (see t9903)
testcase modification notes:
t3406: --interactive and --merge had slightly different progress output
while running; adjust a test to match the new expectation
t3420: these test precise output while running, but rebase--am,
rebase--merge, and rebase--interactive all were built on very
different commands (am, merge-recursive, cherry-pick), so the
tests expected different output for each type. Now we expect
--merge and --interactive to have the same output.
t3421: --interactive fixes some bugs in --merge! Wahoo!
t9903: --merge uses the interactive backend so the prompt expected is
now REBASE-i.
Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-12-11 19:11:39 +03:00
|
|
|
>expect &&
|
2007-09-01 11:25:27 +04:00
|
|
|
sed -n -e "/^Already applied: /p" \
|
|
|
|
-e "/^Committed: /p" report >actual &&
|
2008-03-13 00:36:36 +03:00
|
|
|
test_cmp expect actual
|
2007-09-01 11:25:27 +04:00
|
|
|
'
|
|
|
|
|
2013-06-07 10:11:43 +04:00
|
|
|
test_expect_success 'rebase against master twice' '
|
|
|
|
git rebase master >out &&
|
|
|
|
test_i18ngrep "Current branch topic is up to date" out
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'rebase against master twice with --force' '
|
|
|
|
git rebase --force-rebase master >out &&
|
|
|
|
test_i18ngrep "Current branch topic is up to date, rebase forced" out
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'rebase against master twice from another branch' '
|
|
|
|
git checkout topic^ &&
|
|
|
|
git rebase master topic >out &&
|
|
|
|
test_i18ngrep "Current branch topic is up to date" out
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'rebase fast-forward to master' '
|
|
|
|
git checkout topic^ &&
|
|
|
|
git rebase topic >out &&
|
|
|
|
test_i18ngrep "Fast-forwarded HEAD to topic" out
|
|
|
|
'
|
|
|
|
|
2009-03-02 01:11:38 +03:00
|
|
|
test_expect_success 'rebase --stat' '
|
2010-10-31 04:46:54 +03:00
|
|
|
git reset --hard start &&
|
2009-03-02 01:11:38 +03:00
|
|
|
git rebase --stat master >diffstat.txt &&
|
|
|
|
grep "^ fileX | *1 +$" diffstat.txt
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'rebase w/config rebase.stat' '
|
2010-10-31 04:46:54 +03:00
|
|
|
git reset --hard start &&
|
2009-03-02 01:11:38 +03:00
|
|
|
git config rebase.stat true &&
|
|
|
|
git rebase master >diffstat.txt &&
|
|
|
|
grep "^ fileX | *1 +$" diffstat.txt
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'rebase -n overrides config rebase.stat config' '
|
2010-10-31 04:46:54 +03:00
|
|
|
git reset --hard start &&
|
2009-03-02 01:11:38 +03:00
|
|
|
git config rebase.stat true &&
|
|
|
|
git rebase -n master >diffstat.txt &&
|
|
|
|
! grep "^ fileX | *1 +$" diffstat.txt
|
|
|
|
'
|
|
|
|
|
2012-07-25 18:53:08 +04:00
|
|
|
# Output to stderr:
|
|
|
|
#
|
|
|
|
# "Does not point to a valid commit: invalid-ref"
|
|
|
|
#
|
|
|
|
# NEEDSWORK: This "grep" is fine in real non-C locales, but
|
i18n: make GETTEXT_POISON a runtime option
Change the GETTEXT_POISON compile-time + runtime GIT_GETTEXT_POISON
test parameter to only be a GIT_TEST_GETTEXT_POISON=<non-empty?>
runtime parameter, to be consistent with other parameters documented
in "Running tests with special setups" in t/README.
When I added GETTEXT_POISON in bb946bba76 ("i18n: add GETTEXT_POISON
to simulate unfriendly translator", 2011-02-22) I was concerned with
ensuring that the _() function would get constant folded if NO_GETTEXT
was defined, and likewise that GETTEXT_POISON would be compiled out
unless it was defined.
But as the benchmark in my [1] shows doing a one-off runtime
getenv("GIT_TEST_[...]") is trivial, and since GETTEXT_POISON was
originally added the GIT_TEST_* env variables have become the common
idiom for turning on special test setups.
So change GETTEXT_POISON to work the same way. Now the
GETTEXT_POISON=YesPlease compile-time option is gone, and running the
tests with GIT_TEST_GETTEXT_POISON=[YesPlease|] can be toggled on/off
without recompiling.
This allows for conditionally amending tests to test with/without
poison, similar to what 859fdc0c3c ("commit-graph: define
GIT_TEST_COMMIT_GRAPH", 2018-08-29) did for GIT_TEST_COMMIT_GRAPH. Do
some of that, now we e.g. always run the t0205-gettext-poison.sh test.
I did enough there to remove the GETTEXT_POISON prerequisite, but its
inverse C_LOCALE_OUTPUT is still around, and surely some tests using
it can be converted to e.g. always set GIT_TEST_GETTEXT_POISON=.
Notes on the implementation:
* We still compile a dedicated GETTEXT_POISON build in Travis
CI. Perhaps this should be revisited and integrated into the
"linux-gcc" build, see ae59a4e44f ("travis: run tests with
GIT_TEST_SPLIT_INDEX", 2018-01-07) for prior art in that area. Then
again maybe not, see [2].
* We now skip a test in t0000-basic.sh under
GIT_TEST_GETTEXT_POISON=YesPlease that wasn't skipped before. This
test relies on C locale output, but due to an edge case in how the
previous implementation of GETTEXT_POISON worked (reading it from
GIT-BUILD-OPTIONS) wasn't enabling poison correctly. Now it does,
and needs to be skipped.
* The getenv() function is not reentrant, so out of paranoia about
code of the form:
printf(_("%s"), getenv("some-env"));
call use_gettext_poison() in our early setup in git_setup_gettext()
so we populate the "poison_requested" variable in a codepath that's
won't suffer from that race condition.
* We error out in the Makefile if you're still saying
GETTEXT_POISON=YesPlease to prompt users to change their
invocation.
* We should not print out poisoned messages during the test
initialization itself to keep it more readable, so the test library
hides the variable if set in $GIT_TEST_GETTEXT_POISON_ORIG during
setup. See [3].
See also [4] for more on the motivation behind this patch, and the
history of the GETTEXT_POISON facility.
1. https://public-inbox.org/git/871s8gd32p.fsf@evledraar.gmail.com/
2. https://public-inbox.org/git/20181102163725.GY30222@szeder.dev/
3. https://public-inbox.org/git/20181022202241.18629-2-szeder.dev@gmail.com/
4. https://public-inbox.org/git/878t2pd6yu.fsf@evledraar.gmail.com/
Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-11-09 00:15:29 +03:00
|
|
|
# GIT_TEST_GETTEXT_POISON poisons the refname along with the enclosing
|
2012-07-25 18:53:08 +04:00
|
|
|
# error message.
|
2012-05-30 20:39:42 +04:00
|
|
|
test_expect_success 'rebase --onto outputs the invalid ref' '
|
|
|
|
test_must_fail git rebase --onto invalid-ref HEAD HEAD 2>err &&
|
2012-07-25 18:53:08 +04:00
|
|
|
test_i18ngrep "invalid-ref" err
|
2012-05-30 20:39:42 +04:00
|
|
|
'
|
|
|
|
|
2018-11-14 19:25:31 +03:00
|
|
|
test_expect_success 'error out early upon -C<n> or --whitespace=<bad>' '
|
|
|
|
test_must_fail git rebase -Cnot-a-number HEAD 2>err &&
|
|
|
|
test_i18ngrep "numerical value" err &&
|
|
|
|
test_must_fail git rebase --whitespace=bad HEAD 2>err &&
|
|
|
|
test_i18ngrep "Invalid whitespace option" err
|
|
|
|
'
|
|
|
|
|
2018-11-29 22:09:21 +03:00
|
|
|
test_expect_success 'GIT_REFLOG_ACTION' '
|
|
|
|
git checkout start &&
|
|
|
|
test_commit reflog-onto &&
|
|
|
|
git checkout -b reflog-topic start &&
|
|
|
|
test_commit reflog-to-rebase &&
|
|
|
|
|
|
|
|
git rebase reflog-onto &&
|
|
|
|
git log -g --format=%gs -3 >actual &&
|
|
|
|
cat >expect <<-\EOF &&
|
|
|
|
rebase finished: returning to refs/heads/reflog-topic
|
|
|
|
rebase: reflog-to-rebase
|
|
|
|
rebase: checkout reflog-onto
|
|
|
|
EOF
|
|
|
|
test_cmp expect actual &&
|
|
|
|
|
|
|
|
git checkout -b reflog-prefix reflog-to-rebase &&
|
|
|
|
GIT_REFLOG_ACTION=change-the-reflog git rebase reflog-onto &&
|
|
|
|
git log -g --format=%gs -3 >actual &&
|
|
|
|
cat >expect <<-\EOF &&
|
|
|
|
rebase finished: returning to refs/heads/reflog-prefix
|
|
|
|
change-the-reflog: reflog-to-rebase
|
|
|
|
change-the-reflog: checkout reflog-onto
|
|
|
|
EOF
|
|
|
|
test_cmp expect actual
|
|
|
|
'
|
|
|
|
|
2018-11-29 16:01:54 +03:00
|
|
|
test_expect_success 'rebase -i onto unrelated history' '
|
|
|
|
git init unrelated &&
|
|
|
|
test_commit -C unrelated 1 &&
|
|
|
|
git -C unrelated remote add -f origin "$PWD" &&
|
|
|
|
git -C unrelated branch --set-upstream-to=origin/master &&
|
|
|
|
git -C unrelated -c core.editor=true rebase -i -v --stat >actual &&
|
|
|
|
test_i18ngrep "Changes to " actual &&
|
|
|
|
test_i18ngrep "5 files changed" actual
|
|
|
|
'
|
|
|
|
|
2007-09-01 11:25:27 +04:00
|
|
|
test_done
|