Re: [PATCH 1/2] pathspec magic: add '^' as alias for '!'

2017-02-08 Thread Stefan Beller
On Wed, Feb 8, 2017 at 3:05 PM, Junio C Hamano  wrote:
>  - it hints that '!' is the more official spelling, making the
>output you showed above acceptable.

Long term , I'd rather have ^ as the "official" spelling as that is easier
to teach to people. ! being a historic mistake as it is hard to type?


Re: [PATCH 1/2] pathspec magic: add '^' as alias for '!'

2017-02-08 Thread Junio C Hamano
Brandon Williams  writes:

> git cmd -- :^dir
>
> would produce some output which says:
> ':^dir': pathspec magic not supported by this command: 'exclude' (mnemonic: 
> '!')
>
> And the user may scratch their head for a second since they didn't
> supply the '!' character, but rather '^'.

Yup, I am tempted to tweak Cornelius's glossary fixup and squash
this into the series, for two purposes.

 - it makes it clear that '^' and '!' mean the same thing (and
   clearer than Cornelius's original, "! or ^", which could leave
   the reader wondering "ok there are two ways to say negative; do
   they subtly mean different things?").

 - it hints that '!' is the more official spelling, making the
   output you showed above acceptable.

diff --git a/Documentation/glossary-content.txt 
b/Documentation/glossary-content.txt
index 8ad29e61a9..822ca83264 100644
--- a/Documentation/glossary-content.txt
+++ b/Documentation/glossary-content.txt
@@ -386,8 +386,8 @@ Glob magic is incompatible with literal magic.
 
 exclude;;
After a path matches any non-exclude pathspec, it will be run
-   through all exclude pathspec (magic signature: `!`). If it
-   matches, the path is ignored.
+   through all exclude pathspec (magic signature: `!` or its
+   synonym `^`). If it matches, the path is ignored.
 --
 
 [[def_parent]]parent::


Re: [PATCH 1/2] pathspec magic: add '^' as alias for '!'

2017-02-08 Thread Brandon Williams
On 02/07, Linus Torvalds wrote:
> 
> From: Linus Torvalds <torva...@linux-foundation.org>
> Date: Tue, 7 Feb 2017 21:05:28 -0800
> Subject: [PATCH 1/2] pathspec magic: add '^' as alias for '!'
> 
> The choice of '!' for a negative pathspec ends up not only not matching
> what we do for revisions, it's also a horrible character for shell
> expansion since it needs quoting.
> 
> So add '^' as an alternative alias for an excluding pathspec entry.
> 
> Signed-off-by: Linus Torvalds <torva...@linux-foundation.org>
> ---
>  pathspec.c | 6 ++
>  1 file changed, 6 insertions(+)
> 
> diff --git a/pathspec.c b/pathspec.c
> index 7ababb315..ecad03406 100644
> --- a/pathspec.c
> +++ b/pathspec.c
> @@ -224,6 +224,12 @@ static const char *parse_short_magic(unsigned *magic, 
> const char *elem)
>   char ch = *pos;
>   int i;
>  
> + /* Special case alias for '!' */
> + if (ch == '^') {
> + *magic |= PATHSPEC_EXCLUDE;
> + continue;
> + }
> +
>   if (!is_pathspec_magic(ch))
>   break;

I like adding '^' to be an alias for excluding patterns.  There have
been numerous times where I have wanted to use exclude patterns and
forgotten that I've needed to do some escape magic to get my shell to
leave '!' alone.

The only issue I see with doing this is that if a user supplies an
exclude pattern for a command which doesn't support exclude pathspec
magic the unsupported_magic() function will have slightly cryptic
output.

git cmd -- :^dir

would produce some output which says:
':^dir': pathspec magic not supported by this command: 'exclude' (mnemonic: '!')

And the user may scratch their head for a second since they didn't
supply the '!' character, but rather '^'.  That being said I think it
should be fine since the long name of the magic is also printed so the
user should be able to figure out what's wrong.  I also don't think
there are any users of pathspecs which disallow exclude magic so this
may not even be an issue.

-- 
Brandon Williams


Re: [PATCH 1/2] pathspec magic: add '^' as alias for '!'

2017-02-08 Thread Cornelius Weig
As Duy pointed out, the glossary needs an update too.

For this one, the cange can be minimal I think:

diff --git a/Documentation/glossary-content.txt 
b/Documentation/glossary-content.txt
index 8ad29e6..f127fe9 100644
--- a/Documentation/glossary-content.txt
+++ b/Documentation/glossary-content.txt
@@ -386,7 +386,7 @@ Glob magic is incompatible with literal magic.
 
 exclude;;
After a path matches any non-exclude pathspec, it will be run
-   through all exclude pathspec (magic signature: `!`). If it
+   through all exclude pathspec (magic signature: `!` or `^`). If it
matches, the path is ignored.
 --
 


[PATCH 1/2] pathspec magic: add '^' as alias for '!'

2017-02-07 Thread Linus Torvalds

From: Linus Torvalds <torva...@linux-foundation.org>
Date: Tue, 7 Feb 2017 21:05:28 -0800
Subject: [PATCH 1/2] pathspec magic: add '^' as alias for '!'

The choice of '!' for a negative pathspec ends up not only not matching
what we do for revisions, it's also a horrible character for shell
expansion since it needs quoting.

So add '^' as an alternative alias for an excluding pathspec entry.

Signed-off-by: Linus Torvalds <torva...@linux-foundation.org>
---
 pathspec.c | 6 ++
 1 file changed, 6 insertions(+)

diff --git a/pathspec.c b/pathspec.c
index 7ababb315..ecad03406 100644
--- a/pathspec.c
+++ b/pathspec.c
@@ -224,6 +224,12 @@ static const char *parse_short_magic(unsigned *magic, 
const char *elem)
char ch = *pos;
int i;
 
+   /* Special case alias for '!' */
+   if (ch == '^') {
+   *magic |= PATHSPEC_EXCLUDE;
+   continue;
+   }
+
if (!is_pathspec_magic(ch))
break;
 
-- 
2.12.0.rc0.1.g02555c1b2.dirty