This will exclude tags matching patterns prefaced with the '!' character. This has precedence over other matching patterns. For example, $ git tag -l \!*-rc? v1.7.8* v1.7.8 v1.7.8.1 v1.7.8.2 v1.7.8.3 v1.7.8.4 $ git tag -l v1.7.8* \!*-rc? v1.7.8 v1.7.8.1 v1.7.8.2 v1.7.8.3 v1.7.8.4 This is equivalent to, $ git tag -l v1.7.8* | grep -v '\-rc.' Without a matching pattern, filter all tags with the "!" patterns, $ ./git-tag -l \!*-rc? gitgui-0.10.0 gitgui-0.10.1 gitgui-0.10.2 ... v1.7.8.3 v1.7.8.4 v1.7.9 That is equivalent to, $ git tag -l | grep -v '\-rc.' Signed-off-by: Tom Grennan <tmgrennan@xxxxxxxxx> --- Documentation/git-tag.txt | 10 ++++++---- builtin/tag.c | 15 ++------------- 2 files changed, 8 insertions(+), 17 deletions(-) diff --git a/Documentation/git-tag.txt b/Documentation/git-tag.txt index 53ff5f6..56ea2fa 100644 --- a/Documentation/git-tag.txt +++ b/Documentation/git-tag.txt @@ -12,7 +12,7 @@ SYNOPSIS 'git tag' [-a | -s | -u <key-id>] [-f] [-m <msg> | -F <file>] <tagname> [<commit> | <object>] 'git tag' -d <tagname>... -'git tag' [-n[<num>]] -l [--contains <commit>] [<pattern>...] +'git tag' [-n[<num>]] -l [--contains <commit>] [[!]<pattern>...] 'git tag' -v <tagname>... DESCRIPTION @@ -75,13 +75,15 @@ OPTIONS If no number is given to `-n`, only the first line is printed. If the tag is not annotated, the commit message is displayed instead. --l <pattern>:: ---list <pattern>:: +-l [!]<pattern>:: +--list [!]<pattern>:: List tags with names that match the given pattern (or all if no pattern is given). Running "git tag" without arguments also lists all tags. The pattern is a shell wildcard (i.e., matched using fnmatch(3)). Multiple patterns may be given; if any of - them matches, the tag is shown. + them matches, the tag is shown. If the pattern is prefaced with + the '!' character, all tags matching the pattern are filtered + from the list. --contains <commit>:: Only list tags which contain the specified commit. diff --git a/builtin/tag.c b/builtin/tag.c index 31f02e8..7f99424 100644 --- a/builtin/tag.c +++ b/builtin/tag.c @@ -19,7 +19,7 @@ static const char * const git_tag_usage[] = { "git tag [-a|-s|-u <key-id>] [-f] [-m <msg>|-F <file>] <tagname> [<head>]", "git tag -d <tagname>...", - "git tag -l [-n[<num>]] [<pattern>...]", + "git tag -l [-n[<num>]] [[!]<pattern>...]", "git tag -v <tagname>...", NULL }; @@ -30,17 +30,6 @@ struct tag_filter { struct commit_list *with_commit; }; -static int match_pattern(const char **patterns, const char *ref) -{ - /* no pattern means match everything */ - if (!*patterns) - return 1; - for (; *patterns; patterns++) - if (!fnmatch(*patterns, ref, 0)) - return 1; - return 0; -} - static int in_commit_list(const struct commit_list *want, struct commit *c) { for (; want; want = want->next) @@ -88,7 +77,7 @@ static int show_reference(const char *refname, const unsigned char *sha1, { struct tag_filter *filter = cb_data; - if (match_pattern(filter->patterns, refname)) { + if (refname_match_patterns(filter->patterns, refname)) { int i; unsigned long size; enum object_type type; -- 1.7.8 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html