Skip to content

Commit ca9c063

Browse files
committed
Merge branch 'sl/diff-tree-sparse'
"git diff-tree" has been taught to take advantage of the sparse-index feature. * sl/diff-tree-sparse: diff-tree: integrate with sparse index
2 parents e490bea + 48c5fbf commit ca9c063

File tree

3 files changed

+48
-0
lines changed

3 files changed

+48
-0
lines changed

builtin/diff-tree.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,10 @@ int cmd_diff_tree(int argc, const char **argv, const char *prefix)
122122
usage(diff_tree_usage);
123123

124124
git_config(git_diff_basic_config, NULL); /* no "diff" UI options */
125+
126+
prepare_repo_settings(the_repository);
127+
the_repository->settings.command_requires_full_index = 0;
128+
125129
repo_init_revisions(the_repository, opt, prefix);
126130
if (repo_read_index(the_repository) < 0)
127131
die(_("index file corrupt"));

t/perf/p2000-sparse-operations.sh

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,5 +131,7 @@ test_perf_on_all git describe --dirty
131131
test_perf_on_all 'echo >>new && git describe --dirty'
132132
test_perf_on_all git diff-files
133133
test_perf_on_all git diff-files -- $SPARSE_CONE/a
134+
test_perf_on_all git diff-tree HEAD
135+
test_perf_on_all git diff-tree HEAD -- $SPARSE_CONE/a
134136

135137
test_done

t/t1092-sparse-checkout-compatibility.sh

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2180,4 +2180,46 @@ test_expect_success 'sparse index is not expanded: diff-files' '
21802180
ensure_not_expanded diff-files -- "deep/*"
21812181
'
21822182

2183+
test_expect_success 'diff-tree' '
2184+
init_repos &&
2185+
2186+
# Test change inside sparse cone
2187+
tree1=$(git -C sparse-index rev-parse HEAD^{tree}) &&
2188+
tree2=$(git -C sparse-index rev-parse update-deep^{tree}) &&
2189+
test_all_match git diff-tree $tree1 $tree2 &&
2190+
test_all_match git diff-tree $tree1 $tree2 -- deep/a &&
2191+
test_all_match git diff-tree HEAD update-deep &&
2192+
test_all_match git diff-tree HEAD update-deep -- deep/a &&
2193+
2194+
# Test change outside sparse cone
2195+
tree3=$(git -C sparse-index rev-parse update-folder1^{tree}) &&
2196+
test_all_match git diff-tree $tree1 $tree3 &&
2197+
test_all_match git diff-tree $tree1 $tree3 -- folder1/a &&
2198+
test_all_match git diff-tree HEAD update-folder1 &&
2199+
test_all_match git diff-tree HEAD update-folder1 -- folder1/a &&
2200+
2201+
# Check that SKIP_WORKTREE files are not materialized
2202+
test_path_is_missing sparse-checkout/folder1/a &&
2203+
test_path_is_missing sparse-index/folder1/a &&
2204+
test_path_is_missing sparse-checkout/folder2/a &&
2205+
test_path_is_missing sparse-index/folder2/a
2206+
'
2207+
2208+
test_expect_success 'sparse-index is not expanded: diff-tree' '
2209+
init_repos &&
2210+
2211+
tree1=$(git -C sparse-index rev-parse HEAD^{tree}) &&
2212+
tree2=$(git -C sparse-index rev-parse update-deep^{tree}) &&
2213+
tree3=$(git -C sparse-index rev-parse update-folder1^{tree}) &&
2214+
2215+
ensure_not_expanded diff-tree $tree1 $tree2 &&
2216+
ensure_not_expanded diff-tree $tree1 $tree2 -- deep/a &&
2217+
ensure_not_expanded diff-tree HEAD update-deep &&
2218+
ensure_not_expanded diff-tree HEAD update-deep -- deep/a &&
2219+
ensure_not_expanded diff-tree $tree1 $tree3 &&
2220+
ensure_not_expanded diff-tree $tree1 $tree3 -- folder1/a &&
2221+
ensure_not_expanded diff-tree HEAD update-folder1 &&
2222+
ensure_not_expanded diff-tree HEAD update-folder1 -- folder1/a
2223+
'
2224+
21832225
test_done

0 commit comments

Comments
 (0)