NOTE: This series builds on sg/clean-nested-repo-with-ignored, as it
(among other things) modifies his testcase from expect_failure
to expect_success. Also, Peff is probably the only one who
remembers v1 (and even he may have forgotten it): v1 was posted
a year and a half ago.
This patch series fixes a few issues with git-clean:
* Failure to clean when multiple pathspecs are specified, reported both
in April 2018[1] and again in May 2019[2].
* Failure to preserve both tracked and untracked files within a nested
Git repository reported a few weeks ago by SZEDER[3].
[1] https://public-inbox.org/git/[email protected]/
[2] https://public-inbox.org/git/[email protected]/
[3] https://public-inbox.org/git/[email protected]/
I still never got answers to some questions in v1 of my RFC, so after
considerable thought I eventually decided to:
* Declare the existing documentation to be ambiguous and hard to
interpret correctly; modified the documentation to clearly
document 'correct behavior' with how different pieces interact.
* Overrule four regression tests as having the wrong *expectation*,
and modify them to have a correct one. That sounds like a
backward compatibility issue BUT: The tests were written to check
for issues that were orthogonal to the pieces that mattered in this
series and thus couldn't be viewed as actually having an opinion
on correct behavior on my issues; rather, they were simply
reinforcing existing (buggy) implementation results.
* Add a few tests which actually check relevant interactions of
parameters and setup, to make this area less ambiguous. (Though
one of them was added by SZEDER before my patches, and I should
probably add a couple more tests...)
Help from reviewers:
The biggest area I need help from reviewers is to look at the commit
messages for patches 9 and 10, to see if folks agree with my
declaration of 'correct behavior' and my changes to the regression
tests. If those are good, this series can proceed. If they aren't,
and someone else can't provide an alternate easy-to-explain 'correct
behavior' that we should implement and which is devoid of ugly edge
cases for users, then this patch series may languish for another few
years.
Other notes:
* Patches 1-6 were included in v1 and have almost no changes (just one
fix pointed out by Peff).
* Patch 6's commit message has some additional RFC-related comments
and questions, one of which ties in with Patch 9.
* Patch 7 was added as per (old) conversation with Peff.
* Patch 9 & 10 are in most need of review (see above); each has
lengthy commit messages.
* It would be nice if someone knows whether the codepath edited in
Patch 12 is dead code. If so, we could change that patch to just
drop that if-check block. If it's not dead code, that patch fixes
what is probably a rare but ugly bug.
Elijah Newren (12):
t7300: Add some testcases showing failure to clean specified pathspecs
dir: fix typo in comment
dir: fix off-by-one error in match_pathspec_item
dir: Directories should be checked for matching pathspecs too
dir: Make the DO_MATCH_SUBMODULE code reusable for a non-submodule
case
dir: If our pathspec might match files under a dir, recurse into it
dir: add commentary explaining match_pathspec_item's return value
git-clean.txt: do not claim we will delete files with -n/--dry-run
clean: disambiguate the definition of -d
clean: avoid removing untracked files in a nested git repository
clean: rewrap overly long line
clean: fix theoretical path corruption
Documentation/git-clean.txt | 16 +++++-----
builtin/clean.c | 17 ++++++++--
dir.c | 63 +++++++++++++++++++++++++++----------
dir.h | 8 +++--
t/t7300-clean.sh | 44 +++++++++++++++++++++++---
5 files changed, 114 insertions(+), 34 deletions(-)
--
2.22.1.11.g45a39ee867