git/t/t3426-rebase-submodule.sh

61 строка
1.4 KiB
Bash
Исходник Обычный вид История

#!/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 &&
git rebase "$1"
}
test_submodule_switch "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 &&
git rebase -i "$1"
}
test_submodule_switch "git_rebase_interactive"
wt-status: actually ignore submodules when requested Since ff6f1f564 (submodule-config: lazy-load a repository's .gitmodules file, 2017-08-03) rebase interactive fails if there are any submodules with unstaged changes which have been configured with a value for 'submodule.<name>.ignore' in the repository's config. This is due to how configured values of 'submodule.<name>.ignore' are handled in addition to a change in how the submodule config is loaded. When the diff machinery hits a submodule (gitlink as well as a corresponding entry in the submodule subsystem) it will read the value of 'submodule.<name>.ignore' stored in the repository's config and if the config is present it will clear the 'IGNORE_SUBMODULES' (which is the flag explicitly requested by rebase interactive), 'IGNORE_UNTRACKED_IN_SUBMODULES', and 'IGNORE_DIRTY_SUBMODULES' diff flags and then set one of them based on the configured value. Historically this wasn't a problem because the submodule subsystem wasn't initialized because the .gitmodules file wasn't explicitly loaded by the rebase interactive command. So when the diff machinery hit a submodule it would skip over reading any configured values of 'submodule.<name>.ignore'. In order to preserve the behavior of submodules being ignored by rebase interactive, also set the 'OVERRIDE_SUBMODULE_CONFIG' diff flag when submodules are requested to be ignored when checking for unstaged changes. Reported-by: Orgad Shaneh <orgads@gmail.com> Signed-off-by: Brandon Williams <bmwill@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2017-11-07 01:08:19 +03:00
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