Skip to content

Commit

Permalink
describe: enable sparse index for describe
Browse files Browse the repository at this point in the history
git describe compares the index with the working tree when (and only
when) it is run with the "--dirty" flag. This is done by the
run_diff_index() function. The function has been made aware of the
sparse-index in the series that led to 8d2c373 (Merge branch
'ld/sparse-diff-blame', 2021-12-21). Hence we can just set the
requires-full-index to false for "describe".

Performance metrics

  Test                                                     HEAD~1            HEAD
  -------------------------------------------------------------------------------------------------
  2000.2: git describe --dirty (full-v3)                   0.08(0.09+0.01)   0.08(0.06+0.03) +0.0%
  2000.3: git describe --dirty (full-v4)                   0.09(0.07+0.03)   0.08(0.05+0.04) -11.1%
  2000.4: git describe --dirty (sparse-v3)                 0.88(0.82+0.06)   0.02(0.01+0.05) -97.7%
  2000.5: git describe --dirty (sparse-v4)                 0.68(0.60+0.08)   0.02(0.02+0.04) -97.1%
  2000.6: echo >>new && git describe --dirty (full-v3)     0.08(0.04+0.05)   0.08(0.05+0.04) +0.0%
  2000.7: echo >>new && git describe --dirty (full-v4)     0.08(0.07+0.03)   0.08(0.05+0.04) +0.0%
  2000.8: echo >>new && git describe --dirty (sparse-v3)   0.75(0.69+0.07)   0.02(0.03+0.03) -97.3%
  2000.9: echo >>new && git describe --dirty (sparse-v4)   0.81(0.73+0.09)   0.02(0.01+0.05) -97.5%

Signed-off-by: Raghul Nanth A <nanth.raghul@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
NanthR authored and gitster committed Apr 3, 2023
1 parent 8d90352 commit 748b8d6
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 0 deletions.
2 changes: 2 additions & 0 deletions builtin/describe.c
Original file line number Diff line number Diff line change
Expand Up @@ -654,6 +654,8 @@ int cmd_describe(int argc, const char **argv, const char *prefix)
int fd, result;

setup_work_tree();
prepare_repo_settings(the_repository);
the_repository->settings.command_requires_full_index = 0;
repo_read_index(the_repository);
refresh_index(&the_index, REFRESH_QUIET|REFRESH_UNMERGED,
NULL, NULL, NULL);
Expand Down
3 changes: 3 additions & 0 deletions t/perf/p2000-sparse-operations.sh
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ test_expect_success 'setup repo and indexes' '
done &&
git sparse-checkout init --cone &&
git tag -a v1.0 -m "Final" &&
git sparse-checkout set $SPARSE_CONE &&
git checkout -b wide $OLD_COMMIT &&
Expand Down Expand Up @@ -125,5 +126,7 @@ test_perf_on_all git checkout-index -f --all
test_perf_on_all git update-index --add --remove $SPARSE_CONE/a
test_perf_on_all "git rm -f $SPARSE_CONE/a && git checkout HEAD -- $SPARSE_CONE/a"
test_perf_on_all git grep --cached --sparse bogus -- "f2/f1/f1/*"
test_perf_on_all git describe --dirty
test_perf_on_all 'echo >>new && git describe --dirty'

test_done
25 changes: 25 additions & 0 deletions t/t1092-sparse-checkout-compatibility.sh
Original file line number Diff line number Diff line change
Expand Up @@ -1514,6 +1514,31 @@ test_expect_success 'sparse-index is not expanded: stash' '
ensure_not_expanded stash pop
'

test_expect_success 'describe tested on all' '
init_repos &&
# Add tag to be read by describe
run_on_all git tag -a v1.0 -m "Version 1" &&
test_all_match git describe --dirty &&
run_on_all rm g &&
test_all_match git describe --dirty
'


test_expect_success 'sparse-index is not expanded: describe' '
init_repos &&
# Add tag to be read by describe
git -C sparse-index tag -a v1.0 -m "Version 1" &&
ensure_not_expanded describe --dirty &&
echo "test" >>sparse-index/g &&
ensure_not_expanded describe --dirty &&
ensure_not_expanded describe
'

test_expect_success 'sparse index is not expanded: diff' '
init_repos &&
Expand Down

0 comments on commit 748b8d6

Please sign in to comment.