From: Elijah Newren <newren@gmail.com>
To: git@vger.kernel.org
Cc: "Junio C Hamano" <gitster@pobox.com>, "Jeff King" <peff@peff.net>,
"Rafael Ascensão" <rafa.almas@gmail.com>,
"SZEDER Gábor" <szeder.dev@gmail.com>,
"Samuel Lijin" <sxlijin@gmail.com>,
"Elijah Newren" <newren@gmail.com>
Subject: [PATCH v4 00/12] Fix some git clean issues
Date: Tue, 17 Sep 2019 09:34:52 -0700 [thread overview]
Message-ID: <20190917163504.14566-1-newren@gmail.com> (raw)
In-Reply-To: <20190912221240.18057-1-newren@gmail.com>
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].
It builds on sg/clean-nested-repo-with-ignored.
[1] https://public-inbox.org/git/20180405173446.32372-4-newren@gmail.com/
[2] https://public-inbox.org/git/20190531183651.10067-1-rafa.almas@gmail.com/
[3] https://public-inbox.org/git/20190825185918.3909-1-szeder.dev@gmail.com/
Changes since v3:
* Clarified a couple commit messages highlighted by Junio.
Elijah Newren (12):
t7300: add testcases showing failure to clean specified pathspecs
dir: fix typo in comment
dir: fix off-by-one error in match_pathspec_item
dir: also check directories for matching pathspecs
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 | 15 +++++++--
dir.c | 63 +++++++++++++++++++++++++++----------
dir.h | 8 +++--
t/t7300-clean.sh | 44 +++++++++++++++++++++++---
5 files changed, 112 insertions(+), 34 deletions(-)
Range-diff:
1: fe35ab8cc3 ! 1: a48d4e7faf t7300: add testcases showing failure to clean specified pathspecs
@@ -28,9 +28,15 @@
showed that the same buggy behavior exists without using that flag, and
has in fact existed since before cf424f5fd89b.
- Add testcases showing that multiple untracked files within entirely
- untracked directories cannot be cleaned when specifying these files to
- git clean via pathspecs.
+ Although these problems at first are perceived to be different (e.g.
+ never clearing out the requested files vs. taking multiple invocations
+ to get everything cleared out), they are actually just different
+ manifestations of the same problem. The case with multiple directories
+ that have no tracked files is the more general case; solving it will
+ solve all the others. So, I concentrate on it. Add testcases showing
+ that multiple untracked files within entirely untracked directories
+ cannot be cleaned when specifying these files to git clean via
+ pathspecs.
Signed-off-by: Elijah Newren <newren@gmail.com>
2: 707d287d79 = 2: eb00b46822 dir: fix typo in comment
3: bb316e82b2 ! 3: c0e5b820a9 dir: fix off-by-one error in match_pathspec_item
@@ -6,11 +6,22 @@
namelen will be 4, and match[namelen] will be 'b'. The correct location
of the directory separator is namelen-1.
- The reason the code worked anyway was that the following code immediately
- checked whether the first matchlen characters matched (which they do) and
- then bailed and return MATCHED_RECURSIVELY anyway since wildmatch doesn't
- have the ability to check if "name" can be matched as a directory (or
- prefix) against the pathspec.
+ However, other callers of match_pathspec_item() such as builtin/grep.c's
+ submodule_path_match() will compare against a path named "foo" instead of
+ "foo/". It might be better to change all the callers to be consistent,
+ as discussed at
+ https://public-inbox.org/git/xmqq7e6cdnkr.fsf@gitster-ct.c.googlers.com/
+ and
+ https://public-inbox.org/git/CABPp-BERWUPCPq-9fVW1LNocqkrfsoF4BPj3gJd9+En43vEkTQ@mail.gmail.com/
+ but there are many cases to audit, so for now just make sure we handle
+ both cases with and without a trailing slash.
+
+ The reason the code worked despite this sometimes-off-by-one error was
+ that the subsequent code immediately checked whether the first matchlen
+ characters matched (which they do) and then bailed and return
+ MATCHED_RECURSIVELY anyway since wildmatch doesn't have the ability to
+ check if "name" can be matched as a directory (or prefix) against the
+ pathspec.
Signed-off-by: Elijah Newren <newren@gmail.com>
4: 56319f934a = 4: 397775ec35 dir: also check directories for matching pathspecs
5: 81593a565c = 5: b836de82c0 dir: make the DO_MATCH_SUBMODULE code reusable for a non-submodule case
6: 9566823a0f = 6: feb317d090 dir: if our pathspec might match files under a dir, recurse into it
7: 7821898ba7 = 7: 0a574d6779 dir: add commentary explaining match_pathspec_item's return value
8: 13def5df57 = 8: 0eaa08537c git-clean.txt: do not claim we will delete files with -n/--dry-run
9: e6b274abf7 = 9: a1438301bb clean: disambiguate the definition of -d
10: 5f4ef14765 = 10: 8dc21923ee clean: avoid removing untracked files in a nested git repository
11: 4e30e62eb1 = 11: 707b6a5509 clean: rewrap overly long line
12: de2444f7cb = 12: 84a90010ed clean: fix theoretical path corruption
--
2.22.1.17.g6e632477f7.dirty
next prev parent reply other threads:[~2019-09-17 16:35 UTC|newest]
Thread overview: 73+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-08-25 18:59 [PATCH] t7300-clean: demonstrate deleting nested repo with an ignored file breakage SZEDER Gábor
2019-08-25 20:34 ` SZEDER Gábor
2019-08-25 22:32 ` Philip Oakley
2019-08-26 7:48 ` SZEDER Gábor
2019-09-05 15:47 ` [RFC PATCH v2 00/12] Fix some git clean issues Elijah Newren
2019-09-05 15:47 ` [RFC PATCH v2 01/12] t7300: Add some testcases showing failure to clean specified pathspecs Elijah Newren
2019-09-05 15:47 ` [RFC PATCH v2 02/12] dir: fix typo in comment Elijah Newren
2019-09-05 15:47 ` [RFC PATCH v2 03/12] dir: fix off-by-one error in match_pathspec_item Elijah Newren
2019-09-05 15:47 ` [RFC PATCH v2 04/12] dir: Directories should be checked for matching pathspecs too Elijah Newren
2019-09-05 15:47 ` [RFC PATCH v2 05/12] dir: Make the DO_MATCH_SUBMODULE code reusable for a non-submodule case Elijah Newren
2019-09-05 15:47 ` [RFC PATCH v2 06/12] dir: If our pathspec might match files under a dir, recurse into it Elijah Newren
2019-09-05 15:47 ` [RFC PATCH v2 07/12] dir: add commentary explaining match_pathspec_item's return value Elijah Newren
2019-09-05 15:47 ` [RFC PATCH v2 08/12] git-clean.txt: do not claim we will delete files with -n/--dry-run Elijah Newren
2019-09-05 15:47 ` [RFC PATCH v2 09/12] clean: disambiguate the definition of -d Elijah Newren
2019-09-05 15:47 ` [RFC PATCH v2 10/12] clean: avoid removing untracked files in a nested git repository Elijah Newren
2019-09-05 21:20 ` SZEDER Gábor
2019-09-05 15:47 ` [RFC PATCH v2 11/12] clean: rewrap overly long line Elijah Newren
2019-09-05 15:47 ` [RFC PATCH v2 12/12] clean: fix theoretical path corruption Elijah Newren
2019-09-05 19:27 ` SZEDER Gábor
2019-09-07 0:34 ` Elijah Newren
2019-09-05 19:01 ` [RFC PATCH v2 00/12] Fix some git clean issues SZEDER Gábor
2019-09-07 0:33 ` Elijah Newren
2019-09-12 22:12 ` [PATCH v3 " Elijah Newren
2019-09-12 22:12 ` [PATCH v3 01/12] t7300: add testcases showing failure to clean specified pathspecs Elijah Newren
2019-09-13 18:54 ` Junio C Hamano
2019-09-13 19:10 ` Elijah Newren
2019-09-13 20:29 ` Junio C Hamano
2019-09-12 22:12 ` [PATCH v3 02/12] dir: fix typo in comment Elijah Newren
2019-09-12 22:12 ` [PATCH v3 03/12] dir: fix off-by-one error in match_pathspec_item Elijah Newren
2019-09-13 19:05 ` Junio C Hamano
2019-09-12 22:12 ` [PATCH v3 04/12] dir: also check directories for matching pathspecs Elijah Newren
2019-09-12 22:12 ` [PATCH v3 05/12] dir: make the DO_MATCH_SUBMODULE code reusable for a non-submodule case Elijah Newren
2019-09-12 22:12 ` [PATCH v3 06/12] dir: if our pathspec might match files under a dir, recurse into it Elijah Newren
2019-09-13 19:45 ` Junio C Hamano
2019-09-12 22:12 ` [PATCH v3 07/12] dir: add commentary explaining match_pathspec_item's return value Elijah Newren
2019-09-13 20:04 ` Junio C Hamano
2019-09-12 22:12 ` [PATCH v3 08/12] git-clean.txt: do not claim we will delete files with -n/--dry-run Elijah Newren
2019-09-12 22:12 ` [PATCH v3 09/12] clean: disambiguate the definition of -d Elijah Newren
2019-09-12 22:12 ` [PATCH v3 10/12] clean: avoid removing untracked files in a nested git repository Elijah Newren
2019-09-12 22:12 ` [PATCH v3 11/12] clean: rewrap overly long line Elijah Newren
2019-09-12 22:12 ` [PATCH v3 12/12] clean: fix theoretical path corruption Elijah Newren
2019-09-17 16:34 ` Elijah Newren [this message]
2019-09-17 16:34 ` [PATCH v4 01/12] t7300: add testcases showing failure to clean specified pathspecs Elijah Newren
2019-09-17 16:34 ` [PATCH v4 02/12] dir: fix typo in comment Elijah Newren
2019-09-17 16:34 ` [PATCH v4 03/12] dir: fix off-by-one error in match_pathspec_item Elijah Newren
2019-09-17 16:34 ` [PATCH v4 04/12] dir: also check directories for matching pathspecs Elijah Newren
2019-09-25 20:39 ` [BUG] git is segfaulting, was " Denton Liu
2019-09-25 21:28 ` Elijah Newren
2019-09-25 21:55 ` Denton Liu
2019-09-26 20:35 ` Denton Liu
2019-09-27 0:12 ` Elijah Newren
2019-09-27 1:09 ` SZEDER Gábor
2019-09-27 2:17 ` SZEDER Gábor
2019-09-27 17:10 ` Denton Liu
2019-09-30 19:11 ` [PATCH] dir: special case check for the possibility that pathspec is NULL Elijah Newren
2019-09-30 22:31 ` Denton Liu
2019-10-01 7:01 ` Elijah Newren
2019-10-01 18:30 ` [PATCH v2] " Elijah Newren
2019-10-01 18:40 ` Denton Liu
2019-10-01 18:54 ` Elijah Newren
2019-10-01 18:55 ` [PATCH v3] " Elijah Newren
2019-10-01 19:35 ` Denton Liu
2019-10-01 19:39 ` Elijah Newren
2019-10-02 15:51 ` Elijah Newren
2019-10-07 18:04 ` SZEDER Gábor
2019-09-17 16:34 ` [PATCH v4 05/12] dir: make the DO_MATCH_SUBMODULE code reusable for a non-submodule case Elijah Newren
2019-09-17 16:34 ` [PATCH v4 06/12] dir: if our pathspec might match files under a dir, recurse into it Elijah Newren
2019-09-17 16:34 ` [PATCH v4 07/12] dir: add commentary explaining match_pathspec_item's return value Elijah Newren
2019-09-17 16:35 ` [PATCH v4 08/12] git-clean.txt: do not claim we will delete files with -n/--dry-run Elijah Newren
2019-09-17 16:35 ` [PATCH v4 09/12] clean: disambiguate the definition of -d Elijah Newren
2019-09-17 16:35 ` [PATCH v4 10/12] clean: avoid removing untracked files in a nested git repository Elijah Newren
2019-09-17 16:35 ` [PATCH v4 11/12] clean: rewrap overly long line Elijah Newren
2019-09-17 16:35 ` [PATCH v4 12/12] clean: fix theoretical path corruption 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
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=20190917163504.14566-1-newren@gmail.com \
--to=newren@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=peff@peff.net \
--cc=rafa.almas@gmail.com \
--cc=sxlijin@gmail.com \
--cc=szeder.dev@gmail.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.
Code repositories for project(s) associated with this public 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).