From: "Derrick Stolee via GitGitGadget" <gitgitgadget@gmail.com>
To: git@vger.kernel.org
Cc: gitster@pobox.com, newren@gmail.com,
Matheus Tavares Bernardino <matheus.bernardino@usp.br>,
Derrick Stolee <stolee@gmail.com>,
Derrick Stolee <derrickstolee@github.com>
Subject: [PATCH v2 0/8] Sparse-index: integrate with status
Date: Fri, 23 Apr 2021 21:34:17 +0000 [thread overview]
Message-ID: <pull.932.v2.git.1619213665.gitgitgadget@gmail.com> (raw)
In-Reply-To: <pull.932.git.1618322497.gitgitgadget@gmail.com>
This is the first "payoff" series in the sparse-index work. It makes 'git
status' very fast when a sparse-index is enabled on a repository with
cone-mode sparse-checkout (and a small populated set).
This is based on ds/sparse-index-protections AND mt/add-rm-sparse-checkout.
The latter branch is needed because it changes the behavior of 'git add'
around sparse entries, which changes the expectations of a test added in
patch 1.
The approach here is to audit the places where ensure_full_index() pops up
while doing normal commands with pathspecs within the sparse-checkout
definition. Each of these are checked and tested. In the end, the
sparse-index is integrated with these features:
* git status
* FS Monitor index extension.
The performance tests in p2000-sparse-operations.sh improve by 95% or more,
even when compared with the full-index cases, not just the sparse-index
cases that previously had extra overhead.
Hopefully this is the first example of how ds/sparse-index-protections has
done the basic work to do these conversions safely, making them look easier
than they seemed when starting this adventure.
Thanks, -Stolee
Updates in V2
=============
* Based on the feedback, it is clear that 'git add' will require much more
careful testing and thought. I'm splitting it out of this series and it
will return with a follow-up.
* Test cases are improved, both in coverage and organization.
* The previous "unpack-trees: make sparse aware" patch is split into three
now.
* Stale messages based on an old implementation of the "protections" topic
are now fixed.
* Performance tests were re-run.
Derrick Stolee (8):
t1092: add tests for status/add and sparse files
unpack-trees: preserve cache_bottom
unpack-trees: compare sparse directories correctly
unpack-trees: stop recursing into sparse directories
dir.c: accept a directory as part of cone-mode patterns
status: skip sparse-checkout percentage with sparse-index
status: use sparse-index throughout
fsmonitor: test with sparse index
builtin/commit.c | 3 ++
dir.c | 11 +++++
read-cache.c | 10 +++-
t/t1092-sparse-checkout-compatibility.sh | 61 ++++++++++++++++++++++--
t/t7519-status-fsmonitor.sh | 48 +++++++++++++++++++
unpack-trees.c | 25 ++++++++--
wt-status.c | 14 ++++--
wt-status.h | 1 +
8 files changed, 161 insertions(+), 12 deletions(-)
base-commit: f723f370c89ad61f4f40aabfd3540b1ce19c00e5
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-932%2Fderrickstolee%2Fsparse-index%2Fstatus-and-add-v2
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-932/derrickstolee/sparse-index/status-and-add-v2
Pull-Request: https://github.com/gitgitgadget/git/pull/932
Range-diff vs v1:
1: b2cb5401eff8 ! 1: 3bac9edae7d8 t1092: add tests for status/add and sparse files
@@ Commit message
Untracked files are fine: adding new files both with 'git add .' and
'git add folder1/' works just as in a full checkout. This may not be
entirely desirable, but we are not intending to change behavior at the
- moment, only document it.
+ moment, only document it. A future change could alter the behavior to
+ be more sensible, and this test could be modified to satisfy the new
+ expected behavior.
Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
@@ t/t1092-sparse-checkout-compatibility.sh: test_expect_success 'add, commit, chec
+ # This "git add folder1/a" is completely ignored
+ # by the sparse-checkout repos. It causes the
+ # full repo to have a different staged environment.
-+ test_must_fail git -C sparse-checkout add folder1/a &&
-+ test_must_fail git -C sparse-index add folder1/a &&
++ #
++ # This is not a desirable behavior, but this test
++ # ensures that the sparse-index is not the cause
++ # of a behavior change.
++ test_sparse_match test_must_fail git add folder1/a &&
++ test_sparse_match test_must_fail git add --refresh folder1/a &&
+ git -C full-checkout checkout HEAD -- folder1/a &&
-+ test_sparse_match git status --porcelain=v2 &&
++ test_all_match git status --porcelain=v2 &&
+
+ test_all_match git add . &&
+ test_all_match git status --porcelain=v2 &&
-: ------------ > 2: 19344394379d unpack-trees: preserve cache_bottom
-: ------------ > 3: 24e71d8c0622 unpack-trees: compare sparse directories correctly
2: 0a3892d2ec9e ! 4: d3c8948d0a33 unpack-trees: make sparse aware
@@ Metadata
Author: Derrick Stolee <dstolee@microsoft.com>
## Commit message ##
- unpack-trees: make sparse aware
+ unpack-trees: stop recursing into sparse directories
- As a first step to integrate 'git status' and 'git add' with the sparse
- index, we must start integrating unpack_trees() with sparse directory
- entries. These changes are currently impossible to trigger because
- unpack_trees() calls ensure_full_index() if command_requires_full_index
- is true. This is the case for all commands at the moment. As we expand
- more commands to be sparse-aware, we might find that more changes are
- required to unpack_trees(). The current changes will suffice for
- 'status' and 'add'.
+ When walking trees using traverse_trees_recursive() and
+ unpack_callback(), we must not attempt to walk into a sparse directory
+ entry. There are no index entries within that directory to compare to
+ the tree object at that position, so skip over the entries of that tree.
- unpack_trees() calls the traverse_trees() API using unpack_callback()
- to decide if we should recurse into a subtree. We must add new abilities
- to skip a subtree if it corresponds to a sparse directory entry.
-
- It is important to be careful about the trailing directory separator
- that exists in the sparse directory entries but not in the subtree
- paths.
+ This code is used in many places, so the only way to test it is to start
+ removing the command_requres_full_index option from one builtin at a
+ time and carefully test that its use of unpack_trees() behaves correctly
+ with a sparse-index. Such tests will be added by later changes.
Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
- ## dir.h ##
-@@ dir.h: static inline int ce_path_match(struct index_state *istate,
- char *seen)
- {
- return match_pathspec(istate, pathspec, ce->name, ce_namelen(ce), 0, seen,
-- S_ISDIR(ce->ce_mode) || S_ISGITLINK(ce->ce_mode));
-+ S_ISSPARSEDIR(ce->ce_mode) || S_ISDIR(ce->ce_mode) || S_ISGITLINK(ce->ce_mode));
- }
-
- static inline int dir_path_match(struct index_state *istate,
-
- ## preload-index.c ##
-@@ preload-index.c: static void *preload_thread(void *_data)
- continue;
- if (S_ISGITLINK(ce->ce_mode))
- continue;
-+ if (S_ISSPARSEDIR(ce->ce_mode))
-+ continue;
- if (ce_uptodate(ce))
- continue;
- if (ce_skip_worktree(ce))
-
- ## read-cache.c ##
-@@ read-cache.c: int refresh_index(struct index_state *istate, unsigned int flags,
- if (ignore_skip_worktree && ce_skip_worktree(ce))
- continue;
-
-+ if (istate->sparse_index && S_ISSPARSEDIR(ce->ce_mode))
-+ continue;
-+
- if (pathspec && !ce_path_match(istate, ce, pathspec, seen))
- filtered = 1;
-
-
## unpack-trees.c ##
-@@ unpack-trees.c: static void mark_ce_used(struct cache_entry *ce, struct unpack_trees_options *o)
- {
- ce->ce_flags |= CE_UNPACKED;
-
-+ /*
-+ * If this is a sparse directory, don't advance cache_bottom.
-+ * That will be advanced later using the cache-tree data.
-+ */
-+ if (S_ISSPARSEDIR(ce->ce_mode))
-+ return;
-+
- if (o->cache_bottom < o->src_index->cache_nr &&
- o->src_index->cache[o->cache_bottom] == ce) {
- int bottom = o->cache_bottom;
-@@ unpack-trees.c: static int do_compare_entry(const struct cache_entry *ce,
- ce_len -= pathlen;
- ce_name = ce->name + pathlen;
-
-+ /* remove directory separator if a sparse directory entry */
-+ if (S_ISSPARSEDIR(ce->ce_mode))
-+ ce_len--;
- return df_name_compare(ce_name, ce_len, S_IFREG, name, namelen, mode);
- }
-
-@@ unpack-trees.c: static int compare_entry(const struct cache_entry *ce, const struct traverse_inf
- if (cmp)
- return cmp;
-
-+ /* If ce is a sparse directory, then allow equality here. */
-+ if (S_ISSPARSEDIR(ce->ce_mode))
-+ return 0;
-+
- /*
- * Even if the beginning compared identically, the ce should
- * compare as bigger than a directory leading up to it!
@@ unpack-trees.c: static int unpack_callback(int n, unsigned long mask, unsigned long dirmask, str
struct cache_entry *src[MAX_UNPACK_TREES + 1] = { NULL, };
struct unpack_trees_options *o = info->data;
const struct name_entry *p = names;
-+ unsigned recurse = 1;
++ unsigned unpack_tree = 1;
/* Find first entry with a real name (we could use "mask" too) */
while (!p->mode)
@@ unpack-trees.c: static int unpack_callback(int n, unsigned long mask, unsigned l
src[0] = ce;
+
+ if (S_ISSPARSEDIR(ce->ce_mode))
-+ recurse = 0;
++ unpack_tree = 0;
}
break;
}
}
- if (unpack_nondirectories(n, mask, dirmask, src, names, info) < 0)
-+ if (recurse &&
++ if (unpack_tree &&
+ unpack_nondirectories(n, mask, dirmask, src, names, info) < 0)
return -1;
@@ unpack-trees.c: static int unpack_callback(int n, unsigned long mask, unsigned l
}
- if (traverse_trees_recursive(n, dirmask, mask & ~dirmask,
-+ if (recurse &&
++ if (unpack_tree &&
+ traverse_trees_recursive(n, dirmask, mask & ~dirmask,
names, info) < 0)
return -1;
3: 28ca717e6526 ! 5: fd96b71968b6 dir.c: accept a directory as part of cone-mode patterns
@@ dir.c: enum pattern_match_result path_matches_pattern_list(
strbuf_addch(&parent_pathname, '/');
strbuf_add(&parent_pathname, pathname, pathlen);
-+ /* Directory requests should be added as if they are a file */
-+ if (parent_pathname.len > 1 &&
++ /*
++ * Directory entries are matched if and only if a file
++ * contained immediately within them is matched. For the
++ * case of a directory entry, modify the path to create
++ * a fake filename within this directory, allowing us to
++ * use the file-base matching logic in an equivalent way.
++ */
++ if (parent_pathname.len > 0 &&
+ parent_pathname.buf[parent_pathname.len - 1] == '/')
+ strbuf_add(&parent_pathname, "-", 1);
+
4: e86f874dd412 = 6: 1f4ba56e7416 status: skip sparse-checkout percentage with sparse-index
5: d7d4cad8be0b ! 7: 3d09368c0541 status: use sparse-index throughout
@@ Commit message
implementation details are already integrated with sparse-checkout, so
modify command_requires_full_index to be zero for cmd_status().
- By running the debugger for 'git status -uno' after that change, we find
- two instances of ensure_full_index() that were added for extra safety,
- but can be removed without issue.
+ In refresh_index(), we loop through the index entries to refresh their
+ stat() information. However, sparse directories have no stat()
+ information to populate. Ignore these entries.
- In refresh_index(), we loop through the index entries. The
- refresh_cache_ent() method copies the sparse directories into the
- refreshed index without issue.
+ This allows 'git status' to no longer expand a sparse index to a full
+ one. This is further tested by dropping the "-uno" option and adding an
+ untracked file into the worktree.
- The loop within run_diff_files() skips things that are in stage 0 and
- have skip-worktree enabled, so seems safe to disable ensure_full_index()
- here.
-
- This allows some cases of 'git status' to no longer expand a sparse
- index to a full one, giving the following performance improvements for
- p2000-sparse-checkout-operations.sh:
+ The performance test p2000-sparse-checkout-operations.sh demonstrates
+ these improvements:
Test HEAD~1 HEAD
-----------------------------------------------------------------------------
- 2000.2: git status (full-index-v3) 0.38(0.36+0.07) 0.37(0.31+0.10) -2.6%
- 2000.3: git status (full-index-v4) 0.38(0.29+0.12) 0.37(0.30+0.11) -2.6%
- 2000.4: git status (sparse-index-v3) 2.43(2.33+0.14) 0.04(0.05+0.04) -98.4%
- 2000.5: git status (sparse-index-v4) 2.44(2.35+0.13) 0.05(0.04+0.07) -98.0%
+ 2000.2: git status (full-index-v3) 0.31(0.30+0.05) 0.31(0.29+0.06) +0.0%
+ 2000.3: git status (full-index-v4) 0.31(0.29+0.07) 0.34(0.30+0.08) +9.7%
+ 2000.4: git status (sparse-index-v3) 2.35(2.28+0.10) 0.04(0.04+0.05) -98.3%
+ 2000.5: git status (sparse-index-v4) 2.35(2.24+0.15) 0.05(0.04+0.06) -97.9%
Note that since HEAD~1 was expanding the sparse index by parsing trees,
it was artificially slower than the full index case. Thus, the 98%
- improvement is misleading, and instead we should celebrate the 0.37s to
- 0.05s improvement of 82%. This is more indicative of the peformance
+ improvement is misleading, and instead we should celebrate the 0.34s to
+ 0.05s improvement of 85%. This is more indicative of the peformance
gains we are expecting by using a sparse index.
Note: we are dropping the assignment of core.fsmonitor here. This is not
@@ read-cache.c: int refresh_index(struct index_state *istate, unsigned int flags,
trace2_region_enter("index", "refresh", NULL);
- /* TODO: audit for interaction with sparse-index. */
- ensure_full_index(istate);
++
for (i = 0; i < istate->cache_nr; i++) {
struct cache_entry *ce, *new_entry;
int cache_errno = 0;
+@@ read-cache.c: int refresh_index(struct index_state *istate, unsigned int flags,
+ if (ignore_skip_worktree && ce_skip_worktree(ce))
+ continue;
+
++ /*
++ * If this entry is a sparse directory, then there isn't
++ * any stat() information to update. Ignore the entry.
++ */
++ if (S_ISSPARSEDIR(ce->ce_mode))
++ continue;
++
+ if (pathspec && !ce_path_match(istate, ce, pathspec, seen))
+ filtered = 1;
+
## t/t1092-sparse-checkout-compatibility.sh ##
@@ t/t1092-sparse-checkout-compatibility.sh: test_expect_success 'sparse-index is expanded and converted back' '
@@ t/t1092-sparse-checkout-compatibility.sh: test_expect_success 'sparse-index is e
+ init_repos &&
+
+ rm -f trace2.txt &&
++ echo >>sparse-index/untracked.txt &&
GIT_TRACE2_EVENT="$(pwd)/trace2.txt" GIT_TRACE2_EVENT_NESTING=10 \
- git -C sparse-index -c core.fsmonitor="" status -uno &&
- test_region index ensure_full_index trace2.txt
-+ git -C sparse-index status -uno &&
++ git -C sparse-index status &&
+ test_region ! index ensure_full_index trace2.txt
'
6: 434306541613 < -: ------------ dir: use expand_to_path() for sparse directories
7: f1a9ce4ef0e5 < -: ------------ add: allow operating on a sparse-only index
8: 6d7f30f2b90a < -: ------------ pathspec: stop calling ensure_full_index
9: 75199bbe8ca1 < -: ------------ t7519: add sparse directories to FS monitor tests
10: 9d1183ddd280 ! 8: 1fd033a6ebb2 fsmonitor: test with sparse index
@@ t/t7519-status-fsmonitor.sh: test_expect_success 'status succeeds after staging/
)
'
-+test_expect_success 'status succeeds with sparse index' '
-+ test_config core.fsmonitor "$TEST_DIRECTORY/t7519/fsmonitor-all" &&
++# Usage:
++# check_sparse_index_behavior [!]
++# If "!" is supplied, then we verify that we do not call ensure_full_index
++# during a call to 'git status'. Otherwise, we verify that we _do_ call it.
++check_sparse_index_behavior () {
+ git status --porcelain=v2 >expect &&
+ git sparse-checkout init --cone --sparse-index &&
++ git sparse-checkout set dir1 dir2 &&
+ GIT_TRACE2_EVENT="$(pwd)/trace2.txt" GIT_TRACE2_EVENT_NESTING=10 \
+ git status --porcelain=v2 >actual &&
-+ test_region ! index ensure_full_index trace2.txt &&
++ test_region $1 index ensure_full_index trace2.txt &&
+ test_cmp expect actual &&
+ rm trace2.txt &&
++ git sparse-checkout disable
++}
++
++test_expect_success 'status succeeds with sparse index' '
++ git reset --hard &&
++
++ test_config core.fsmonitor "$TEST_DIRECTORY/t7519/fsmonitor-all" &&
++ check_sparse_index_behavior ! &&
+
+ write_script .git/hooks/fsmonitor-test<<-\EOF &&
+ printf "last_update_token\0"
+ EOF
+ git config core.fsmonitor .git/hooks/fsmonitor-test &&
-+ git status --porcelain=v2 >expect &&
-+ git sparse-checkout init --cone --sparse-index &&
-+ GIT_TRACE2_EVENT="$(pwd)/trace2.txt" GIT_TRACE2_EVENT_NESTING=10 \
-+ git status --porcelain=v2 >actual &&
-+ test_region ! index ensure_full_index trace2.txt &&
-+ test_cmp expect actual &&
-+ rm trace2.txt &&
++ check_sparse_index_behavior ! &&
+
+ write_script .git/hooks/fsmonitor-test<<-\EOF &&
+ printf "last_update_token\0"
+ printf "dir1/modified\0"
+ EOF
-+ git config core.fsmonitor .git/hooks/fsmonitor-test &&
-+ git status --porcelain=v2 >expect &&
-+ git sparse-checkout init --cone --sparse-index &&
-+ GIT_TRACE2_EVENT="$(pwd)/trace2.txt" GIT_TRACE2_EVENT_NESTING=10 \
-+ git status --porcelain=v2 >actual &&
-+ test_region ! index ensure_full_index trace2.txt &&
-+ test_cmp expect actual &&
++ check_sparse_index_behavior ! &&
+
++ cp -r dir1 dir1a &&
++ git add dir1a &&
++ git commit -m "add dir1a" &&
++
++ # This one modifies outside the sparse-checkout definition
++ # and hence we expect to expand the sparse-index.
+ write_script .git/hooks/fsmonitor-test<<-\EOF &&
+ printf "last_update_token\0"
+ printf "dir1a/modified\0"
+ EOF
-+ git config core.fsmonitor .git/hooks/fsmonitor-test &&
-+ git status --porcelain=v2 >expect &&
-+ git sparse-checkout init --cone --sparse-index &&
-+ GIT_TRACE2_EVENT="$(pwd)/trace2.txt" GIT_TRACE2_EVENT_NESTING=10 \
-+ git status --porcelain=v2 >actual &&
-+ test_region index ensure_full_index trace2.txt &&
-+ test_cmp expect actual
++ check_sparse_index_behavior
+'
+
test_done
--
gitgitgadget
next prev parent reply other threads:[~2021-04-23 21:34 UTC|newest]
Thread overview: 215+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-04-13 14:01 [PATCH 00/10] Sparse-index: integrate with status and add Derrick Stolee via GitGitGadget
2021-04-13 14:01 ` [PATCH 01/10] t1092: add tests for status/add and sparse files Derrick Stolee via GitGitGadget
2021-04-20 21:52 ` Elijah Newren
2021-04-21 13:21 ` Derrick Stolee
2021-04-21 15:14 ` Matheus Tavares Bernardino
2021-04-23 20:12 ` Derrick Stolee
2021-04-13 14:01 ` [PATCH 02/10] unpack-trees: make sparse aware Derrick Stolee via GitGitGadget
2021-04-20 23:00 ` Elijah Newren
2021-04-21 13:41 ` Derrick Stolee
2021-04-21 16:11 ` Elijah Newren
2021-04-22 2:24 ` Matheus Tavares Bernardino
2021-04-21 17:27 ` Derrick Stolee
2021-04-21 18:55 ` Matheus Tavares Bernardino
2021-04-21 19:10 ` Elijah Newren
2021-04-21 19:51 ` Matheus Tavares Bernardino
2021-04-21 18:56 ` Elijah Newren
2021-04-23 20:16 ` Derrick Stolee
2021-04-13 14:01 ` [PATCH 03/10] dir.c: accept a directory as part of cone-mode patterns Derrick Stolee via GitGitGadget
2021-04-20 23:21 ` Elijah Newren
2021-04-21 13:47 ` Derrick Stolee
2021-04-13 14:01 ` [PATCH 04/10] status: skip sparse-checkout percentage with sparse-index Derrick Stolee via GitGitGadget
2021-04-20 23:26 ` Elijah Newren
2021-04-21 13:51 ` Derrick Stolee
2021-04-13 14:01 ` [PATCH 05/10] status: use sparse-index throughout Derrick Stolee via GitGitGadget
2021-04-21 0:44 ` Elijah Newren
2021-04-21 13:55 ` Derrick Stolee
2021-04-13 14:01 ` [PATCH 06/10] dir: use expand_to_path() for sparse directories Derrick Stolee via GitGitGadget
2021-04-21 0:52 ` Elijah Newren
2021-04-21 0:53 ` Elijah Newren
2021-04-21 14:03 ` Derrick Stolee
2021-04-13 14:01 ` [PATCH 07/10] add: allow operating on a sparse-only index Derrick Stolee via GitGitGadget
2021-04-13 14:01 ` [PATCH 08/10] pathspec: stop calling ensure_full_index Derrick Stolee via GitGitGadget
2021-04-21 0:57 ` Elijah Newren
2021-04-13 14:01 ` [PATCH 09/10] t7519: add sparse directories to FS monitor tests Derrick Stolee via GitGitGadget
2021-04-13 14:01 ` [PATCH 10/10] fsmonitor: test with sparse index Derrick Stolee via GitGitGadget
2021-04-21 7:00 ` Elijah Newren
2021-04-13 20:45 ` [PATCH 00/10] Sparse-index: integrate with status and add Matheus Tavares Bernardino
2021-04-14 16:31 ` Derrick Stolee
2021-04-23 21:34 ` Derrick Stolee via GitGitGadget [this message]
2021-04-23 21:34 ` [PATCH v2 1/8] t1092: add tests for status/add and sparse files Derrick Stolee via GitGitGadget
2021-05-13 12:40 ` Matheus Tavares Bernardino
2021-05-14 12:27 ` Derrick Stolee
2021-04-23 21:34 ` [PATCH v2 2/8] unpack-trees: preserve cache_bottom Derrick Stolee via GitGitGadget
2021-04-23 21:34 ` [PATCH v2 3/8] unpack-trees: compare sparse directories correctly Derrick Stolee via GitGitGadget
2021-05-13 3:26 ` Elijah Newren
2021-04-23 21:34 ` [PATCH v2 4/8] unpack-trees: stop recursing into sparse directories Derrick Stolee via GitGitGadget
2021-05-13 3:31 ` Elijah Newren
2021-04-23 21:34 ` [PATCH v2 5/8] dir.c: accept a directory as part of cone-mode patterns Derrick Stolee via GitGitGadget
2021-04-23 21:34 ` [PATCH v2 6/8] status: skip sparse-checkout percentage with sparse-index Derrick Stolee via GitGitGadget
2021-04-23 21:34 ` [PATCH v2 7/8] status: use sparse-index throughout Derrick Stolee via GitGitGadget
2021-04-23 21:34 ` [PATCH v2 8/8] fsmonitor: test with sparse index Derrick Stolee via GitGitGadget
2021-05-13 4:12 ` [PATCH v2 0/8] Sparse-index: integrate with status Elijah Newren
2021-05-14 18:28 ` Derrick Stolee
2021-05-14 18:30 ` [PATCH v3 00/12] " Derrick Stolee via GitGitGadget
2021-05-14 18:31 ` [PATCH v3 01/12] sparse-index: skip indexes with unmerged entries Derrick Stolee via GitGitGadget
2021-05-14 18:31 ` [PATCH v3 02/12] sparse-index: include EXTENDED flag when expanding Derrick Stolee via GitGitGadget
2021-05-18 1:33 ` Elijah Newren
2021-05-18 14:57 ` Derrick Stolee
2021-05-18 17:48 ` Elijah Newren
2021-05-18 18:16 ` Derrick Stolee
2021-05-14 18:31 ` [PATCH v3 03/12] t1092: expand repository data shape Derrick Stolee via GitGitGadget
2021-05-18 1:49 ` Elijah Newren
2021-05-18 14:59 ` Derrick Stolee
2021-05-14 18:31 ` [PATCH v3 04/12] t1092: add tests for status/add and sparse files Derrick Stolee via GitGitGadget
2021-05-14 18:31 ` [PATCH v3 05/12] unpack-trees: preserve cache_bottom Derrick Stolee via GitGitGadget
2021-05-14 18:31 ` [PATCH v3 06/12] unpack-trees: compare sparse directories correctly Derrick Stolee via GitGitGadget
2021-05-14 18:31 ` [PATCH v3 07/12] unpack-trees: stop recursing into sparse directories Derrick Stolee via GitGitGadget
2021-05-18 2:03 ` Elijah Newren
2021-05-18 2:06 ` Elijah Newren
2021-05-18 19:20 ` Derrick Stolee
2021-05-14 18:31 ` [PATCH v3 08/12] dir.c: accept a directory as part of cone-mode patterns Derrick Stolee via GitGitGadget
2021-05-14 18:31 ` [PATCH v3 09/12] status: skip sparse-checkout percentage with sparse-index Derrick Stolee via GitGitGadget
2021-05-14 18:31 ` [PATCH v3 10/12] status: use sparse-index throughout Derrick Stolee via GitGitGadget
2021-05-14 18:31 ` [PATCH v3 11/12] wt-status: expand added sparse directory entries Derrick Stolee via GitGitGadget
2021-05-18 2:27 ` Elijah Newren
2021-05-18 18:26 ` Derrick Stolee
2021-05-18 19:04 ` Derrick Stolee
2021-05-19 8:38 ` Elijah Newren
2021-05-14 18:31 ` [PATCH v3 12/12] fsmonitor: integrate with sparse index Derrick Stolee via GitGitGadget
2021-05-21 11:59 ` [PATCH v4 00/12] Sparse-index: integrate with status Derrick Stolee via GitGitGadget
2021-05-21 11:59 ` [PATCH v4 01/12] sparse-index: skip indexes with unmerged entries Derrick Stolee via GitGitGadget
2021-05-21 11:59 ` [PATCH v4 02/12] sparse-index: include EXTENDED flag when expanding Derrick Stolee via GitGitGadget
2021-05-21 11:59 ` [PATCH v4 03/12] t1092: expand repository data shape Derrick Stolee via GitGitGadget
2021-05-21 11:59 ` [PATCH v4 04/12] t1092: add tests for status/add and sparse files Derrick Stolee via GitGitGadget
2021-05-21 11:59 ` [PATCH v4 05/12] unpack-trees: preserve cache_bottom Derrick Stolee via GitGitGadget
2021-05-21 11:59 ` [PATCH v4 06/12] unpack-trees: compare sparse directories correctly Derrick Stolee via GitGitGadget
2021-05-21 11:59 ` [PATCH v4 07/12] unpack-trees: be careful around sparse directory entries Derrick Stolee via GitGitGadget
2021-05-28 11:36 ` Derrick Stolee
2021-05-21 11:59 ` [PATCH v4 08/12] dir.c: accept a directory as part of cone-mode patterns Derrick Stolee via GitGitGadget
2021-05-21 11:59 ` [PATCH v4 09/12] status: skip sparse-checkout percentage with sparse-index Derrick Stolee via GitGitGadget
2021-05-21 11:59 ` [PATCH v4 10/12] status: use sparse-index throughout Derrick Stolee via GitGitGadget
2021-05-21 11:59 ` [PATCH v4 11/12] wt-status: expand added sparse directory entries Derrick Stolee via GitGitGadget
2021-05-21 11:59 ` [PATCH v4 12/12] fsmonitor: integrate with sparse index Derrick Stolee via GitGitGadget
2021-06-07 12:33 ` [PATCH v5 00/14] Sparse-index: integrate with status Derrick Stolee via GitGitGadget
2021-06-07 12:33 ` [PATCH v5 01/14] sparse-index: skip indexes with unmerged entries Derrick Stolee via GitGitGadget
2021-06-07 12:34 ` [PATCH v5 02/14] sparse-index: include EXTENDED flag when expanding Derrick Stolee via GitGitGadget
2021-06-08 18:56 ` Elijah Newren
2021-06-09 17:39 ` Derrick Stolee
2021-06-09 18:11 ` Elijah Newren
2021-06-07 12:34 ` [PATCH v5 03/14] t1092: replace incorrect 'echo' with 'cat' Derrick Stolee via GitGitGadget
2021-06-08 19:18 ` Elijah Newren
2021-06-07 12:34 ` [PATCH v5 04/14] t1092: expand repository data shape Derrick Stolee via GitGitGadget
2021-06-07 12:34 ` [PATCH v5 05/14] t1092: add tests for status/add and sparse files Derrick Stolee via GitGitGadget
2021-06-07 12:34 ` [PATCH v5 06/14] unpack-trees: preserve cache_bottom Derrick Stolee via GitGitGadget
2021-06-07 12:34 ` [PATCH v5 07/14] unpack-trees: compare sparse directories correctly Derrick Stolee via GitGitGadget
2021-06-07 12:34 ` [PATCH v5 08/14] unpack-trees: unpack sparse directory entries Derrick Stolee via GitGitGadget
2021-06-09 3:48 ` Elijah Newren
2021-06-09 20:21 ` Derrick Stolee
2021-06-07 12:34 ` [PATCH v5 09/14] dir.c: accept a directory as part of cone-mode patterns Derrick Stolee via GitGitGadget
2021-06-07 12:34 ` [PATCH v5 10/14] diff-lib: handle index diffs with sparse dirs Derrick Stolee via GitGitGadget
2021-06-07 15:26 ` Derrick Stolee
2021-06-08 1:05 ` Junio C Hamano
2021-06-08 13:00 ` Derrick Stolee
2021-06-09 5:47 ` Elijah Newren
2021-06-09 6:32 ` Junio C Hamano
2021-06-09 8:11 ` Elijah Newren
2021-06-09 20:33 ` Derrick Stolee
2021-06-10 17:45 ` Derrick Stolee
2021-06-10 21:31 ` Elijah Newren
2021-06-11 12:57 ` Derrick Stolee
2021-06-11 17:27 ` Derrick Stolee
2021-06-07 12:34 ` [PATCH v5 11/14] status: skip sparse-checkout percentage with sparse-index Derrick Stolee via GitGitGadget
2021-06-07 12:34 ` [PATCH v5 12/14] status: use sparse-index throughout Derrick Stolee via GitGitGadget
2021-06-07 12:34 ` [PATCH v5 13/14] wt-status: expand added sparse directory entries Derrick Stolee via GitGitGadget
2021-06-09 5:27 ` Elijah Newren
2021-06-09 20:49 ` Derrick Stolee
2021-06-07 12:34 ` [PATCH v5 14/14] fsmonitor: integrate with sparse index Derrick Stolee via GitGitGadget
2021-06-29 1:51 ` [PATCH v6 00/14] Sparse-index: integrate with status Derrick Stolee via GitGitGadget
2021-06-29 1:51 ` [PATCH v6 01/14] sparse-index: skip indexes with unmerged entries Derrick Stolee via GitGitGadget
2021-06-29 1:51 ` [PATCH v6 02/14] sparse-index: include EXTENDED flag when expanding Derrick Stolee via GitGitGadget
2021-06-29 1:51 ` [PATCH v6 03/14] t1092: replace incorrect 'echo' with 'cat' Derrick Stolee via GitGitGadget
2021-06-29 1:51 ` [PATCH v6 04/14] t1092: expand repository data shape Derrick Stolee via GitGitGadget
2021-06-29 1:51 ` [PATCH v6 05/14] t1092: add tests for status/add and sparse files Derrick Stolee via GitGitGadget
2021-06-29 1:51 ` [PATCH v6 06/14] unpack-trees: preserve cache_bottom Derrick Stolee via GitGitGadget
2021-06-29 1:51 ` [PATCH v6 07/14] unpack-trees: compare sparse directories correctly Derrick Stolee via GitGitGadget
2021-06-29 1:51 ` [PATCH v6 08/14] unpack-trees: unpack sparse directory entries Derrick Stolee via GitGitGadget
2021-06-29 1:51 ` [PATCH v6 09/14] dir.c: accept a directory as part of cone-mode patterns Derrick Stolee via GitGitGadget
2021-06-29 1:51 ` [PATCH v6 10/14] diff-lib: handle index diffs with sparse dirs Derrick Stolee via GitGitGadget
2021-06-29 1:51 ` [PATCH v6 11/14] status: skip sparse-checkout percentage with sparse-index Derrick Stolee via GitGitGadget
2021-06-29 1:51 ` [PATCH v6 12/14] status: use sparse-index throughout Derrick Stolee via GitGitGadget
2021-06-29 1:51 ` [PATCH v6 13/14] wt-status: expand added sparse directory entries Derrick Stolee via GitGitGadget
2021-06-29 1:51 ` [PATCH v6 14/14] fsmonitor: integrate with sparse index Derrick Stolee via GitGitGadget
2021-06-29 2:02 ` [PATCH v6 00/14] Sparse-index: integrate with status Derrick Stolee
2021-06-29 2:04 ` [PATCH v7 00/16] " Derrick Stolee via GitGitGadget
2021-06-29 2:04 ` [PATCH v7 01/16] sparse-index: skip indexes with unmerged entries Derrick Stolee via GitGitGadget
2021-06-29 2:04 ` [PATCH v7 02/16] sparse-index: include EXTENDED flag when expanding Derrick Stolee via GitGitGadget
2021-06-29 2:04 ` [PATCH v7 03/16] t1092: replace incorrect 'echo' with 'cat' Derrick Stolee via GitGitGadget
2021-06-29 2:04 ` [PATCH v7 04/16] t1092: expand repository data shape Derrick Stolee via GitGitGadget
2021-06-29 2:04 ` [PATCH v7 05/16] t1092: add tests for status/add and sparse files Derrick Stolee via GitGitGadget
2021-06-29 2:04 ` [PATCH v7 06/16] unpack-trees: preserve cache_bottom Derrick Stolee via GitGitGadget
2021-06-29 2:04 ` [PATCH v7 07/16] unpack-trees: compare sparse directories correctly Derrick Stolee via GitGitGadget
2021-06-29 2:04 ` [PATCH v7 08/16] unpack-trees: rename unpack_nondirectories() Derrick Stolee via GitGitGadget
2021-06-29 2:04 ` [PATCH v7 09/16] unpack-trees: unpack sparse directory entries Derrick Stolee via GitGitGadget
2021-07-07 22:25 ` Elijah Newren
2021-06-29 2:04 ` [PATCH v7 10/16] unpack-trees: handle dir/file conflict of sparse entries Derrick Stolee via GitGitGadget
2021-07-07 23:19 ` Elijah Newren
2021-07-09 0:58 ` Elijah Newren
2021-07-12 13:46 ` Derrick Stolee
2021-06-29 2:04 ` [PATCH v7 11/16] dir.c: accept a directory as part of cone-mode patterns Derrick Stolee via GitGitGadget
2021-06-29 2:04 ` [PATCH v7 12/16] diff-lib: handle index diffs with sparse dirs Derrick Stolee via GitGitGadget
2021-07-08 23:10 ` Elijah Newren
2021-07-08 23:51 ` Elijah Newren
2021-07-12 13:52 ` Derrick Stolee
2021-06-29 2:04 ` [PATCH v7 13/16] status: skip sparse-checkout percentage with sparse-index Derrick Stolee via GitGitGadget
2021-06-29 2:04 ` [PATCH v7 14/16] status: use sparse-index throughout Derrick Stolee via GitGitGadget
2021-06-29 2:04 ` [PATCH v7 15/16] wt-status: expand added sparse directory entries Derrick Stolee via GitGitGadget
2021-07-09 1:03 ` Elijah Newren
2021-07-12 13:56 ` Derrick Stolee
2021-07-12 19:32 ` Elijah Newren
2021-07-12 19:41 ` Derrick Stolee
2021-06-29 2:04 ` [PATCH v7 16/16] fsmonitor: integrate with sparse index Derrick Stolee via GitGitGadget
2021-06-29 2:16 ` [PATCH v7 00/16] Sparse-index: integrate with status Derrick Stolee
2021-06-30 14:32 ` Elijah Newren
2021-07-09 1:16 ` Elijah Newren
2021-07-12 14:46 ` Derrick Stolee
2021-07-12 17:55 ` [PATCH v8 00/15] " Derrick Stolee via GitGitGadget
2021-07-12 17:55 ` [PATCH v8 01/15] sparse-index: skip indexes with unmerged entries Derrick Stolee via GitGitGadget
2021-07-12 17:55 ` [PATCH v8 02/15] sparse-index: include EXTENDED flag when expanding Derrick Stolee via GitGitGadget
2021-07-12 17:55 ` [PATCH v8 03/15] t1092: replace incorrect 'echo' with 'cat' Derrick Stolee via GitGitGadget
2021-07-14 0:02 ` Bagas Sanjaya
2021-07-12 17:55 ` [PATCH v8 04/15] t1092: expand repository data shape Derrick Stolee via GitGitGadget
2021-07-12 17:55 ` [PATCH v8 05/15] t1092: add tests for status/add and sparse files Derrick Stolee via GitGitGadget
2021-07-12 17:55 ` [PATCH v8 06/15] unpack-trees: preserve cache_bottom Derrick Stolee via GitGitGadget
2021-07-12 17:55 ` [PATCH v8 07/15] unpack-trees: compare sparse directories correctly Derrick Stolee via GitGitGadget
2021-07-12 17:55 ` [PATCH v8 08/15] unpack-trees: rename unpack_nondirectories() Derrick Stolee via GitGitGadget
2021-07-12 17:55 ` [PATCH v8 09/15] unpack-trees: unpack sparse directory entries Derrick Stolee via GitGitGadget
2021-07-12 17:55 ` [PATCH v8 10/15] dir.c: accept a directory as part of cone-mode patterns Derrick Stolee via GitGitGadget
2021-07-12 17:55 ` [PATCH v8 11/15] diff-lib: handle index diffs with sparse dirs Derrick Stolee via GitGitGadget
2021-07-12 17:55 ` [PATCH v8 12/15] status: skip sparse-checkout percentage with sparse-index Derrick Stolee via GitGitGadget
2021-07-12 17:55 ` [PATCH v8 13/15] status: use sparse-index throughout Derrick Stolee via GitGitGadget
2021-07-12 17:55 ` [PATCH v8 14/15] wt-status: expand added sparse directory entries Derrick Stolee via GitGitGadget
2021-07-12 17:55 ` [PATCH v8 15/15] fsmonitor: integrate with sparse index Derrick Stolee via GitGitGadget
2021-07-12 19:38 ` [PATCH v8 00/15] Sparse-index: integrate with status Elijah Newren
2021-07-13 12:57 ` Derrick Stolee
2021-07-13 17:37 ` Elijah Newren
2021-07-14 13:12 ` [PATCH v9 00/16] " Derrick Stolee via GitGitGadget
2021-07-14 13:12 ` [PATCH v9 01/16] sparse-index: skip indexes with unmerged entries Derrick Stolee via GitGitGadget
2021-07-14 13:12 ` [PATCH v9 02/16] sparse-index: include EXTENDED flag when expanding Derrick Stolee via GitGitGadget
2021-07-14 13:12 ` [PATCH v9 03/16] t1092: replace incorrect 'echo' with 'cat' Derrick Stolee via GitGitGadget
2021-07-14 13:12 ` [PATCH v9 04/16] t1092: expand repository data shape Derrick Stolee via GitGitGadget
2021-07-14 13:12 ` [PATCH v9 05/16] t1092: add tests for status/add and sparse files Derrick Stolee via GitGitGadget
2021-07-14 13:12 ` [PATCH v9 06/16] unpack-trees: preserve cache_bottom Derrick Stolee via GitGitGadget
2021-07-14 13:12 ` [PATCH v9 07/16] unpack-trees: compare sparse directories correctly Derrick Stolee via GitGitGadget
2021-07-14 13:12 ` [PATCH v9 08/16] unpack-trees: rename unpack_nondirectories() Derrick Stolee via GitGitGadget
2021-07-14 13:12 ` [PATCH v9 09/16] unpack-trees: unpack sparse directory entries Derrick Stolee via GitGitGadget
2021-07-14 13:12 ` [PATCH v9 10/16] dir.c: accept a directory as part of cone-mode patterns Derrick Stolee via GitGitGadget
2021-07-14 13:12 ` [PATCH v9 11/16] diff-lib: handle index diffs with sparse dirs Derrick Stolee via GitGitGadget
2021-07-14 13:12 ` [PATCH v9 12/16] status: skip sparse-checkout percentage with sparse-index Derrick Stolee via GitGitGadget
2021-07-14 13:12 ` [PATCH v9 13/16] status: use sparse-index throughout Derrick Stolee via GitGitGadget
2021-07-14 13:12 ` [PATCH v9 14/16] wt-status: expand added sparse directory entries Derrick Stolee via GitGitGadget
2021-07-14 13:12 ` [PATCH v9 15/16] fsmonitor: integrate with sparse index Derrick Stolee via GitGitGadget
2021-07-14 13:12 ` [PATCH v9 16/16] t1092: document bad sparse-checkout behavior Derrick Stolee via GitGitGadget
2021-07-14 15:08 ` [PATCH v9 00/16] Sparse-index: integrate with status Elijah Newren
2021-07-14 20:37 ` Junio C Hamano
2021-07-15 2:41 ` Elijah Newren
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=pull.932.v2.git.1619213665.gitgitgadget@gmail.com \
--to=gitgitgadget@gmail.com \
--cc=derrickstolee@github.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=matheus.bernardino@usp.br \
--cc=newren@gmail.com \
--cc=stolee@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.