add--interactive: ignore submodule changes except HEAD
For 'add -i' and 'add -p', the only action we can take on a dirty submodule entry is update the index with a new value from its HEAD. The content changes inside (from its own index, untracked files...) do not matter, at least until 'git add -i' learns about launching a new interactive add session inside a submodule. Ignore all other submodules changes except HEAD. This reduces the number of entries the user has to check through in 'git add -i', and the number of 'no' they have to answer to 'git add -p' when dirty submodules are present. Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
6366dd9000
commit
12434efc1d
@ -262,7 +262,7 @@ sub list_modified {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (run_cmd_pipe(qw(git diff-files --numstat --summary --raw --), @ARGV)) {
|
for (run_cmd_pipe(qw(git diff-files --ignore-submodules=dirty --numstat --summary --raw --), @ARGV)) {
|
||||||
if (($add, $del, $file) =
|
if (($add, $del, $file) =
|
||||||
/^([-\d]+) ([-\d]+) (.*)/) {
|
/^([-\d]+) ([-\d]+) (.*)/) {
|
||||||
$file = unquote_path($file);
|
$file = unquote_path($file);
|
||||||
|
@ -493,4 +493,52 @@ test_expect_success 'add -p works even with color.ui=always' '
|
|||||||
test_cmp expect actual
|
test_cmp expect actual
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success 'setup different kinds of dirty submodules' '
|
||||||
|
test_create_repo for-submodules &&
|
||||||
|
(
|
||||||
|
cd for-submodules &&
|
||||||
|
test_commit initial &&
|
||||||
|
test_create_repo dirty-head &&
|
||||||
|
(
|
||||||
|
cd dirty-head &&
|
||||||
|
test_commit initial
|
||||||
|
) &&
|
||||||
|
cp -R dirty-head dirty-otherwise &&
|
||||||
|
cp -R dirty-head dirty-both-ways &&
|
||||||
|
git add dirty-head &&
|
||||||
|
git add dirty-otherwise dirty-both-ways &&
|
||||||
|
git commit -m initial &&
|
||||||
|
|
||||||
|
cd dirty-head &&
|
||||||
|
test_commit updated &&
|
||||||
|
cd ../dirty-both-ways &&
|
||||||
|
test_commit updated &&
|
||||||
|
echo dirty >>initial &&
|
||||||
|
: >untracked &&
|
||||||
|
cd ../dirty-otherwise &&
|
||||||
|
echo dirty >>initial &&
|
||||||
|
: >untracked
|
||||||
|
) &&
|
||||||
|
git -C for-submodules diff-files --name-only >actual &&
|
||||||
|
cat >expected <<-\EOF &&
|
||||||
|
dirty-both-ways
|
||||||
|
dirty-head
|
||||||
|
dirty-otherwise
|
||||||
|
EOF
|
||||||
|
test_cmp expected actual &&
|
||||||
|
git -C for-submodules diff-files --name-only --ignore-submodules=dirty >actual &&
|
||||||
|
cat >expected <<-\EOF &&
|
||||||
|
dirty-both-ways
|
||||||
|
dirty-head
|
||||||
|
EOF
|
||||||
|
test_cmp expected actual
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'status ignores dirty submodules (except HEAD)' '
|
||||||
|
git -C for-submodules add -i </dev/null >output &&
|
||||||
|
grep dirty-head output &&
|
||||||
|
grep dirty-both-ways output &&
|
||||||
|
! grep dirty-otherwise output
|
||||||
|
'
|
||||||
|
|
||||||
test_done
|
test_done
|
||||||
|
Reference in New Issue
Block a user