Skip to content

Commit

Permalink
check-attr: integrate with sparse-index
Browse files Browse the repository at this point in the history
Set the requires-full-index to false for "check-attr".

Add a test to ensure that the index is not expanded whether the files
are outside or inside the sparse-checkout cone when the sparse index is
enabled.

The `p2000` tests demonstrate a ~63% execution time reduction for
'git check-attr' using a sparse index.

Test                                            before  after
-----------------------------------------------------------------------
2000.106: git check-attr -a f2/f4/a (full-v3)    0.05   0.05 +0.0%
2000.107: git check-attr -a f2/f4/a (full-v4)    0.05   0.05 +0.0%
2000.108: git check-attr -a f2/f4/a (sparse-v3)  0.04   0.02 -50.0%
2000.109: git check-attr -a f2/f4/a (sparse-v4)  0.04   0.01 -75.0%

Helped-by: Victoria Dye <vdye@github.com>
Signed-off-by: Shuqi Liang <cheskaqiqi@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Cheskaqiqi authored and gitster committed Aug 11, 2023
1 parent 4723ae1 commit f981587
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 0 deletions.
3 changes: 3 additions & 0 deletions builtin/check-attr.c
Expand Up @@ -122,6 +122,9 @@ int cmd_check_attr(int argc, const char **argv, const char *prefix)
argc = parse_options(argc, argv, prefix, check_attr_options,
check_attr_usage, PARSE_OPT_KEEP_DASHDASH);

prepare_repo_settings(the_repository);
the_repository->settings.command_requires_full_index = 0;

if (repo_read_index(the_repository) < 0) {
die("invalid cache");
}
Expand Down
1 change: 1 addition & 0 deletions t/perf/p2000-sparse-operations.sh
Expand Up @@ -134,5 +134,6 @@ test_perf_on_all git diff-files -- $SPARSE_CONE/a
test_perf_on_all git diff-tree HEAD
test_perf_on_all git diff-tree HEAD -- $SPARSE_CONE/a
test_perf_on_all "git worktree add ../temp && git worktree remove ../temp"
test_perf_on_all git check-attr -a -- $SPARSE_CONE/a

test_done
15 changes: 15 additions & 0 deletions t/t1092-sparse-checkout-compatibility.sh
Expand Up @@ -2316,4 +2316,19 @@ test_expect_failure 'diff --check with pathspec outside sparse definition' '
test_all_match test_must_fail git diff --check --cached -- folder1/a
'

test_expect_success 'sparse-index is not expanded: check-attr' '
init_repos &&
echo "a -crlf myAttr" >>.gitattributes &&
mkdir ./sparse-index/folder1 &&
cp ./sparse-index/a ./sparse-index/folder1/a &&
cp .gitattributes ./sparse-index/deep &&
cp .gitattributes ./sparse-index/folder1 &&
git -C sparse-index add deep/.gitattributes &&
git -C sparse-index add --sparse folder1/.gitattributes &&
ensure_not_expanded check-attr -a --cached -- deep/a &&
ensure_not_expanded check-attr -a --cached -- folder1/a
'

test_done

0 comments on commit f981587

Please sign in to comment.