Git development
 help / color / mirror / Atom feed
From: Tom Grennan <tmgrennan@gmail.com>
To: Junio C Hamano <gitster@pobox.com>
Cc: pclouds@gmail.com, git@vger.kernel.org, jasampler@gmail.com
Subject: Re: [RFC/PATCH] tag: make list exclude !<pattern>
Date: Sat, 11 Feb 2012 11:47:19 -0800	[thread overview]
Message-ID: <20120211194719.GE4903@tgrennan-laptop> (raw)
In-Reply-To: <7vy5s9n70x.fsf@alter.siamese.dyndns.org>

On Fri, Feb 10, 2012 at 11:50:06PM -0800, Junio C Hamano wrote:
>Junio C Hamano <gitster@pobox.com> writes:
>
>>    ... Same
>>    for 1c, which I highly suspect will introduce regression without
>>    looking at the code (for-each-ref is prefix-match only), ...

OK I'll study this further and run through t6300-for-each-ref.sh
I see it has a bunch of errors.
I think there are similar issues using match_pattern() with
show-branch and ls-remote.

Thanks,

>This part needs correction.  for-each-ref matches the command line
>arguments differently from branch --list and tag --list in two important
>ways.
>
> (1) It allows (not "only" which was a mistake in my earlier message)
>     prefix matching, e.g. "for-each-ref refs/heads/", in addition to
>     fnmatch(); and
>
> (2) The fnmatch() call is made with FNM_PATHMAME, which "branch --list"
>     and "tag --list" does not use.
>
>Strictly speaking, therefore, if you make all three commands to use the
>same matching logic, there is no way to avoid regression.  If you choose
>to use fnmatch() without FNM_PATHNAME, then for-each-ref suddenly starts
>matching wildcards across name hierarchy boundary '/' for a pattern that
>does not match today, e.g. "git for-each-ref 'refs/heads/*'" was a good
>way to grab only the integration branches while excluding individual topic
>branches such as refs/heads/tg/tag-points-at, but this technique can no
>longer be used for such a purpose, which is an unpleasant regression.
>
>I personally think that it was an annoying UI mistake that we let branch
>and tag call fnmatch without FNM_PATHNAME, but we cannot fix it lightly,
>either.  People who use hierchical branch names (e.g. maint-1.0/$topic,
>maint-2.0/$topic, and feature-2.0/$topic) may already be used to list all
>the topics on the maintenance tracks with "branch --list 'maint*'", and we
>need to keep "branch --list" and "tag --list" working as they expect.
>
>One possible way forward (now I am talking about a longer term solution)
>would be to introduce
>
>	refname_match_pattern(const char *refname,
>        		      const char **pattern,
>                              unsigned flags);
>
>where flags can tell the implementation if FNM_PATHNAME should be used,
>and if prefix matching should be attempted, so that the three commands
>share the single same matching function while still retaining their
>current behaviour in the initial round.  Inside the implementation, we
>would use good old fnmatch(), with or without FNM_PATHNAME, depending on
>the flags the caller passes.
>
>In a future versions, we may want to have "branch/tag --list" also ask for
>FNM_PATHNAME (this *is* a backward incompatible change, so it needs to be
>performed across major version boundary, with backward compatibility
>configurations, deprecation warnings and whole nine yards). Under the new
>match function, today's "branch --list 'maint*'" needs to be spelled as
>"branch --list 'maint*/*'" or something.  The prefix matching is probably
>safer to enable by default without causing big regression hassle if we
>limit the prefix match to only patterns that end with an explicit slash,
>as users already *know* today's "branch --list tg/" would not match
>anything (because the pattern does not even match a brahch 'tg', so it is
>unlikely they are using it and expecting only 'tg' to match), which means
>that is an unlikely input we can safely give new meaning to match anything
>under tg/ hierarchy.
>

  parent reply	other threads:[~2012-02-11 19:47 UTC|newest]

Thread overview: 83+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-02-09 19:43 [RFC/PATCH] tag: make list exclude !<pattern> Tom Grennan
2012-02-09 19:43 ` Tom Grennan
2012-02-10  0:00   ` Tom Grennan
2012-02-10  6:34 ` Nguyen Thai Ngoc Duy
2012-02-10 18:55   ` Tom Grennan
2012-02-11  2:16     ` Tom Grennan
2012-02-11  3:06       ` Junio C Hamano
2012-02-11  7:50         ` Junio C Hamano
2012-02-11 10:13           ` Jakub Narebski
2012-02-11 14:06             ` Nguyen Thai Ngoc Duy
2012-02-11 18:31             ` Junio C Hamano
2012-02-11 19:47           ` Tom Grennan [this message]
2012-02-11  7:50         ` Michael Haggerty
2012-02-11  8:13           ` Junio C Hamano
2012-02-13  5:29             ` Michael Haggerty
2012-02-13  6:37               ` Junio C Hamano
2012-02-13  9:37                 ` Michael Haggerty
2012-02-13 10:23                   ` Junio C Hamano
2012-02-13 14:34                     ` Michael Haggerty
2012-02-13 20:29                       ` Junio C Hamano
2012-02-11 19:08         ` Tom Grennan
2012-02-22  1:28           ` [PATCHv3 0/5] " Tom Grennan
2012-02-22  1:28           ` [PATCHv3 1/5] refs: add match_pattern() Tom Grennan
2012-02-22  6:33             ` Junio C Hamano
2012-02-22 23:47               ` Tom Grennan
2012-02-23  0:17                 ` Junio C Hamano
2012-02-23  0:59                   ` Tom Grennan
2012-02-22  1:28           ` [PATCHv3 2/5] tag --points-at option wrapper Tom Grennan
2012-02-22  1:28           ` [PATCHv3 3/5] tag --exclude option Tom Grennan
2012-02-22  6:33             ` Junio C Hamano
2012-02-23  0:22               ` Tom Grennan
2012-02-23  1:00                 ` Junio C Hamano
2012-03-01  1:45                 ` [PATCH 0/5] modernize test style Tom Grennan
2012-03-03  2:15                   ` [PATCHv2 " Tom Grennan
2012-03-03  8:04                     ` Junio C Hamano
2012-03-03 17:42                       ` Tom Grennan
2012-03-03  2:15                   ` [PATCHv2 1/5] t7004 (tag): modernize style Tom Grennan
2012-03-03 21:31                     ` Johannes Sixt
2012-03-03  2:15                   ` [PATCHv2 2/5] t5512 (ls-remote): " Tom Grennan
2012-03-03  8:05                     ` Junio C Hamano
2012-03-03 17:33                       ` Tom Grennan
2012-03-03  2:15                   ` [PATCHv2 3/5] t3200 (branch): " Tom Grennan
2012-03-03  2:15                   ` [PATCHv2 4/5] t0040 (parse-options): " Tom Grennan
2012-03-03  2:15                   ` [PATCHv2 5/5] t6300 (for-each-ref): " Tom Grennan
2012-03-03  2:15                   ` [PATCHv2-w 101/105] t7004 (tag): " Tom Grennan
2012-03-03  2:15                   ` [PATCHv2-w 102/105] t5512 (ls-remote): " Tom Grennan
2012-03-03  2:15                   ` [PATCHv2-w 103/105] t3200 (branch): " Tom Grennan
2012-03-03  2:15                   ` [PATCHv2-w 104/105] t0040 (parse-options): " Tom Grennan
2012-03-03  2:15                   ` [PATCHv2-w 105/105] t6300 (for-each-ref): " Tom Grennan
2012-03-01  1:45                 ` [PATCH 1/5] " Tom Grennan
2012-03-01  6:53                   ` Johannes Sixt
2012-03-01 15:58                     ` Tom Grennan
2012-03-01  1:45                 ` [PATCH 2/5] t5512 (ls-remote): " Tom Grennan
2012-03-01  8:36                   ` Thomas Rast
2012-03-01  1:45                 ` [PATCH 3/5] t3200 (branch): " Tom Grennan
2012-03-01  1:45                 ` [PATCH 4/5] t0040 (parse-options): " Tom Grennan
2012-03-01  1:45                 ` [PATCH 5/5] t7004 (tag): " Tom Grennan
2012-03-01  1:45                 ` [PATCH-w 101/105] t6300 (for-each-ref): " Tom Grennan
2012-03-01  2:13                   ` Junio C Hamano
2012-03-01  3:20                     ` Tom Grennan
2012-03-01  3:26                       ` Junio C Hamano
2012-03-01  5:10                         ` Tom Grennan
2012-03-01  5:57                           ` Tom Grennan
2012-03-01  8:42                           ` Thomas Rast
2012-03-01 15:48                             ` Tom Grennan
2012-03-01  1:45                 ` [PATCH-w 102/105] t5512 (ls-remote): " Tom Grennan
2012-03-01  1:45                 ` [PATCH-w 103/105] t3200 (branch): " Tom Grennan
2012-03-01  1:45                 ` [PATCH-w 104/105] t0040 (parse-options): " Tom Grennan
2012-03-01  1:45                 ` [PATCH-w 105/105] t7004 (tag): " Tom Grennan
2012-02-22  1:28           ` [PATCHv3 4/5] branch --exclude option Tom Grennan
2012-02-22  1:28           ` [PATCHv3 5/5] for-each-ref " Tom Grennan
2012-02-11  2:16     ` [PATCHv2 1/4] refs: add common refname_match_patterns() Tom Grennan
2012-02-11  7:12       ` Michael Haggerty
2012-02-11 19:17         ` Tom Grennan
2012-02-13  5:00           ` Michael Haggerty
2012-02-13 17:27             ` Tom Grennan
2012-02-11  8:06       ` Junio C Hamano
2012-02-11 19:37         ` Tom Grennan
2012-02-11 23:43           ` Junio C Hamano
2012-02-13 16:29             ` Tom Grennan
2012-02-11  2:16     ` [PATCHv2 2/4] tag: use refs.c:refname_match_patterns() Tom Grennan
2012-02-11  2:16     ` [PATCHv2 3/4] branch: " Tom Grennan
2012-02-11  2:16     ` [PATCHv2 4/4] for-each-ref: " Tom Grennan

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=20120211194719.GE4903@tgrennan-laptop \
    --to=tmgrennan@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=jasampler@gmail.com \
    --cc=pclouds@gmail.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox