Skip to content

Commit 5ca1154

Browse files
committed
Merge branch 'sl/diff-files-sparse'
Teach "diff-files" not to expand sparse-index unless needed. * sl/diff-files-sparse: diff-files: integrate with sparse index t1092: add tests for `git diff-files`
2 parents 80754c5 + 8c30be9 commit 5ca1154

File tree

3 files changed

+70
-2
lines changed

3 files changed

+70
-2
lines changed

builtin/diff-files.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,10 @@ int cmd_diff_files(int argc, const char **argv, const char *prefix)
2727
usage(diff_files_usage);
2828

2929
git_config(git_diff_basic_config, NULL); /* no "diff" UI options */
30+
31+
prepare_repo_settings(the_repository);
32+
the_repository->settings.command_requires_full_index = 0;
33+
3034
repo_init_revisions(the_repository, &rev, prefix);
3135
rev.abbrev = 0;
3236

t/perf/p2000-sparse-operations.sh

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,5 +129,7 @@ test_perf_on_all git grep --cached bogus -- "f2/f1/f1/*"
129129
test_perf_on_all git write-tree
130130
test_perf_on_all git describe --dirty
131131
test_perf_on_all 'echo >>new && git describe --dirty'
132+
test_perf_on_all git diff-files
133+
test_perf_on_all git diff-files -- $SPARSE_CONE/a
132134

133135
test_done

t/t1092-sparse-checkout-compatibility.sh

Lines changed: 64 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1377,7 +1377,7 @@ test_expect_success 'index.sparse disabled inline uses full index' '
13771377
! test_region index ensure_full_index trace2.txt
13781378
'
13791379

1380-
ensure_not_expanded () {
1380+
run_sparse_index_trace2 () {
13811381
rm -f trace2.txt &&
13821382
if test -z "$WITHOUT_UNTRACKED_TXT"
13831383
then
@@ -1397,7 +1397,16 @@ ensure_not_expanded () {
13971397
git -C sparse-index "$@" \
13981398
>sparse-index-out \
13991399
2>sparse-index-error || return 1
1400-
fi &&
1400+
fi
1401+
}
1402+
1403+
ensure_expanded () {
1404+
run_sparse_index_trace2 "$@" &&
1405+
test_region index ensure_full_index trace2.txt
1406+
}
1407+
1408+
ensure_not_expanded () {
1409+
run_sparse_index_trace2 "$@" &&
14011410
test_region ! index ensure_full_index trace2.txt
14021411
}
14031412

@@ -2108,4 +2117,57 @@ test_expect_success 'sparse-index is not expanded: write-tree' '
21082117
ensure_not_expanded write-tree
21092118
'
21102119

2120+
test_expect_success 'diff-files with pathspec inside sparse definition' '
2121+
init_repos &&
2122+
2123+
write_script edit-contents <<-\EOF &&
2124+
echo text >>"$1"
2125+
EOF
2126+
2127+
run_on_all ../edit-contents deep/a &&
2128+
2129+
test_all_match git diff-files &&
2130+
2131+
test_all_match git diff-files -- deep/a &&
2132+
2133+
# test wildcard
2134+
test_all_match git diff-files -- "deep/*"
2135+
'
2136+
2137+
test_expect_success 'diff-files with pathspec outside sparse definition' '
2138+
init_repos &&
2139+
2140+
test_sparse_match git diff-files -- folder2/a &&
2141+
2142+
write_script edit-contents <<-\EOF &&
2143+
echo text >>"$1"
2144+
EOF
2145+
2146+
# The directory "folder1" is outside the cone of interest
2147+
# and will not exist in the sparse checkout repositories.
2148+
# Create it as needed, add file "folder1/a" there with
2149+
# contents that is different from the staged version.
2150+
run_on_all mkdir -p folder1 &&
2151+
run_on_all cp a folder1/a &&
2152+
2153+
run_on_all ../edit-contents folder1/a &&
2154+
test_all_match git diff-files &&
2155+
test_all_match git diff-files -- folder1/a &&
2156+
test_all_match git diff-files -- "folder*/a"
2157+
'
2158+
2159+
test_expect_success 'sparse index is not expanded: diff-files' '
2160+
init_repos &&
2161+
2162+
write_script edit-contents <<-\EOF &&
2163+
echo text >>"$1"
2164+
EOF
2165+
2166+
run_on_all ../edit-contents deep/a &&
2167+
2168+
ensure_not_expanded diff-files &&
2169+
ensure_not_expanded diff-files -- deep/a &&
2170+
ensure_not_expanded diff-files -- "deep/*"
2171+
'
2172+
21112173
test_done

0 commit comments

Comments
 (0)