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
List information: http://vger.kernel.org/majordomo-info.html
* 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.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).