From: "Nguyễn Thái Ngọc Duy" <pclouds@gmail•com>
To: git@vger•kernel.org
Cc: "Nguyễn Thái Ngọc Duy" <pclouds@gmail•com>
Subject: [PATCH] Avoid the need of "--" when wildcard pathspec is used
Date: Tue, 30 Jun 2015 19:40:07 +0700 [thread overview]
Message-ID: <1435668007-31231-1-git-send-email-pclouds@gmail.com> (raw)
When "--" is lacking from the command line and a command can take both
revs and paths, the idea is if an argument can be seen as both an
extended SHA-1 and a path, then "--" is required or git refuses to
continue. It's currently implemented as:
(1) if an argument is rev, then it must not exist in worktree
(2) else, it must exist in worktree
(3) else, "--" is required.
These rules work for literal paths, but when wildcard pathspec is
involved, it always requires the user to add "--" because it fails (2)
and (1) is never met.
This patch prefers wildcard over extended sha-1 syntax that includes
wildcards, so that we can specify wildcards to select paths in worktree
without "--" most of the time. If wildcards are found in extended sha-1
syntax, then "--" is _always_ required.
Because ref names don't allow wildcards, you can only hit that
"needs '--'" new rule if you use ":/<pattern>", "<rev>^{/<pattern>}" or
"<rev>:wildcards/in/literal/paths". So it's really rare.
The rules after this patch become:
(1) if an arg is a rev, then it must either exist in worktree or not
a wild card
(2) else, it either exists in worktree or is a wild card
(3) else, "--" is required.
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail•com>
---
setup.c | 2 ++
t/t2019-checkout-ambiguous-ref.sh | 26 ++++++++++++++++++++++++++
2 files changed, 28 insertions(+)
diff --git a/setup.c b/setup.c
index 82c0cc2..f7cb93b 100644
--- a/setup.c
+++ b/setup.c
@@ -143,6 +143,8 @@ int check_filename(const char *prefix, const char *arg)
name = arg + 2;
} else if (!no_wildcard(arg))
return 1;
+ else if (!no_wildcard(arg))
+ return 1;
else if (prefix)
name = prefix_filename(prefix, strlen(prefix), arg);
else
diff --git a/t/t2019-checkout-ambiguous-ref.sh b/t/t2019-checkout-ambiguous-ref.sh
index b99d519..e5ceba3 100755
--- a/t/t2019-checkout-ambiguous-ref.sh
+++ b/t/t2019-checkout-ambiguous-ref.sh
@@ -56,4 +56,30 @@ test_expect_success VAGUENESS_SUCCESS 'checkout reports switch to branch' '
test_i18ngrep ! "^HEAD is now at" stderr
'
+test_expect_success 'wildcard ambiguation' '
+ git init ambi &&
+ (
+ cd ambi &&
+ echo a >a.c &&
+ git add a.c &&
+ echo b >a.c &&
+ git checkout "*.c" &&
+ echo a >expect &&
+ test_cmp expect a.c
+ )
+'
+
+test_expect_success 'wildcard ambiguation (2)' '
+ git init ambi2 &&
+ (
+ cd ambi2 &&
+ echo a >"*.c" &&
+ git add . &&
+ test_must_fail git show :"*.c" &&
+ git show :"*.c" -- >actual &&
+ echo a >expect &&
+ test_cmp expect actual
+ )
+'
+
test_done
--
2.3.0.rc1.137.g477eb31
next reply other threads:[~2015-06-30 12:39 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-06-30 12:40 Nguyễn Thái Ngọc Duy [this message]
2015-06-30 18:10 ` [PATCH] Avoid the need of "--" when wildcard pathspec is used Junio C Hamano
2015-06-30 23:07 ` Duy Nguyen
2015-07-01 11:08 ` [PATCH v2] Add tests for wildcard "path vs ref" disambiguation Nguyễn Thái Ngọc Duy
2015-07-01 16:31 ` Junio C Hamano
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=1435668007-31231-1-git-send-email-pclouds@gmail.com \
--to=pclouds@gmail$(echo .)com \
--cc=git@vger$(echo .)kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox