public inbox for git@vger.kernel.org 
 help / color / mirror / Atom feed
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< --
 

  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