Skip to content

Commit

Permalink
git-tag: Fix -l option to use better shell style globs.
Browse files Browse the repository at this point in the history
This patch removes certain behaviour of "git tag -l foo", currently
listing every tag name having "foo" as a substring.  The same
thing now could be achieved doing "git tag -l '*foo*'".

This feature was added recently when git-tag.sh got the -n option
for showing tag annotations, because that commit also replaced the
old "grep pattern" behaviour with a more preferable "shell pattern"
behaviour (although slightly modified as you can see).
Thus, the following builtin-tag.c implemented it in order to
ensure that tests were passing unchanged with both programs.

Since common "shell patterns" match names with a given substring
_only_ when * is inserted before and after (as in "*substring*"), and
the "plain" behaviour cannot be achieved easily with the current
implementation, this is mostly the right thing to do, in order to
make it more flexible and consistent.

Tests for "git tag" were also changed to reflect this.

Signed-off-by: Carlos Rica <jasampler@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Carlos Rica authored and Junio C Hamano committed Sep 1, 2007
1 parent 751eb39 commit 18e32b5
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 20 deletions.
11 changes: 2 additions & 9 deletions builtin-tag.c
Original file line number Diff line number Diff line change
Expand Up @@ -123,22 +123,15 @@ static int show_reference(const char *refname, const unsigned char *sha1,
static int list_tags(const char *pattern, int lines)
{
struct tag_filter filter;
char *newpattern;

if (pattern == NULL)
pattern = "";
pattern = "*";

/* prepend/append * to the shell pattern: */
newpattern = xmalloc(strlen(pattern) + 3);
sprintf(newpattern, "*%s*", pattern);

filter.pattern = newpattern;
filter.pattern = pattern;
filter.lines = lines;

for_each_tag_ref(show_reference, (void *) &filter);

free(newpattern);

return 0;
}

Expand Down
20 changes: 9 additions & 11 deletions t/t7004-tag.sh
Original file line number Diff line number Diff line change
Expand Up @@ -185,18 +185,17 @@ cba
EOF
test_expect_success \
'listing tags with substring as pattern must print those matching' '
git-tag -l a > actual &&
git-tag -l "*a*" > actual &&
git diff expect actual
'

cat >expect <<EOF
v0.2.1
v1.0.1
v1.1.3
EOF
test_expect_success \
'listing tags with substring as pattern must print those matching' '
git-tag -l .1 > actual &&
'listing tags with a suffix as pattern must print those matching' '
git-tag -l "*.1" > actual &&
git diff expect actual
'

Expand All @@ -205,37 +204,36 @@ t210
t211
EOF
test_expect_success \
'listing tags with substring as pattern must print those matching' '
git-tag -l t21 > actual &&
'listing tags with a prefix as pattern must print those matching' '
git-tag -l "t21*" > actual &&
git diff expect actual
'

cat >expect <<EOF
a1
aa1
EOF
test_expect_success \
'listing tags using a name as pattern must print those matching' '
'listing tags using a name as pattern must print that one matching' '
git-tag -l a1 > actual &&
git diff expect actual
'

cat >expect <<EOF
v1.0
v1.0.1
EOF
test_expect_success \
'listing tags using a name as pattern must print those matching' '
'listing tags using a name as pattern must print that one matching' '
git-tag -l v1.0 > actual &&
git diff expect actual
'

cat >expect <<EOF
v1.0.1
v1.1.3
EOF
test_expect_success \
'listing tags with ? in the pattern should print those matching' '
git-tag -l "1.1?" > actual &&
git-tag -l "v1.?.?" > actual &&
git diff expect actual
'

Expand Down

0 comments on commit 18e32b5

Please sign in to comment.