[PATCH 0/5] Sparse Index: Integrate with 'git add'
- From
Derrick Stolee via GitGitGadget <gitgitgadget@gmail.com>
- Date
- Jul 21, 2021, 21:06 UTC
- Message-ID
- <pull.999.git.1626901619.gitgitgadget@gmail.com>
This patch series re-submits the 'git add' integration with sparse-index. The performance gains are the same as before.
It is based on ds/commit-and-checkout-with-sparse-index.
This series was delayed from its initial submission for a couple reasons.
The first was because it was colliding with some changes in mt/add-rm-in-sparse-checkout, so now we are far enough along that that branch is in our history and we can work forwards.
The other concern was about how 'git add ' should respond when a path outside of the sparse-checkout cone exists. One recommendation (that I am failing to find a link to the message, sorry) was to disallow adding files that would become index entries with SKIP_WORKTREE on. However, as I worked towards that goal I found that change would cause problems for a realistic scenario: merge conflicts outside of the sparse-checkout cone.
The first patch of this series adds tests that create merge conflicts outside of the sparse cone and then presents different ways a user could resolve the situation. We want all of them to be feasible, and this includes:
1. Reverting the file to a known version in history. 2. Adding the file with its contents on disk. 3. Moving the file to a new location in the sparse directory.
Without maintaining the behavior of adding files outside of the sparse-checkout cone, we risk confusing users who get into this state. The only workaround they would have is to modify their sparse-checkout definition which might lead to expanding much more data than they need to resolve the conflicts.
For that reason, I stopped trying to limit 'git add' to be within the cone. I'm open to suggestions here, but we need an approach that works for out-of-cone conflicts.
The one place I did continue to update is 'git add --refresh ' to match the behavior added by mt/add-rm-in-sparse-checkout which outputs an error message. This happens even when the file exists in the working directory, but that seems appropriate enough.
Thanks, -Stolee
Derrick Stolee (5): t1092: test merge conflicts outside cone add: allow operating on a sparse-only index pathspec: stop calling ensure_full_index t1092: 'git add --refresh' difference with sparse-index add: ignore outside the sparse-checkout in refresh()
builtin/add.c | 13 ++++- pathspec.c | 2 - t/t1092-sparse-checkout-compatibility.sh | 71 ++++++++++++++++++++---- 3 files changed, 72 insertions(+), 14 deletions(-)
base-commit: 71e301501c88399711a1bf8515d1747e92cfbb9b Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-999%2Fderrickstolee%2Fsparse-index%2Fadd-v1 Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-999/derrickstolee/sparse-index/add-v1 Pull-Request: https://github.com/gitgitgadget/git/pull/999
-- gitgitgadget