Skip to content

Commit 01a8c4a

Browse files
derrickstoleeldennington
authored andcommitted
show: integrate with the sparse index
The 'git show' command can take an input to request the state of an object in the index. This can lead to parsing the index in order to load a specific file entry. Without the change presented here, a sparse index would expand to a full one, taking much longer than usual to access a simple file. There is one behavioral change that happens here, though: we now can find a sparse directory entry within the index! Commands that previously failed because we could not find an entry in the worktree or index now succeed because we _do_ find an entry in the index. There might be more work to do to make other situations succeed when looking for an indexed tree, perhaps by looking at or updating the cache-tree extension as needed. These situations include having a full index or asking for a directory that is within the sparse-checkout cone (and hence is not a sparse directory entry in the index). Signed-off-by: Derrick Stolee <[email protected]>
1 parent 788b62c commit 01a8c4a

File tree

2 files changed

+19
-1
lines changed

2 files changed

+19
-1
lines changed

builtin/log.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -648,6 +648,9 @@ int cmd_show(int argc, const char **argv, const char *prefix)
648648
init_log_defaults();
649649
git_config(git_log_config, NULL);
650650

651+
prepare_repo_settings(the_repository);
652+
the_repository->settings.command_requires_full_index = 0;
653+
651654
memset(&match_all, 0, sizeof(match_all));
652655
repo_init_revisions(the_repository, &rev, prefix);
653656
rev.diff = 1;

t/t1092-sparse-checkout-compatibility.sh

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1177,7 +1177,19 @@ test_expect_success 'show (cached blobs/trees)' '
11771177
# when the directory is outside of the cone.
11781178
test_all_match test_must_fail git show :deep/ &&
11791179
test_must_fail git -C full-checkout show :folder1/ &&
1180-
test_sparse_match test_must_fail git show :folder1/
1180+
test_must_fail git -C sparse-checkout show :folder1/ &&
1181+
1182+
# The sparse index actually has "folder1" inside, so
1183+
# "git show :folder1/" succeeds when it did not before.
1184+
git -C sparse-index show :folder1/ >actual &&
1185+
git -C sparse-index show HEAD:folder1 >expect &&
1186+
1187+
# The output of "git show" includes the way we
1188+
# referenced the objects, so strip that out.
1189+
test_line_count = 4 actual &&
1190+
tail -n 2 actual >actual-trunc &&
1191+
tail -n 2 expect >expect-trunc &&
1192+
test_cmp expect-trunc actual-trunc
11811193
'
11821194

11831195
test_expect_success 'submodule handling' '
@@ -1294,6 +1306,9 @@ test_expect_success 'sparse-index is not expanded' '
12941306
echo >>sparse-index/untracked.txt &&
12951307
ensure_not_expanded add . &&
12961308
1309+
ensure_not_expanded show :a &&
1310+
ensure_not_expanded show :deep/a &&
1311+
12971312
echo >>sparse-index/a &&
12981313
ensure_not_expanded stash &&
12991314
ensure_not_expanded stash list &&

0 commit comments

Comments
 (0)