From: Duy Nguyen <pclouds@gmail•com>
To: Jeff King <peff@peff•net>
Cc: Josh Hagins <hagins.josh@gmail•com>,
Thiago Farina <tfransosi@gmail•com>,
Git Mailing List <git@vger•kernel.org>
Subject: Re: multiple source file extensions
Date: Sat, 2 May 2015 09:04:32 +0700 [thread overview]
Message-ID: <20150502020431.GA15775@lanh> (raw)
In-Reply-To: <20150502011100.GB5634@peff.net>
On Fri, May 01, 2015 at 09:11:01PM -0400, Jeff King wrote:
> Unfortunately there is no way to use curly braces with git's pathspec,
> so you have to write out three separate `*` arguments rather than using
> the shell-style {cc,cpp,h}.
Noted. Need to add curly brace support in pathspec :-)
> git grep pattern -- '*.cc' '*.cpp' '*.h'
>
> Note that the "--" is important (it's what tells git "these are
> pathspecs and not revision names"; normally git will guess if you are
> passing literal pathnames, but the glob patterns fool the guessing
> machinery).
I'm having something like below to avoid the need for "--" in this
case. Probably a good time to throw it out and get some feedback. I
think it's a good change and does not compromise our ambiguity check..
This patch is modified just for reading so it may not build. The real
series takes care of "--" for both wildcard and magic pathspec. But I
don't think we need to see it now.
-- 8< --
Subject: [PATCH] Avoid the need of "--" when wildcard pathspec is used
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 non-literal pathspec is
involved, it almost always requires the user to add "--" because it
fails (2) and (1) is really rarely met (take "*.c" for example,
(1) is met if there is a ref named "*.c").
This patch modifies the rules a bit by considering any valid (*)
wildcard pathspec "exist in worktree". The rules become:
(1) if an arg is a rev, then it must either exist in worktree or not
be a valid wildcard pathspec.
(2) else, it either exists in worktree or is a wildcard pathspec
(3) else, "--" is required.
With the new rules, "--" is not needed most of the time when wildcard
pathspec is involved.
---
setup.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/setup.c b/setup.c
index 979b13f..1055b82 100644
--- a/setup.c
+++ b/setup.c
@@ -140,7 +140,9 @@ int check_filename(const char *prefix, const char *arg)
if (arg[2] == '\0') /* ":/" is root dir, always exists */
return 1;
name = arg + 2;
- } else if (prefix)
+ } else if (!no_wildcard(arg))
+ return 1;
+ else if (prefix)
name = prefix_filename(prefix, strlen(prefix), arg);
else
name = arg;
--
2.3.0.rc1.137.g477eb31
-- 8< --
next prev parent reply other threads:[~2015-05-02 2:04 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-05-02 0:40 multiple source file extensions Thiago Farina
2015-05-02 0:49 ` Josh Hagins
2015-05-02 1:11 ` Jeff King
2015-05-02 2:04 ` Duy Nguyen [this message]
2015-05-02 2:11 ` Duy Nguyen
2015-05-02 2:35 ` Jeff King
2015-05-02 7:11 ` Eric Sunshine
2015-05-03 2:26 ` Junio C Hamano
2015-05-02 2:33 ` Jeff King
2015-05-04 22:12 ` Thiago Farina
2015-05-05 3:43 ` Jeff King
2015-05-05 17:30 ` Mikael Magnusson
2015-05-05 19:12 ` Jeff King
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=20150502020431.GA15775@lanh \
--to=pclouds@gmail$(echo .)com \
--cc=git@vger$(echo .)kernel.org \
--cc=hagins.josh@gmail$(echo .)com \
--cc=peff@peff$(echo .)net \
--cc=tfransosi@gmail$(echo .)com \
/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