git/builtin
Shuqi Liang 8fac776f44 worktree: integrate with sparse-index
The index is read in 'worktree.c' at two points:

1.The 'validate_no_submodules' function, which checks if there are any
submodules present in the worktree.

2.The 'check_clean_worktree' function, which verifies if a worktree is
'clean', i.e., there are no untracked or modified but uncommitted files.
This is done by running the 'git status' command, and an error message
is thrown if the worktree is not clean. Given that 'git status' is
already sparse-aware, the function is also sparse-aware.

Hence we can just set the requires-full-index to false for
"git worktree".

Add tests that verify that 'git worktree' behaves correctly when the
sparse index is enabled and test to ensure the index is not expanded.

The `p2000` tests demonstrate a ~20% execution time reduction for
'git worktree' using a sparse index:

(Note:the p2000 test results didn't reflect the huge speedup because of
the index reading time is minuscule comparing to the filesystem
operations.)

Test                                       before  after
-----------------------------------------------------------------------
2000.102: git worktree add....(full-v3)    3.15    2.82  -10.5%
2000.103: git worktree add....(full-v4)    3.14    2.84  -9.6%
2000.104: git worktree add....(sparse-v3)  2.59    2.14  -16.4%
2000.105: git worktree add....(sparse-v4)  2.10    1.57  -25.2%

Helped-by: Victoria Dye <vdye@github.com>
Signed-off-by: Shuqi Liang <cheskaqiqi@gmail.com>
Acked-by: Victoria Dye <vdye@github.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2023-06-12 12:13:58 -07:00
..
add.c editor: move editor-related functions and declarations into common file 2023-04-11 08:52:10 -07:00
am.c pager.h: move declarations for pager.c functions from cache.h 2023-04-11 08:52:10 -07:00
annotate.c strvec: rename struct fields 2020-07-30 19:18:06 -07:00
apply.c hash-ll.h: split out of hash.h to remove dependency on repository.h 2023-04-24 12:47:32 -07:00
archive.c hash-ll.h: split out of hash.h to remove dependency on repository.h 2023-04-24 12:47:32 -07:00
bisect.c copy.h: move declarations for copy.c functions from cache.h 2023-04-24 12:47:31 -07:00
blame.c pager.h: move declarations for pager.c functions from cache.h 2023-04-11 08:52:10 -07:00
branch.c Merge branch 'rj/branch-unborn-in-other-worktrees' 2023-05-15 13:59:03 -07:00
bugreport.c editor: move editor-related functions and declarations into common file 2023-04-11 08:52:10 -07:00
bundle.c hash-ll.h: split out of hash.h to remove dependency on repository.h 2023-04-24 12:47:32 -07:00
cat-file.c object-file.h: move declarations for object-file.c functions from cache.h 2023-04-11 08:52:10 -07:00
check-attr.c Merge branch 'jc/attr-source-tree' 2023-05-17 10:11:41 -07:00
check-ignore.c hash-ll.h: split out of hash.h to remove dependency on repository.h 2023-04-24 12:47:32 -07:00
check-mailmap.c write-or-die.h: move declarations for write-or-die.c functions from cache.h 2023-03-21 10:56:54 -07:00
check-ref-format.c Merge branch 'en/header-split-cleanup' 2023-04-06 13:38:31 -07:00
checkout--worker.c treewide: be explicit about dependence on gettext.h 2023-03-21 10:56:51 -07:00
checkout-index.c hash-ll.h: split out of hash.h to remove dependency on repository.h 2023-04-24 12:47:32 -07:00
checkout.c symlinks.h: move declarations for symlinks.c functions from cache.h 2023-04-24 12:47:31 -07:00
clean.c hash-ll.h: split out of hash.h to remove dependency on repository.h 2023-04-24 12:47:32 -07:00
clone.c Merge branch 'en/header-split-cache-h-part-2' 2023-05-09 16:45:46 -07:00
column.c treewide: be explicit about dependence on gettext.h 2023-03-21 10:56:51 -07:00
commit-graph.c treewide: be explicit about dependence on trace.h & trace2.h 2023-04-11 08:52:08 -07:00
commit-tree.c object-name.h: move declarations for object-name.c functions from cache.h 2023-04-11 08:52:09 -07:00
commit.c editor: move editor-related functions and declarations into common file 2023-04-11 08:52:10 -07:00
config.c hash-ll.h: split out of hash.h to remove dependency on repository.h 2023-04-24 12:47:32 -07:00
count-objects.c environment.h: move declarations for environment.c functions from cache.h 2023-03-21 10:56:53 -07:00
credential-cache--daemon.c Merge branch 'mh/credential-oauth-refresh-token' 2023-05-10 10:23:29 -07:00
credential-cache.c hash-ll.h: split out of hash.h to remove dependency on repository.h 2023-04-24 12:47:32 -07:00
credential-store.c hash-ll.h: split out of hash.h to remove dependency on repository.h 2023-04-24 12:47:32 -07:00
credential.c builtins: mark unused prefix parameters 2023-03-28 14:11:24 -07:00
describe.c Merge branch 'en/header-split-cache-h' 2023-04-25 13:56:20 -07:00
diagnose.c object-file.h: move declarations for object-file.c functions from cache.h 2023-04-11 08:52:10 -07:00
diff-files.c diff-files: integrate with sparse index 2023-05-09 14:26:36 -07:00
diff-index.c setup.h: move declarations for setup.c functions from cache.h 2023-03-21 10:56:54 -07:00
diff-tree.c commit.h: reduce unnecessary includes 2023-04-24 12:47:33 -07:00
diff.c Merge branch 'en/header-split-cache-h-part-2' 2023-05-09 16:45:46 -07:00
difftool.c Merge branch 'en/header-split-cache-h-part-2' 2023-05-09 16:45:46 -07:00
fast-export.c Merge branch 'en/header-split-cache-h' 2023-04-25 13:56:20 -07:00
fast-import.c Merge branch 'en/header-split-cache-h' 2023-04-25 13:56:20 -07:00
fetch-pack.c Merge branch 'en/header-split-cache-h' 2023-04-25 13:56:20 -07:00
fetch.c Merge branch 'ps/fetch-output-format' 2023-05-15 13:59:07 -07:00
fmt-merge-msg.c wrapper.h: move declarations for wrapper.c functions from cache.h 2023-03-21 10:56:53 -07:00
for-each-ref.c Merge branch 'ow/ref-filter-omit-empty' 2023-04-21 15:35:05 -07:00
for-each-repo.c Merge branch 'en/header-split-cache-h-part-2' 2023-05-09 16:45:46 -07:00
fsck.c fsck: use local repository 2023-05-02 08:48:23 -07:00
fsmonitor--daemon.c Merge branch 'en/header-split-cache-h' 2023-04-25 13:56:20 -07:00
gc.c Merge branch 'en/header-split-cache-h-part-2' 2023-05-09 16:45:46 -07:00
get-tar-commit-id.c Merge branch 'rs/get-tar-commit-id-use-defined-const' 2023-04-20 14:33:36 -07:00
grep.c pager.h: move declarations for pager.c functions from cache.h 2023-04-11 08:52:10 -07:00
hash-object.c object-file.h: move declarations for object-file.c functions from cache.h 2023-04-11 08:52:10 -07:00
help.c hash-ll.h: split out of hash.h to remove dependency on repository.h 2023-04-24 12:47:32 -07:00
hook.c treewide: be explicit about dependence on gettext.h 2023-03-21 10:56:51 -07:00
index-pack.c Merge branch 'tb/pack-revindex-on-disk' 2023-04-27 16:00:59 -07:00
init-db.c hash-ll.h: split out of hash.h to remove dependency on repository.h 2023-04-24 12:47:32 -07:00
interpret-trailers.c treewide: be explicit about dependence on gettext.h 2023-03-21 10:56:51 -07:00
log.c Merge branch 'en/header-split-cache-h-part-2' 2023-05-09 16:45:46 -07:00
ls-files.c Merge branch 'en/header-split-cache-h' 2023-04-25 13:56:20 -07:00
ls-remote.c Merge branch 'en/header-split-cache-h-part-2' 2023-05-09 16:45:46 -07:00
ls-tree.c object-name.h: move declarations for object-name.c functions from cache.h 2023-04-11 08:52:09 -07:00
mailinfo.c environment.h: move declarations for environment.c functions from cache.h 2023-03-21 10:56:53 -07:00
mailsplit.c Merge branch 'en/header-split-cleanup' 2023-04-06 13:38:31 -07:00
merge-base.c object-name.h: move declarations for object-name.c functions from cache.h 2023-04-11 08:52:09 -07:00
merge-file.c setup.h: move declarations for setup.c functions from cache.h 2023-03-21 10:56:54 -07:00
merge-index.c Merge branch 'en/header-split-cache-h-part-2' 2023-05-09 16:45:46 -07:00
merge-ours.c builtins: mark unused prefix parameters 2023-03-28 14:11:24 -07:00
merge-recursive.c Merge branch 'en/header-split-cache-h-part-2' 2023-05-09 16:45:46 -07:00
merge-tree.c Merge branch 'ds/merge-tree-use-config' 2023-05-15 13:59:06 -07:00
merge.c editor: move editor-related functions and declarations into common file 2023-04-11 08:52:10 -07:00
mktag.c Merge branch 'en/header-split-cache-h' 2023-04-25 13:56:20 -07:00
mktree.c treewide: be explicit about dependence on gettext.h 2023-03-21 10:56:51 -07:00
multi-pack-index.c environment.h: move declarations for environment.c functions from cache.h 2023-03-21 10:56:53 -07:00
mv.c hash-ll.h: split out of hash.h to remove dependency on repository.h 2023-04-24 12:47:32 -07:00
name-rev.c name-rev: make --stdin hidden 2023-05-06 14:32:20 -07:00
notes.c editor: move editor-related functions and declarations into common file 2023-04-11 08:52:10 -07:00
pack-objects.c attr: teach "--attr-source=<tree>" global option to "git" 2023-05-06 14:34:09 -07:00
pack-redundant.c Merge branch 'en/header-split-cleanup' 2023-04-06 13:38:31 -07:00
pack-refs.c treewide: be explicit about dependence on gettext.h 2023-03-21 10:56:51 -07:00
patch-id.c treewide: be explicit about dependence on gettext.h 2023-03-21 10:56:51 -07:00
prune-packed.c treewide: be explicit about dependence on gettext.h 2023-03-21 10:56:51 -07:00
prune.c object-file.h: move declarations for object-file.c functions from cache.h 2023-04-11 08:52:10 -07:00
pull.c Merge branch 'ob/messages-capitalize-exception' 2023-05-09 16:45:46 -07:00
push.c Merge branch 'tl/push-branches-is-an-alias-for-all' 2023-05-15 13:59:05 -07:00
range-diff.c object-name.h: move declarations for object-name.c functions from cache.h 2023-04-11 08:52:09 -07:00
read-tree.c hash-ll.h: split out of hash.h to remove dependency on repository.h 2023-04-24 12:47:32 -07:00
rebase.c Merge branch 'en/header-split-cache-h' 2023-04-25 13:56:20 -07:00
receive-pack.c Merge branch 'en/header-split-cache-h-part-2' 2023-05-09 16:45:46 -07:00
reflog.c Merge branch 'en/header-split-cleanup' 2023-04-06 13:38:31 -07:00
remote-ext.c builtins: annotate always-empty prefix parameters 2023-03-28 14:11:24 -07:00
remote-fd.c builtins: annotate always-empty prefix parameters 2023-03-28 14:11:24 -07:00
remote.c Merge branch 'en/header-split-cleanup' 2023-04-06 13:38:31 -07:00
repack.c Merge branch 'en/header-split-cache-h-part-2' 2023-05-09 16:45:46 -07:00
replace.c editor: move editor-related functions and declarations into common file 2023-04-11 08:52:10 -07:00
rerere.c hash-ll.h: split out of hash.h to remove dependency on repository.h 2023-04-24 12:47:32 -07:00
reset.c object-name.h: move declarations for object-name.c functions from cache.h 2023-04-11 08:52:09 -07:00
rev-list.c object-file.h: move declarations for object-file.c functions from cache.h 2023-04-11 08:52:10 -07:00
rev-parse.c object-name.h: move declarations for object-name.c functions from cache.h 2023-04-11 08:52:09 -07:00
revert.c Merge branch 'pw/rebase-cleanup-merge-strategy-option-handling' 2023-04-17 18:05:13 -07:00
rm.c hash-ll.h: split out of hash.h to remove dependency on repository.h 2023-04-24 12:47:32 -07:00
send-pack.c Merge branch 'en/header-split-cleanup' 2023-04-06 13:38:31 -07:00
shortlog.c Merge branch 'en/header-split-cleanup' 2023-04-06 13:38:31 -07:00
show-branch.c hash-ll.h: split out of hash.h to remove dependency on repository.h 2023-04-24 12:47:32 -07:00
show-index.c hash-ll.h: split out of hash.h to remove dependency on repository.h 2023-04-24 12:47:32 -07:00
show-ref.c object-name.h: move declarations for object-name.c functions from cache.h 2023-04-11 08:52:09 -07:00
sparse-checkout.c Merge branch 'en/header-split-cache-h' 2023-04-25 13:56:20 -07:00
stash.c Merge branch 'en/header-split-cache-h' 2023-04-25 13:56:20 -07:00
stripspace.c write-or-die.h: move declarations for write-or-die.c functions from cache.h 2023-03-21 10:56:54 -07:00
submodule--helper.c Merge branch 'en/header-split-cache-h' 2023-04-25 13:56:20 -07:00
symbolic-ref.c treewide: be explicit about dependence on gettext.h 2023-03-21 10:56:51 -07:00
tag.c Merge branch 'en/header-split-cache-h' 2023-04-25 13:56:20 -07:00
unpack-file.c Merge branch 'en/header-split-cache-h' 2023-04-25 13:56:20 -07:00
unpack-objects.c Merge branch 'en/header-split-cache-h' 2023-04-25 13:56:20 -07:00
update-index.c hash-ll.h: split out of hash.h to remove dependency on repository.h 2023-04-24 12:47:32 -07:00
update-ref.c hash-ll.h: split out of hash.h to remove dependency on repository.h 2023-04-24 12:47:32 -07:00
update-server-info.c server-info.h: move declarations for server-info.c functions from cache.h 2023-04-24 12:47:31 -07:00
upload-archive.c Merge branch 'en/header-split-cache-h-part-2' 2023-05-09 16:45:46 -07:00
upload-pack.c treewide: be explicit about dependence on gettext.h 2023-03-21 10:56:51 -07:00
var.c Merge branch 'en/header-split-cache-h' 2023-04-25 13:56:20 -07:00
verify-commit.c object-name.h: move declarations for object-name.c functions from cache.h 2023-04-11 08:52:09 -07:00
verify-pack.c treewide: be explicit about dependence on gettext.h 2023-03-21 10:56:51 -07:00
verify-tag.c object-name.h: move declarations for object-name.c functions from cache.h 2023-04-11 08:52:09 -07:00
worktree.c worktree: integrate with sparse-index 2023-06-12 12:13:58 -07:00
write-tree.c Merge branch 'en/header-split-cache-h-part-2' 2023-05-09 16:45:46 -07:00