From: "Victoria Dye via GitGitGadget" <gitgitgadget@gmail.com> To: git@vger.kernel.org Cc: derrickstolee@github.com, newren@gmail.com, gitster@pobox.com, Victoria Dye <vdye@github.com>, Victoria Dye <vdye@github.com> Subject: [PATCH v3 6/6] unpack-trees: preserve index sparsity Date: Tue, 10 May 2022 23:32:32 +0000 [thread overview] Message-ID: <4b4c38fcc03515c113dc1c15210be6b42baf8029.1652225552.git.gitgitgadget@gmail.com> (raw) In-Reply-To: <pull.1171.v3.git.1652225552.gitgitgadget@gmail.com> From: Victoria Dye <vdye@github.com> When unpacking trees, set the default sparsity of the resultant index based on repo settings and 'is_sparse_index_allowed()'. Normally, when executing 'unpack_trees', the output index is marked sparse when (and only when) it unpacks a sparse directory. However, an index may be "sparse" even if it contains no sparse directories - when all files fall inside the sparse-checkout definition or otherwise have SKIP_WORKTREE disabled. Therefore, the output index may be marked "full" even when it is "sparse", resulting in unnecessary 'ensure_full_index' calls when writing to disk. Avoid this by setting the "default" index sparsity to match what is expected for the repository. As a consequence of this fix, the (non-merge) 'read-tree' performed when applying a stash with untracked files no longer expands the index. Update the corresponding test in 't1092'. Signed-off-by: Victoria Dye <vdye@github.com> --- t/t1092-sparse-checkout-compatibility.sh | 2 +- unpack-trees.c | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/t/t1092-sparse-checkout-compatibility.sh b/t/t1092-sparse-checkout-compatibility.sh index aaf4d880dbc..19221c14225 100755 --- a/t/t1092-sparse-checkout-compatibility.sh +++ b/t/t1092-sparse-checkout-compatibility.sh @@ -1392,7 +1392,7 @@ test_expect_success 'sparse-index is not expanded: stash' ' ensure_not_expanded stash -u && ( WITHOUT_UNTRACKED_TXT=1 && - ! ensure_not_expanded stash pop + ensure_not_expanded stash pop ) && ensure_not_expanded stash create && diff --git a/unpack-trees.c b/unpack-trees.c index 7f528d35cc2..a1d0ff3a4d3 100644 --- a/unpack-trees.c +++ b/unpack-trees.c @@ -11,6 +11,7 @@ #include "refs.h" #include "attr.h" #include "split-index.h" +#include "sparse-index.h" #include "submodule.h" #include "submodule-config.h" #include "fsmonitor.h" @@ -1839,6 +1840,11 @@ int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options o->result.fsmonitor_last_update = xstrdup_or_null(o->src_index->fsmonitor_last_update); + if (!o->src_index->initialized && + !repo->settings.command_requires_full_index && + is_sparse_index_allowed(&o->result, 0)) + o->result.sparse_index = 1; + /* * Sparse checkout loop #1: set NEW_SKIP_WORKTREE on existing entries */ -- gitgitgadget
prev parent reply other threads:[~2022-05-10 23:33 UTC|newest] Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top 2022-04-25 17:49 [PATCH 0/7] Sparse index: integrate with 'git stash' Victoria Dye via GitGitGadget 2022-04-25 17:49 ` [PATCH 1/7] stash: expand sparse-checkout compatibility testing Victoria Dye via GitGitGadget 2022-04-25 17:49 ` [PATCH 2/7] stash: integrate with sparse index Victoria Dye via GitGitGadget 2022-04-25 21:34 ` Junio C Hamano 2022-04-26 12:53 ` Derrick Stolee 2022-04-26 15:26 ` Victoria Dye 2022-04-26 16:21 ` Junio C Hamano 2022-04-25 17:49 ` [PATCH 3/7] sparse-index: expose 'is_sparse_index_allowed()' Victoria Dye via GitGitGadget 2022-04-25 17:49 ` [PATCH 4/7] read-cache: set sparsity when index is new Victoria Dye via GitGitGadget 2022-04-25 21:35 ` Junio C Hamano 2022-04-25 17:49 ` [PATCH 5/7] merge-recursive: add merge function arg to 'merge_recursive_generic' Victoria Dye via GitGitGadget 2022-04-25 21:38 ` Junio C Hamano 2022-04-26 12:57 ` Derrick Stolee 2022-04-25 17:49 ` [PATCH 6/7] stash: merge applied stash with merge-ort Victoria Dye via GitGitGadget 2022-04-26 13:02 ` Derrick Stolee 2022-04-25 17:49 ` [PATCH 7/7] unpack-trees: preserve index sparsity Victoria Dye via GitGitGadget 2022-04-26 12:49 ` [PATCH 0/7] Sparse index: integrate with 'git stash' Derrick Stolee 2022-04-26 13:09 ` Derrick Stolee 2022-04-27 18:16 ` [PATCH v2 " Victoria Dye via GitGitGadget 2022-04-27 18:16 ` [PATCH v2 1/7] stash: expand sparse-checkout compatibility testing Victoria Dye via GitGitGadget 2022-04-27 18:16 ` [PATCH v2 2/7] stash: integrate with sparse index Victoria Dye via GitGitGadget 2022-04-27 18:16 ` [PATCH v2 3/7] sparse-index: expose 'is_sparse_index_allowed()' Victoria Dye via GitGitGadget 2022-04-27 18:16 ` [PATCH v2 4/7] read-cache: set sparsity when index is new Victoria Dye via GitGitGadget 2022-04-27 18:16 ` [PATCH v2 5/7] merge-recursive: add merge function arg to 'merge_recursive_generic' Victoria Dye via GitGitGadget 2022-05-06 7:23 ` Elijah Newren 2022-05-09 19:24 ` Victoria Dye 2022-05-10 7:06 ` Elijah Newren 2022-04-27 18:16 ` [PATCH v2 6/7] stash: merge applied stash with merge-ort Victoria Dye via GitGitGadget 2022-04-27 18:16 ` [PATCH v2 7/7] unpack-trees: preserve index sparsity Victoria Dye via GitGitGadget 2022-05-06 7:46 ` [PATCH v2 0/7] Sparse index: integrate with 'git stash' Elijah Newren 2022-05-10 23:32 ` [PATCH v3 0/6] " Victoria Dye via GitGitGadget 2022-05-10 23:32 ` [PATCH v3 1/6] stash: expand sparse-checkout compatibility testing Victoria Dye via GitGitGadget 2022-05-10 23:32 ` [PATCH v3 2/6] stash: integrate with sparse index Victoria Dye via GitGitGadget 2022-05-10 23:32 ` [PATCH v3 3/6] sparse-index: expose 'is_sparse_index_allowed()' Victoria Dye via GitGitGadget 2022-05-10 23:32 ` [PATCH v3 4/6] read-cache: set sparsity when index is new Victoria Dye via GitGitGadget 2022-05-10 23:32 ` [PATCH v3 5/6] stash: apply stash using 'merge_ort_nonrecursive()' Victoria Dye via GitGitGadget 2022-05-11 0:26 ` Junio C Hamano 2022-05-12 1:01 ` Jonathan Tan 2022-05-12 14:52 ` Elijah Newren 2022-05-12 16:55 ` Jonathan Tan 2022-05-12 14:51 ` Elijah Newren 2022-05-10 23:32 ` Victoria Dye via GitGitGadget [this message]
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=4b4c38fcc03515c113dc1c15210be6b42baf8029.1652225552.git.gitgitgadget@gmail.com \ --to=gitgitgadget@gmail.com \ --cc=derrickstolee@github.com \ --cc=git@vger.kernel.org \ --cc=gitster@pobox.com \ --cc=newren@gmail.com \ --cc=vdye@github.com \ --subject='Re: [PATCH v3 6/6] unpack-trees: preserve index sparsity' \ /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
Code repositories for project(s) associated with this 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).