mirror of
https://github.com/git/git
synced 2024-08-27 19:49:21 +00:00
![Denton Liu](/assets/img/avatar_default.png)
When we run a test helper function in test_submodule_switch_common(), we sometimes specify a whole helper function as the $command. When we do this, in some test cases, we just mark the whole function with `test_must_fail`. However, it's possible that the helper function might fail earlier or later than expected due to an introduced bug. If this happens, then the test case will still report as passing but it should really be marked as failing since it didn't actually display the intended behaviour. Instead of invoking `test_must_fail $command`, pass the string "test_must_fail" as the second argument in case where the git command is expected to fail. When $command is a helper function, the parent function calling test_submodule_switch_common() is test_submodule_switch_func(). For all test_submodule_switch_func() invocations, increase the granularity of the argument test helper function by prefixing the git invocation which is meant to fail with the second argument like this: $2 git checkout "$1" In the other cases, test_submodule_switch() and test_submodule_forced_switch(), instead of passing in the git command directly, wrap it using the git_test_func() and pass the git arguments using the global variable $gitcmd. Unfortunately, since closures aren't a thing in shell scripts, the global variable is necessary. Another unfortunate result is that the "git_test_func" will used as the test case name when $command is printed but it's worth it for the cleaner code. Finally, as an added bonus, `test_must_fail` will now only run on git commands. Signed-off-by: Denton Liu <liu.denton@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
63 lines
1.4 KiB
Bash
Executable file
63 lines
1.4 KiB
Bash
Executable file
#!/bin/sh
|
|
|
|
test_description='rebase can handle submodules'
|
|
|
|
. ./test-lib.sh
|
|
. "$TEST_DIRECTORY"/lib-submodule-update.sh
|
|
. "$TEST_DIRECTORY"/lib-rebase.sh
|
|
|
|
git_rebase () {
|
|
git status -su >expect &&
|
|
ls -1pR * >>expect &&
|
|
git checkout -b ours HEAD &&
|
|
echo x >>file1 &&
|
|
git add file1 &&
|
|
git commit -m add_x &&
|
|
git revert HEAD &&
|
|
git status -su >actual &&
|
|
ls -1pR * >>actual &&
|
|
test_cmp expect actual &&
|
|
may_only_be_test_must_fail "$2" &&
|
|
$2 git rebase "$1"
|
|
}
|
|
|
|
test_submodule_switch_func "git_rebase"
|
|
|
|
git_rebase_interactive () {
|
|
git status -su >expect &&
|
|
ls -1pR * >>expect &&
|
|
git checkout -b ours HEAD &&
|
|
echo x >>file1 &&
|
|
git add file1 &&
|
|
git commit -m add_x &&
|
|
git revert HEAD &&
|
|
git status -su >actual &&
|
|
ls -1pR * >>actual &&
|
|
test_cmp expect actual &&
|
|
set_fake_editor &&
|
|
echo "fake-editor.sh" >.git/info/exclude &&
|
|
may_only_be_test_must_fail "$2" &&
|
|
$2 git rebase -i "$1"
|
|
}
|
|
|
|
test_submodule_switch_func "git_rebase_interactive"
|
|
|
|
test_expect_success 'rebase interactive ignores modified submodules' '
|
|
test_when_finished "rm -rf super sub" &&
|
|
git init sub &&
|
|
git -C sub commit --allow-empty -m "Initial commit" &&
|
|
git init super &&
|
|
git -C super submodule add ../sub &&
|
|
git -C super config submodule.sub.ignore dirty &&
|
|
>super/foo &&
|
|
git -C super add foo &&
|
|
git -C super commit -m "Initial commit" &&
|
|
test_commit -C super a &&
|
|
test_commit -C super b &&
|
|
test_commit -C super/sub c &&
|
|
set_fake_editor &&
|
|
git -C super rebase -i HEAD^^
|
|
'
|
|
|
|
test_done
|