From: Elijah Newren <newren@gmail.com>
To: git@vger.kernel.org
Cc: Victoria Dye <vdye@github.com>, Derrick Stolee <stolee@gmail.com>,
Lessley Dennington <lessleydennington@gmail.com>,
Elijah Newren <newren@gmail.com>
Subject: [RFC PATCH 0/5] Remove the present-despite-SKIP_WORKTREE class of bugs
Date: Sat, 8 Jan 2022 20:57:27 -0800 [thread overview]
Message-ID: <20220109045732.2497526-1-newren@gmail.com> (raw)
(Maintainer note: This series builds on vd/sparse-clean-etc, because it
tweaks one of the testcases added there.)
Files in the present-despite-SKIP_WORKTREE state have caused no ends of
discussions and bugs[1,2,3,4,5,6,...and lots of others]. Trying to
address the big issue of discovering & recovering from this state has
befuddled me for over a year because I was worried we'd need additional
code at every skip_worktree-checking path in the code (and they are all
over the place), and that we'd make the code significantly slower unless
we plumbed a bunch of additional information all over the place to allow
some reasonable optimizations.
This series tries to solve the problem a bit differently by automatic
early discovery and recovery; as it result, it greatly simplifies the
landscape, reduces our testing matrix burden, and fixes a large swath of
bugs. It does have a cost, though. See the commit message of patch 3
(the crux of this series) for the details.
Quick overview:
* Patches 1 & 2 add a test to demonstrate accidental deletion of
possibly-modified files, and then fix the bug.
* Patch 3 is the crux of this series; a small amount of code with a
huge commit message
* Patch 4 updates the documentation
* Patch 5 adds some optimizations to reduce the performance impact of
patch 3
[1] https://lore.kernel.org/git/CABPp-BFnFpzwGC11TLoLs8YK5yiisA5D5-fFjXnJsbESVDwZsA@mail.gmail.com/
[2] https://lore.kernel.org/git/CABPp-BGJ_Nvi5TmgriD9Bh6eNXE2EDq2f8e8QKXAeYG3BxZafA@mail.gmail.com/
[3] https://lore.kernel.org/git/pull.809.git.git.1592356884310.gitgitgadget@gmail.com/
[4] commit 66b209b86a ("merge-ort: implement CE_SKIP_WORKTREE handling with conflicted entries", 2021-03-20)
[5] commit ba359fd507 ("stash: fix stash application in sparse-checkouts", 2020-12-01)
[6] https://lore.kernel.org/git/CABPp-BH9tju7WVm=QZDOvaMDdZbpNXrVWQdN-jmfN8wC6YVhmw@mail.gmail.com/
[Final note: This series and test results can also be seen at
https://github.com/gitgitgadget/git/pull/1113; gitgitgadget wanted me to
"rewrap" the lines with >80 character URLS in commit messages, and I
refuse to remove the URLs or break them by inserting newlines, so I'm
sending it manually instead.]
Elijah Newren (5):
t1011: add testcase demonstrating accidental loss of user
modifications
unpack-trees: fix accidental loss of user changes
repo_read_index: ensure SKIP_WORKTREE means skip worktree
Update documentation related to sparsity and the skip-worktree bit
Accelerate ensure_skip_worktree_means_skip_worktree by caching
Documentation/git-read-tree.txt | 12 ++-
Documentation/git-sparse-checkout.txt | 76 ++++++++------
Documentation/git-update-index.txt | 55 +++++++---
repository.c | 7 ++
sparse-index.c | 123 +++++++++++++++++++++++
sparse-index.h | 1 +
t/t1011-read-tree-sparse-checkout.sh | 23 ++++-
t/t1092-sparse-checkout-compatibility.sh | 16 +--
t/t3705-add-sparse-checkout.sh | 2 +
t/t6428-merge-conflicts-sparse.sh | 23 +----
t/t7012-skip-worktree-writing.sh | 44 ++------
t/t7817-grep-sparse-checkout.sh | 11 +-
unpack-trees.c | 4 +-
13 files changed, 284 insertions(+), 113 deletions(-)
--
2.34.1.442.ge63c19bdd2.dirty
next reply other threads:[~2022-01-09 4:57 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-01-09 4:57 Elijah Newren [this message]
2022-01-09 4:57 ` [RFC PATCH 1/5] t1011: add testcase demonstrating accidental loss of user modifications Elijah Newren
2022-01-09 4:57 ` [RFC PATCH 2/5] unpack-trees: fix accidental loss of user changes Elijah Newren
2022-01-09 4:57 ` [RFC PATCH 3/5] repo_read_index: ensure SKIP_WORKTREE means skip worktree Elijah Newren
2022-01-10 20:38 ` Victoria Dye
2022-01-11 19:27 ` Elijah Newren
2022-01-11 23:09 ` Victoria Dye
2022-01-09 4:57 ` [RFC PATCH 4/5] Update documentation related to sparsity and the skip-worktree bit Elijah Newren
2022-01-09 4:57 ` [RFC PATCH 5/5] Accelerate ensure_skip_worktree_means_skip_worktree by caching Elijah Newren
2022-01-11 18:30 ` Victoria Dye
2022-01-11 22:04 ` 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=20220109045732.2497526-1-newren@gmail.com \
--to=newren@gmail.com \
--cc=git@vger.kernel.org \
--cc=lessleydennington@gmail.com \
--cc=stolee@gmail.com \
--cc=vdye@github.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.