From: "Σταύρος Ντέντος" <stdedos@gmail.com>
To: git <git@vger.kernel.org>
Cc: "Σταύρος Ντέντος" <stdedos+git@gmail.com>,
"Junio C Hamano" <gitster@pobox.com>,
"Bagas Sanjaya" <bagasdotme@gmail.com>,
"Stavros Ntentos" <133706+stdedos@users.noreply.github.com>
Subject: [RFC PATCH v1 1/2] pathspec: warn: long and short forms are incompatible
Date: Fri, 26 Mar 2021 04:40:04 +0200 [thread overview]
Message-ID: <20210326024005.26962-2-stdedos+git@gmail.com> (raw)
In-Reply-To: <20210326024005.26962-1-stdedos+git@gmail.com>
From: Stavros Ntentos <133706+stdedos@users.noreply.github.com>
Namely, `!` and any other long magic form (e.g. `glob`)
cannot be combined to one entry.
Issue a warning when such thing happens, and hint to the solution.
Signed-off-by: Stavros Ntentos <133706+stdedos@users.noreply.github.com>
---
pathspec.c | 19 +++++++++++++++++++
pathspec.h | 1 +
t/t6132-pathspec-exclude.sh | 33 +++++++++++++++++++++++++++++++++
3 files changed, 53 insertions(+)
diff --git a/pathspec.c b/pathspec.c
index 7a229d8d22..374c529569 100644
--- a/pathspec.c
+++ b/pathspec.c
@@ -1,3 +1,5 @@
+#include <stdio.h>
+#include <string.h>
#include "cache.h"
#include "config.h"
#include "dir.h"
@@ -586,6 +588,8 @@ void parse_pathspec(struct pathspec *pathspec,
for (i = 0; i < n; i++) {
entry = argv[i];
+ check_mishandled_exclude(entry);
+
init_pathspec_item(item + i, flags, prefix, prefixlen, entry);
if (item[i].magic & PATHSPEC_EXCLUDE)
@@ -739,3 +743,18 @@ int match_pathspec_attrs(const struct index_state *istate,
return 1;
}
+
+void check_mishandled_exclude(const char *entry) {
+ size_t entry_len = strlen(entry);
+ char flags[entry_len];
+ char path[entry_len];
+
+ if (sscanf(entry, ":!(%4096[^)])%4096s", &flags, &path) != 2) {
+ return;
+ }
+ if (count_slashes(flags) > 0) {
+ return;
+ }
+
+ warning(_("Pathspec provided matches `:!(...)`\n\tDid you mean `:(exclude,...)`?"));
+}
diff --git a/pathspec.h b/pathspec.h
index 454ce364fa..879d4e82c6 100644
--- a/pathspec.h
+++ b/pathspec.h
@@ -157,5 +157,6 @@ char *find_pathspecs_matching_against_index(const struct pathspec *pathspec,
int match_pathspec_attrs(const struct index_state *istate,
const char *name, int namelen,
const struct pathspec_item *item);
+void check_mishandled_exclude(const char* pathspec_entry);
#endif /* PATHSPEC_H */
diff --git a/t/t6132-pathspec-exclude.sh b/t/t6132-pathspec-exclude.sh
index 30328b87f0..b32ddb2a56 100755
--- a/t/t6132-pathspec-exclude.sh
+++ b/t/t6132-pathspec-exclude.sh
@@ -244,4 +244,37 @@ test_expect_success 'grep --untracked PATTERN :(exclude)*FILE' '
test_cmp expect-grep actual-grep
'
+cat > expected_warn <<"EOF"
+Pathspec provided matches `:!(...)`
+EOF
+test_expect_success 'warn pathspec :!(...) skips the parenthesized magics' '
+ git log --oneline --format=%s -- '"'"':!(glob)**/file'"'"' >actual 2>warn &&
+ cat <<EOF >expect &&
+sub2/file
+sub/sub/sub/file
+sub/file2
+sub/sub/file
+sub/file
+file
+EOF
+ cat actual &&
+ cat warn &&
+ test_cmp expect actual &&
+ grep -Ff expected_warn warn
+'
+
+test_expect_success 'do not warn that pathspec :!(...) skips the parenthesized magics (if parenthesis would not be part of the magic)' '
+ git log --oneline --format=%s -- '"'"':!(gl/ob)/file'"'"' >actual 2>warn &&
+ cat <<EOF >expect &&
+sub2/file
+sub/sub/sub/file
+sub/file2
+sub/sub/file
+sub/file
+file
+EOF
+ test_cmp expect actual &&
+ ! grep -Ff expected_warn warn
+'
+
test_done
--
2.31.0
next prev parent reply other threads:[~2021-03-26 2:41 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-02-26 20:44 Pathspec does not accept / does not warn for specific pathspecs Σταύρος Ντέντος
2021-02-26 23:27 ` Junio C Hamano
2021-03-25 10:22 ` [PATCH v1 0/1] pathspec: warn for a no-glob entry that contains `**` Σταύρος Ντέντος
2021-03-25 10:22 ` [PATCH v1 1/1] " Σταύρος Ντέντος
2021-03-25 11:00 ` Bagas Sanjaya
2021-03-25 11:04 ` Bagas Sanjaya
2021-03-25 16:09 ` Stavros Ntentos
2021-03-25 20:09 ` Junio C Hamano
2021-03-25 23:36 ` [PATCH v2 0/1] " Σταύρος Ντέντος
2021-03-25 23:36 ` [PATCH v2 1/1] " Σταύρος Ντέντος
2021-03-26 0:41 ` Junio C Hamano
2021-03-26 1:32 ` Eric Sunshine
2021-03-26 3:02 ` Junio C Hamano
2021-03-26 5:13 ` Jeff King
2021-03-26 15:43 ` Stavros Ntentos
2021-03-26 15:48 ` [PATCH v3 1/2] " Stavros Ntentos
2021-03-26 15:48 ` [PATCH v3 2/2] pathspec: convert no-glob warn to advice Stavros Ntentos
2021-03-26 2:40 ` [RFC PATCH v1 0/1] pathspec: warn: long and short forms are incompatible Σταύρος Ντέντος
2021-03-26 2:40 ` Σταύρος Ντέντος [this message]
2021-03-26 5:28 ` [RFC PATCH v1 1/2] " Jeff King
2021-03-26 16:16 ` Stavros Ntentos
2021-03-27 9:41 ` Jeff King
2021-03-27 18:36 ` Junio C Hamano
2021-03-28 15:44 ` Stavros Ntentos
2021-03-26 2:40 ` [RFC PATCH v1 2/2] fixup! " Σταύρος Ντέντος
2021-03-26 8:14 ` Bagas Sanjaya
2021-03-26 15:55 ` Stavros Ntentos
2021-03-28 15:26 ` [RFC PATCH v1 3/3] squash! " Stavros Ntentos
2021-03-26 2:44 ` [RFC PATCH v1 0/1] " Σταύρος Ντέντος
2021-03-26 2:44 ` [RFC PATCH v1] " Σταύρος Ντέντος
2021-04-03 12:26 ` [PATCH v3] pathspec: advice: " Stavros Ntentos
2021-04-04 7:19 ` Junio C Hamano
2021-04-11 15:07 ` Σταύρος Ντέντος
2021-04-11 19:10 ` Junio C Hamano
2021-04-11 20:53 ` Σταύρος Ντέντος
2021-03-28 15:45 ` [PATCH v2] " Stavros Ntentos
2021-03-28 19:12 ` Junio C Hamano
2021-03-30 17:37 ` Junio C Hamano
2021-03-30 19:05 ` Stavros Ntentos
2021-03-30 19:17 ` Stavros Ntentos
2021-03-30 20:36 ` Junio C Hamano
2021-04-03 12:48 ` [PATCH v3] " Stavros Ntentos
2021-04-03 12:51 ` [PATCH v4] " Stavros Ntentos
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=20210326024005.26962-2-stdedos+git@gmail.com \
--to=stdedos@gmail.com \
--cc=133706+stdedos@users.noreply.github.com \
--cc=bagasdotme@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=stdedos+git@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.
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.