mirror of
https://github.com/git/git.git
synced 2024-06-13 13:07:13 +02:00
diff-lib: honor override_submodule_config flag bit
When `diff.ignoreSubmodules = all` is set and submodule commits are manually staged (e.g. via `git-update-index`), `git-commit` should record the commit with updated submodules. `index_differs_from` is called from `prepare_to_commit` with flags set to `override_submodule_config = 1`. `index_differs_from` then merges the default diff flags and passed flags. When `diff.ignoreSubmodules` is set to "all", `flags` ends up having both `override_submodule_config` and `ignore_submodules` set to 1. This results in `git-commit` ignoring staged commits. This patch restores original `flags.ignore_submodule` if `flags.override_submodule_config` is set. Signed-off-by: Josip Sokcevic <sokcevic@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
fe86abd751
commit
5768478edc
|
@ -669,8 +669,15 @@ int index_differs_from(struct repository *r,
|
||||||
setup_revisions(0, NULL, &rev, &opt);
|
setup_revisions(0, NULL, &rev, &opt);
|
||||||
rev.diffopt.flags.quick = 1;
|
rev.diffopt.flags.quick = 1;
|
||||||
rev.diffopt.flags.exit_with_status = 1;
|
rev.diffopt.flags.exit_with_status = 1;
|
||||||
if (flags)
|
if (flags) {
|
||||||
diff_flags_or(&rev.diffopt.flags, flags);
|
diff_flags_or(&rev.diffopt.flags, flags);
|
||||||
|
/*
|
||||||
|
* Now that flags are merged, honor override_submodule_config
|
||||||
|
* and ignore_submodules from passed flags.
|
||||||
|
*/
|
||||||
|
if (flags->override_submodule_config)
|
||||||
|
rev.diffopt.flags.ignore_submodules = flags->ignore_submodules;
|
||||||
|
}
|
||||||
rev.diffopt.ita_invisible_in_index = ita_invisible_in_index;
|
rev.diffopt.ita_invisible_in_index = ita_invisible_in_index;
|
||||||
run_diff_index(&rev, 1);
|
run_diff_index(&rev, 1);
|
||||||
has_changes = rev.diffopt.flags.has_changes;
|
has_changes = rev.diffopt.flags.has_changes;
|
||||||
|
|
|
@ -1179,4 +1179,27 @@ test_expect_success 'submodule update --recursive skip submodules with strategy=
|
||||||
test_cmp expect.err actual.err
|
test_cmp expect.err actual.err
|
||||||
'
|
'
|
||||||
|
|
||||||
|
add_submodule_commit_and_validate () {
|
||||||
|
HASH=$(git rev-parse HEAD) &&
|
||||||
|
git update-index --add --cacheinfo 160000,$HASH,sub &&
|
||||||
|
git commit -m "create submodule" &&
|
||||||
|
echo "160000 commit $HASH sub" >expect &&
|
||||||
|
git ls-tree HEAD -- sub >actual &&
|
||||||
|
test_cmp expect actual
|
||||||
|
}
|
||||||
|
|
||||||
|
test_expect_success 'commit with staged submodule change' '
|
||||||
|
add_submodule_commit_and_validate
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'commit with staged submodule change with ignoreSubmodules dirty' '
|
||||||
|
test_config diff.ignoreSubmodules dirty &&
|
||||||
|
add_submodule_commit_and_validate
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'commit with staged submodule change with ignoreSubmodules all' '
|
||||||
|
test_config diff.ignoreSubmodules all &&
|
||||||
|
add_submodule_commit_and_validate
|
||||||
|
'
|
||||||
|
|
||||||
test_done
|
test_done
|
||||||
|
|
Loading…
Reference in New Issue