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.com \
--cc=git@vger.kernel.org \
/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.