Skip to content

Commit ecde029

Browse files
derrickstoleedscho
authored andcommitted
Merge pull request #410: Sparse Index: latest integrations
``` 6e74958 p2000: add 'git checkout -' test and decrease depth 3e1d03c p2000: compress repo names cd94f82 commit: integrate with sparse-index 65e79b8 sparse-index: recompute cache-tree e9a9981 checkout: stop expanding sparse indexes 4b801c8 t1092: document bad 'git checkout' behavior 71e3015 unpack-trees: resolve sparse-directory/file conflicts 5e96df4 t1092: test merge conflicts outside cone defab1b add: allow operating on a sparse-only index 9fc4313 pathspec: stop calling ensure_full_index 0ec03ab add: ignore outside the sparse-checkout in refresh() adf5b15 add: remove ensure_full_index() with --renormalize ``` These commits are equivalent to those already in `next` via gitgitgadget#999. ``` 80b8d6c Merge branch 'sparse-index/add' into stolee/sparse-index/add ``` This merge resolves conflicts with some work that happened in parallel, but is already in upstream `master`. ``` c407b2c t7519: rewrite sparse index test 9dad0d2 sparse-index: silently return when not using cone-mode patterns 2974920 sparse-index: silently return when cache tree fails e7cdaa0 unpack-trees: fix nested sparse-dir search 347410c sparse-checkout: create helper methods 4537233 attr: be careful about sparse directories 5282a86 sparse-index: add SPARSE_INDEX_MEMORY_ONLY flag 3a2f316 sparse-checkout: clear tracked sparse dirs fb47b56 sparse-checkout: add config to disable deleting dirs ``` These commits are the ones under review as of gitgitgadget#1009. Recent review made this less stable. It's a slightly different and more robust version of #396. > Note: I'm still not done with the feedback for upstream, but the remaining feedback is "can we add tests that cover these tricky technical bits?" and in `microsoft/git` these are already covered by the Scalar functional tests (since that's how they were found). ``` 080b02c diff: ignore sparse paths in diffstat d91a647 merge: make sparse-aware with ORT df49b5f merge-ort: expand only for out-of-cone conflicts cdecb85 t1092: add cherry-pick, rebase tests 0c1ecfb sequencer: ensure full index if not ORT strategy 406dfbe sparse-index: integrate with cherry-pick and rebase ``` These commits integrate with `git merge`, `git cherry-pick`, `git revert`, and `git rebase` as of gitgitgadget#1019. This got some feedback that changed how the tests were working so they are more robust. This led to a new commit (0c1ecfb). ``` cbb0ab3 Merge branch 'sparse-index/merge' into vfs-2.33.0 acb8623 t7524: test no longer fails ``` Finally, the commits are merged into `vfs-2.33.0` and also we include a fix to a `microsoft/git` test that is no longer broken.
2 parents 7b9f737 + 2e5acc5 commit ecde029

File tree

5 files changed

+26
-2
lines changed

5 files changed

+26
-2
lines changed

Documentation/config/index.txt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
index.deleteSparseDirectories::
2+
When enabled, the cone mode sparse-checkout feature will delete
3+
directories that are outside of the sparse-checkout cone, unless
4+
such a directory contains an untracked, non-ignored file. Defaults
5+
to true.
6+
17
index.recordEndOfIndexEntries::
28
Specifies whether the index file should include an "End Of Index
39
Entry" section. This reduces index load time on multiprocessor

builtin/sparse-checkout.c

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ static int sparse_checkout_list(int argc, const char **argv)
105105

106106
static void clean_tracked_sparse_directories(struct repository *r)
107107
{
108-
int i, was_full = 0;
108+
int i, value, was_full = 0;
109109
struct strbuf path = STRBUF_INIT;
110110
size_t pathlen;
111111
struct string_list_item *item;
@@ -121,6 +121,13 @@ static void clean_tracked_sparse_directories(struct repository *r)
121121
!r->index->sparse_checkout_patterns->use_cone_patterns)
122122
return;
123123

124+
/*
125+
* Users can disable this behavior.
126+
*/
127+
if (!repo_config_get_bool(r, "index.deletesparsedirectories", &value) &&
128+
!value)
129+
return;
130+
124131
/*
125132
* Use the sparse index as a data structure to assist finding
126133
* directories that are safe to delete. This conversion to a

diff.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3848,6 +3848,13 @@ static int reuse_worktree_file(struct index_state *istate,
38483848
if (!FAST_WORKING_DIRECTORY && !want_file && has_object_pack(oid))
38493849
return 0;
38503850

3851+
/*
3852+
* If this path does not match our sparse-checkout definition,
3853+
* then the file will not be in the working directory.
3854+
*/
3855+
if (!path_in_sparse_checkout(name, istate))
3856+
return 0;
3857+
38513858
/*
38523859
* Similarly, if we'd have to convert the file contents anyway, that
38533860
* makes the optimization not worthwhile.

t/t1091-sparse-checkout-builtin.sh

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -708,6 +708,10 @@ test_expect_success 'cone mode clears ignored subdirectories' '
708708
git -C repo status --porcelain=v2 >out &&
709709
test_must_be_empty out &&
710710
711+
git -C repo -c index.deleteSparseDirectories=false sparse-checkout reapply &&
712+
test_path_is_dir repo/folder1 &&
713+
test_path_is_dir repo/deep/deeper2 &&
714+
711715
git -C repo sparse-checkout reapply &&
712716
test_path_is_missing repo/folder1 &&
713717
test_path_is_missing repo/deep/deeper2 &&

t/t7524-serialized-status.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -400,7 +400,7 @@ EOF
400400
401401
'
402402

403-
test_expect_failure 'ensure deserialize -v does not crash' '
403+
test_expect_success 'ensure deserialize -v does not crash' '
404404
405405
git init -b main verbose_test &&
406406
touch verbose_test/a &&

0 commit comments

Comments
 (0)