mirror of
https://github.com/git/git
synced 2024-08-25 02:35:46 +00:00
![Jeff King](/assets/img/avatar_default.png)
We have a small helper function called "verbose", with the idea that you can write: verbose foo to get a message to stderr when the "foo" command fails, even if it does not produce any output itself. This goes back to8ad1652418
(t5304: use helper to report failure of "test foo = bar", 2014-10-10). It does work, but overall it has not been a big success for two reasons: 1. Test writers have to remember to put it there (and the resulting test code is longer as a result). 2. It doesn't handle the opposite case (we expect "foo" to fail, but it succeeds), leading to inconsistencies in tests (which you can see in many hunks of this patch, e.g. ones involving "has_cr"). Most importantly, we addeda136f6d8ff
(test-lib.sh: support -x option for shell-tracing, 2014-10-10) at the same time, and it does roughly the same thing. The output is not quite as succinct as "verbose", and you have to watch out for stray shell-traces ending up in stderr. But it solves both of the problems above, and has clearly become the preferred tool. Let's consider the "verbose" function a failed experiment and remove the last few callers (which are all many years old, and have been dwindling as we remove them from scripts we touch for other reasons). It will be one less thing for new test writers to see and wonder if they should be using themselves. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
94 lines
3.1 KiB
Bash
Executable file
94 lines
3.1 KiB
Bash
Executable file
#!/bin/sh
|
|
|
|
test_description='git rebase tests for -Xsubtree
|
|
|
|
This test runs git rebase and tests the subtree strategy.
|
|
'
|
|
GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main
|
|
export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
|
|
|
|
. ./test-lib.sh
|
|
. "$TEST_DIRECTORY"/lib-rebase.sh
|
|
|
|
commit_message() {
|
|
git log --pretty=format:%s -1 "$1"
|
|
}
|
|
|
|
# There are a few bugs in the rebase with regards to the subtree strategy, and
|
|
# this test script tries to document them. First, the following commit history
|
|
# is generated (the onelines are shown, time flows from left to right):
|
|
#
|
|
# topic_1 - topic_2 - topic_3
|
|
# \
|
|
# README ---------------------- Add subproject main - topic_4 - files_subtree/topic_5
|
|
#
|
|
# Where the merge moves the files topic_[123].t into the subdirectory
|
|
# files_subtree/ and topic_4 as well as files_subtree/topic_5 add files to that
|
|
# directory directly.
|
|
#
|
|
# Then, in subsequent test cases, `git filter-branch` is used to distill just
|
|
# the commits that touch files_subtree/. To give it a final pre-rebase touch,
|
|
# an empty commit is added on top. The pre-rebase commit history looks like
|
|
# this:
|
|
#
|
|
# Add subproject main - topic_4 - files_subtree/topic_5 - Empty commit
|
|
#
|
|
# where the root commit adds three files: topic_1.t, topic_2.t and topic_3.t.
|
|
#
|
|
# This commit history is then rebased onto `topic_3` with the
|
|
# `-Xsubtree=files_subtree` option in two different ways:
|
|
#
|
|
# 1. without specifying a rebase backend
|
|
# 2. using the `--rebase-merges` backend
|
|
|
|
test_expect_success 'setup' '
|
|
test_commit README &&
|
|
|
|
git init files &&
|
|
test_commit -C files topic_1 &&
|
|
test_commit -C files topic_2 &&
|
|
test_commit -C files topic_3 &&
|
|
|
|
: perform subtree merge into files_subtree/ &&
|
|
git fetch files refs/heads/main:refs/heads/files-main &&
|
|
git merge -s ours --no-commit --allow-unrelated-histories \
|
|
files-main &&
|
|
git read-tree --prefix=files_subtree -u files-main &&
|
|
git commit -m "Add subproject main" &&
|
|
|
|
: add two extra commits to rebase &&
|
|
test_commit -C files_subtree topic_4 &&
|
|
test_commit files_subtree/topic_5 &&
|
|
|
|
git checkout -b to-rebase &&
|
|
git fast-export --no-data HEAD -- files_subtree/ |
|
|
sed -e "s%\([0-9a-f]\{40\} \)files_subtree/%\1%" |
|
|
git fast-import --force --quiet &&
|
|
git reset --hard &&
|
|
git commit -m "Empty commit" --allow-empty
|
|
'
|
|
|
|
test_expect_success 'Rebase -Xsubtree --empty=ask --onto commit' '
|
|
reset_rebase &&
|
|
git checkout -b rebase-onto to-rebase &&
|
|
test_must_fail git rebase -Xsubtree=files_subtree --empty=ask --onto files-main main &&
|
|
: first pick results in no changes &&
|
|
git rebase --skip &&
|
|
test "$(commit_message HEAD~2)" = "topic_4" &&
|
|
test "$(commit_message HEAD~)" = "files_subtree/topic_5" &&
|
|
test "$(commit_message HEAD)" = "Empty commit"
|
|
'
|
|
|
|
test_expect_success 'Rebase -Xsubtree --empty=ask --rebase-merges --onto commit' '
|
|
reset_rebase &&
|
|
git checkout -b rebase-merges-onto to-rebase &&
|
|
test_must_fail git rebase -Xsubtree=files_subtree --empty=ask --rebase-merges --onto files-main --root &&
|
|
: first pick results in no changes &&
|
|
git rebase --skip &&
|
|
test "$(commit_message HEAD~2)" = "topic_4" &&
|
|
test "$(commit_message HEAD~)" = "files_subtree/topic_5" &&
|
|
test "$(commit_message HEAD)" = "Empty commit"
|
|
'
|
|
|
|
test_done
|