2007-09-01 07:25:27 +00:00
|
|
|
#!/bin/sh
|
|
|
|
|
|
|
|
test_description='messages from rebase operation'
|
|
|
|
|
|
|
|
. ./test-lib.sh
|
|
|
|
|
2013-06-07 06:11:42 +00: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 07:25:27 +00:00
|
|
|
|
2013-06-07 06:11:42 +00:00
|
|
|
git checkout -b topic O &&
|
|
|
|
git cherry-pick A B &&
|
|
|
|
test_commit Z fileZ &&
|
2009-03-01 22:11:38 +00:00
|
|
|
git tag start
|
2007-09-01 07:25:27 +00:00
|
|
|
'
|
|
|
|
|
|
|
|
cat >expect <<\EOF
|
|
|
|
Already applied: 0001 A
|
|
|
|
Already applied: 0002 B
|
|
|
|
Committed: 0003 Z
|
|
|
|
EOF
|
|
|
|
|
|
|
|
test_expect_success 'rebase -m' '
|
|
|
|
git rebase -m master >report &&
|
|
|
|
sed -n -e "/^Already applied: /p" \
|
|
|
|
-e "/^Committed: /p" report >actual &&
|
2008-03-12 21:36:36 +00:00
|
|
|
test_cmp expect actual
|
2007-09-01 07:25:27 +00:00
|
|
|
'
|
|
|
|
|
2013-06-07 06:11:43 +00: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-01 22:11:38 +00:00
|
|
|
test_expect_success 'rebase --stat' '
|
2010-10-31 01:46:54 +00:00
|
|
|
git reset --hard start &&
|
2009-03-01 22:11:38 +00:00
|
|
|
git rebase --stat master >diffstat.txt &&
|
|
|
|
grep "^ fileX | *1 +$" diffstat.txt
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'rebase w/config rebase.stat' '
|
2010-10-31 01:46:54 +00:00
|
|
|
git reset --hard start &&
|
2009-03-01 22:11:38 +00: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 01:46:54 +00:00
|
|
|
git reset --hard start &&
|
2009-03-01 22:11:38 +00:00
|
|
|
git config rebase.stat true &&
|
|
|
|
git rebase -n master >diffstat.txt &&
|
|
|
|
! grep "^ fileX | *1 +$" diffstat.txt
|
|
|
|
'
|
|
|
|
|
2012-07-25 14:53:08 +00: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-08 21:15:29 +00:00
|
|
|
# GIT_TEST_GETTEXT_POISON poisons the refname along with the enclosing
|
2012-07-25 14:53:08 +00:00
|
|
|
# error message.
|
2012-05-30 16:39:42 +00: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 14:53:08 +00:00
|
|
|
test_i18ngrep "invalid-ref" err
|
2012-05-30 16:39:42 +00:00
|
|
|
'
|
|
|
|
|
2018-11-14 16:25:31 +00: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 19:09:21 +00: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 13:01:54 +00: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 07:25:27 +00:00
|
|
|
test_done
|