[PATCH 0/7] Sparse Index: integrate with reset
From: Victoria Dye via GitGitGadget <hidden>
Date: 2021-09-30 14:51:05
This series integrates the sparse index with git reset and provides
miscellaneous fixes and improvements to the command in sparse checkouts.
This includes:
1. tests added to t1092 and p2000 to establish the baseline functionality
of the command
2. repository settings to enable the sparse index with ensure_full_index
guarding any code paths that break tests without other compatibility
updates.
3. modifications to remove or reduce the scope in which ensure_full_index
must be called.
The sparse index updates are predicated on a fix originating from the
microsoft/git fork [1], correcting how git reset --mixed handles resetting
entries outside the sparse checkout definition. Additionally, a performance
"bug" in next_cache_entry with sparse index is corrected, preventing
repeatedly looping over already-searched entries.
The p2000 tests demonstrate an overall ~70% execution time reduction across
all tested usages of git reset using a sparse index:
Test before after
------------------------------------------------------------------------
2000.22: git reset (full-v3) 0.48 0.51 +6.3%
2000.23: git reset (full-v4) 0.47 0.50 +6.4%
2000.24: git reset (sparse-v3) 0.93 0.30 -67.7%
2000.25: git reset (sparse-v4) 0.94 0.29 -69.1%
2000.26: git reset --hard (full-v3) 0.69 0.68 -1.4%
2000.27: git reset --hard (full-v4) 0.75 0.68 -9.3%
2000.28: git reset --hard (sparse-v3) 1.29 0.34 -73.6%
2000.29: git reset --hard (sparse-v4) 1.31 0.34 -74.0%
2000.30: git reset -- does-not-exist (full-v3) 0.54 0.51 -5.6%
2000.31: git reset -- does-not-exist (full-v4) 0.54 0.52 -3.7%
2000.32: git reset -- does-not-exist (sparse-v3) 1.02 0.31 -69.6%
2000.33: git reset -- does-not-exist (sparse-v4) 1.07 0.30 -72.0%
[1] microsoft@6b8a074
Thanks! -Victoria
Kevin Willford (1):
reset: behave correctly with sparse-checkout
Victoria Dye (6):
sparse-index: update command for expand/collapse test
reset: expand test coverage for sparse checkouts
reset: integrate with sparse index
reset: make sparse-aware (except --mixed)
reset: make --mixed sparse-aware
unpack-trees: improve performance of next_cache_entry
builtin/reset.c | 77 ++++++++++++-
cache-tree.c | 43 ++++++-
cache.h | 10 ++
read-cache.c | 22 ++--
t/perf/p2000-sparse-operations.sh | 3 +
t/t1092-sparse-checkout-compatibility.sh | 139 ++++++++++++++++++++++-
t/t7114-reset-sparse-checkout.sh | 61 ++++++++++
unpack-trees.c | 23 +++-
8 files changed, 353 insertions(+), 25 deletions(-)
create mode 100755 t/t7114-reset-sparse-checkout.sh
base-commit: cefe983a320c03d7843ac78e73bd513a27806845
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1048%2Fvdye%2Fvdye%2Fsparse-index-part1-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1048/vdye/vdye/sparse-index-part1-v1
Pull-Request: https://github.com/gitgitgadget/git/pull/1048
--
gitgitgadget