From: Junio C Hamano <gitster@pobox.com>
To: Pierre Habouzit <madcoder@debian.org>
Cc: Jeff King <peff@peff.net>, git@vger.kernel.org
Subject: [PATCH] builtin-tag: fix fallouts from recent parsopt restriction.
Date: Sun, 16 Dec 2007 23:28:41 -0800 [thread overview]
Message-ID: <7vd4t5eq52.fsf@gitster.siamese.dyndns.org> (raw)
In-Reply-To: 20071213102636.GD12398@artemis.madism.org
The command freely used optional option-argments for its -l and -n options.
I think allowing "git tag -n xxx" without barfing was an error to begin with,
but not supporting "git tag -l pattern" form is a serious regression.
So this fixes the handling of -l to reinstate the original behaviour while
detecting a user error "git tag -l pattern garbage", and adjusts tests that
use "-n param" form to use "-nparam".
Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
builtin-tag.c | 15 +++++++-
t/t7004-tag.sh | 110 +++++++++++++++++++++++++------------------------------
2 files changed, 63 insertions(+), 62 deletions(-)
diff --git a/builtin-tag.c b/builtin-tag.c
index 274901a..5213c62 100644
--- a/builtin-tag.c
+++ b/builtin-tag.c
@@ -371,7 +371,7 @@ int cmd_tag(int argc, const char **argv, const char *prefix)
int annotate = 0, sign = 0, force = 0, lines = 0,
delete = 0, verify = 0;
- char *list = NULL, *msgfile = NULL, *keyid = NULL;
+ const char *list = NULL, *msgfile = NULL, *keyid = NULL;
const char *no_pattern = "NO_PATTERN";
struct msg_arg msg = { 0, STRBUF_INIT };
struct option options[] = {
@@ -407,8 +407,19 @@ int cmd_tag(int argc, const char **argv, const char *prefix)
if (sign)
annotate = 1;
- if (list)
+ if (list) {
+ /*
+ * This is unfortunate but requiring "git tag -lpattern" and not
+ * allowing "git tag -l pattern" is a serious regression.
+ */
+ if (argc && list == no_pattern) {
+ list = argv[0];
+ argc--;
+ }
+ if (argc)
+ die("extra argument after -l[pattern]: %s", argv[0]);
return list_tags(list == no_pattern ? NULL : list, lines);
+ }
if (delete)
return for_each_tag_name(argv, delete_tag);
if (verify)
diff --git a/t/t7004-tag.sh b/t/t7004-tag.sh
index 09d56e0..7f58038 100755
--- a/t/t7004-tag.sh
+++ b/t/t7004-tag.sh
@@ -491,25 +491,19 @@ test_expect_success \
echo "tag-one-line" >expect &&
git-tag -l | grep "^tag-one-line" >actual &&
git diff expect actual &&
- git-tag -n 0 -l | grep "^tag-one-line" >actual &&
+ git-tag -n0 -l | grep "^tag-one-line" >actual &&
git diff expect actual &&
- git-tag -n 0 -l tag-one-line >actual &&
+ git-tag -n0 -l tag-one-line >actual &&
git diff expect actual &&
echo "tag-one-line A msg" >expect &&
- git-tag -n xxx -l | grep "^tag-one-line" >actual &&
- git diff expect actual &&
- git-tag -n "" -l | grep "^tag-one-line" >actual &&
- git diff expect actual &&
- git-tag -n 1 -l | grep "^tag-one-line" >actual &&
- git diff expect actual &&
git-tag -n -l | grep "^tag-one-line" >actual &&
git diff expect actual &&
- git-tag -n 1 -l tag-one-line >actual &&
+ git-tag -n1 -l | grep "^tag-one-line" >actual &&
git diff expect actual &&
- git-tag -n 2 -l tag-one-line >actual &&
+ git-tag -n2 -l tag-one-line >actual &&
git diff expect actual &&
- git-tag -n 999 -l tag-one-line >actual &&
+ git-tag -n999 -l tag-one-line >actual &&
git diff expect actual
'
@@ -520,21 +514,21 @@ test_expect_success \
echo "tag-zero-lines" >expect &&
git-tag -l | grep "^tag-zero-lines" >actual &&
git diff expect actual &&
- git-tag -n 0 -l | grep "^tag-zero-lines" >actual &&
+ git-tag -n0 -l | grep "^tag-zero-lines" >actual &&
git diff expect actual &&
- git-tag -n 0 -l tag-zero-lines >actual &&
+ git-tag -n0 -l tag-zero-lines >actual &&
git diff expect actual &&
echo "tag-zero-lines " >expect &&
- git-tag -n 1 -l | grep "^tag-zero-lines" >actual &&
+ git-tag -n1 -l | grep "^tag-zero-lines" >actual &&
git diff expect actual &&
git-tag -n -l | grep "^tag-zero-lines" >actual &&
git diff expect actual &&
- git-tag -n 1 -l tag-zero-lines >actual &&
+ git-tag -n1 -l tag-zero-lines >actual &&
git diff expect actual &&
- git-tag -n 2 -l tag-zero-lines >actual &&
+ git-tag -n2 -l tag-zero-lines >actual &&
git diff expect actual &&
- git-tag -n 999 -l tag-zero-lines >actual &&
+ git-tag -n999 -l tag-zero-lines >actual &&
git diff expect actual
'
@@ -548,37 +542,37 @@ test_expect_success \
echo "tag-lines" >expect &&
git-tag -l | grep "^tag-lines" >actual &&
git diff expect actual &&
- git-tag -n 0 -l | grep "^tag-lines" >actual &&
+ git-tag -n0 -l | grep "^tag-lines" >actual &&
git diff expect actual &&
- git-tag -n 0 -l tag-lines >actual &&
+ git-tag -n0 -l tag-lines >actual &&
git diff expect actual &&
echo "tag-lines tag line one" >expect &&
- git-tag -n 1 -l | grep "^tag-lines" >actual &&
+ git-tag -n1 -l | grep "^tag-lines" >actual &&
git diff expect actual &&
git-tag -n -l | grep "^tag-lines" >actual &&
git diff expect actual &&
- git-tag -n 1 -l tag-lines >actual &&
+ git-tag -n1 -l tag-lines >actual &&
git diff expect actual &&
echo " tag line two" >>expect &&
- git-tag -n 2 -l | grep "^ *tag.line" >actual &&
+ git-tag -n2 -l | grep "^ *tag.line" >actual &&
git diff expect actual &&
- git-tag -n 2 -l tag-lines >actual &&
+ git-tag -n2 -l tag-lines >actual &&
git diff expect actual &&
echo " tag line three" >>expect &&
- git-tag -n 3 -l | grep "^ *tag.line" >actual &&
+ git-tag -n3 -l | grep "^ *tag.line" >actual &&
git diff expect actual &&
- git-tag -n 3 -l tag-lines >actual &&
+ git-tag -n3 -l tag-lines >actual &&
git diff expect actual &&
- git-tag -n 4 -l | grep "^ *tag.line" >actual &&
+ git-tag -n4 -l | grep "^ *tag.line" >actual &&
git diff expect actual &&
- git-tag -n 4 -l tag-lines >actual &&
+ git-tag -n4 -l tag-lines >actual &&
git diff expect actual &&
- git-tag -n 99 -l | grep "^ *tag.line" >actual &&
+ git-tag -n99 -l | grep "^ *tag.line" >actual &&
git diff expect actual &&
- git-tag -n 99 -l tag-lines >actual &&
+ git-tag -n99 -l tag-lines >actual &&
git diff expect actual
'
@@ -906,25 +900,21 @@ test_expect_success \
echo "stag-one-line" >expect &&
git-tag -l | grep "^stag-one-line" >actual &&
git diff expect actual &&
- git-tag -n 0 -l | grep "^stag-one-line" >actual &&
+ git-tag -n0 -l | grep "^stag-one-line" >actual &&
git diff expect actual &&
- git-tag -n 0 -l stag-one-line >actual &&
+ git-tag -n0 -l stag-one-line >actual &&
git diff expect actual &&
echo "stag-one-line A message line signed" >expect &&
- git-tag -n xxx -l | grep "^stag-one-line" >actual &&
- git diff expect actual &&
- git-tag -n "" -l | grep "^stag-one-line" >actual &&
- git diff expect actual &&
- git-tag -n 1 -l | grep "^stag-one-line" >actual &&
- git diff expect actual &&
git-tag -n -l | grep "^stag-one-line" >actual &&
git diff expect actual &&
- git-tag -n 1 -l stag-one-line >actual &&
+ git-tag -n1 -l | grep "^stag-one-line" >actual &&
git diff expect actual &&
- git-tag -n 2 -l stag-one-line >actual &&
+ git-tag -n1 -l stag-one-line >actual &&
git diff expect actual &&
- git-tag -n 999 -l stag-one-line >actual &&
+ git-tag -n2 -l stag-one-line >actual &&
+ git diff expect actual &&
+ git-tag -n999 -l stag-one-line >actual &&
git diff expect actual
'
@@ -935,21 +925,21 @@ test_expect_success \
echo "stag-zero-lines" >expect &&
git-tag -l | grep "^stag-zero-lines" >actual &&
git diff expect actual &&
- git-tag -n 0 -l | grep "^stag-zero-lines" >actual &&
+ git-tag -n0 -l | grep "^stag-zero-lines" >actual &&
git diff expect actual &&
- git-tag -n 0 -l stag-zero-lines >actual &&
+ git-tag -n0 -l stag-zero-lines >actual &&
git diff expect actual &&
echo "stag-zero-lines " >expect &&
- git-tag -n 1 -l | grep "^stag-zero-lines" >actual &&
- git diff expect actual &&
git-tag -n -l | grep "^stag-zero-lines" >actual &&
git diff expect actual &&
- git-tag -n 1 -l stag-zero-lines >actual &&
+ git-tag -n1 -l | grep "^stag-zero-lines" >actual &&
+ git diff expect actual &&
+ git-tag -n1 -l stag-zero-lines >actual &&
git diff expect actual &&
- git-tag -n 2 -l stag-zero-lines >actual &&
+ git-tag -n2 -l stag-zero-lines >actual &&
git diff expect actual &&
- git-tag -n 999 -l stag-zero-lines >actual &&
+ git-tag -n999 -l stag-zero-lines >actual &&
git diff expect actual
'
@@ -963,37 +953,37 @@ test_expect_success \
echo "stag-lines" >expect &&
git-tag -l | grep "^stag-lines" >actual &&
git diff expect actual &&
- git-tag -n 0 -l | grep "^stag-lines" >actual &&
+ git-tag -n0 -l | grep "^stag-lines" >actual &&
git diff expect actual &&
- git-tag -n 0 -l stag-lines >actual &&
+ git-tag -n0 -l stag-lines >actual &&
git diff expect actual &&
echo "stag-lines stag line one" >expect &&
- git-tag -n 1 -l | grep "^stag-lines" >actual &&
- git diff expect actual &&
git-tag -n -l | grep "^stag-lines" >actual &&
git diff expect actual &&
- git-tag -n 1 -l stag-lines >actual &&
+ git-tag -n1 -l | grep "^stag-lines" >actual &&
+ git diff expect actual &&
+ git-tag -n1 -l stag-lines >actual &&
git diff expect actual &&
echo " stag line two" >>expect &&
- git-tag -n 2 -l | grep "^ *stag.line" >actual &&
+ git-tag -n2 -l | grep "^ *stag.line" >actual &&
git diff expect actual &&
- git-tag -n 2 -l stag-lines >actual &&
+ git-tag -n2 -l stag-lines >actual &&
git diff expect actual &&
echo " stag line three" >>expect &&
- git-tag -n 3 -l | grep "^ *stag.line" >actual &&
+ git-tag -n3 -l | grep "^ *stag.line" >actual &&
git diff expect actual &&
- git-tag -n 3 -l stag-lines >actual &&
+ git-tag -n3 -l stag-lines >actual &&
git diff expect actual &&
- git-tag -n 4 -l | grep "^ *stag.line" >actual &&
+ git-tag -n4 -l | grep "^ *stag.line" >actual &&
git diff expect actual &&
- git-tag -n 4 -l stag-lines >actual &&
+ git-tag -n4 -l stag-lines >actual &&
git diff expect actual &&
- git-tag -n 99 -l | grep "^ *stag.line" >actual &&
+ git-tag -n99 -l | grep "^ *stag.line" >actual &&
git diff expect actual &&
- git-tag -n 99 -l stag-lines >actual &&
+ git-tag -n99 -l stag-lines >actual &&
git diff expect actual
'
--
1.5.4.rc0.54.g3eb2
next prev parent reply other threads:[~2007-12-17 7:29 UTC|newest]
Thread overview: 51+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-12-13 5:52 [RFH] convert shortlog to use parse_options Jeff King
2007-12-13 9:06 ` Pierre Habouzit
2007-12-13 9:10 ` Jeff King
2007-12-13 9:35 ` Pierre Habouzit
2007-12-13 10:26 ` [PATCH 1/2] parseopt: Enforce the use of the sticked form for optional arguments Pierre Habouzit
2007-12-13 10:27 ` [PATCH 2/2] parseopt: Add a gitcli(5) man page Pierre Habouzit
2007-12-13 11:04 ` Wincent Colaiuta
2007-12-13 13:56 ` Pierre Habouzit
2007-12-17 7:28 ` [PATCH] (squashme) gitcli documentation fixups Junio C Hamano
2007-12-17 8:51 ` Pierre Habouzit
2007-12-17 8:57 ` Pierre Habouzit
2007-12-17 7:28 ` Junio C Hamano [this message]
2007-12-17 9:07 ` [PATCH] builtin-tag: fix fallouts from recent parsopt restriction Pierre Habouzit
2007-12-17 10:53 ` Junio C Hamano
2007-12-17 10:58 ` Pierre Habouzit
2007-12-17 11:21 ` Junio C Hamano
2007-12-17 12:33 ` Pierre Habouzit
2007-12-17 19:52 ` Junio C Hamano
2007-12-17 20:31 ` Jeff King
2007-12-17 20:42 ` Pierre Habouzit
2007-12-17 21:01 ` Pierre Habouzit
2007-12-17 23:07 ` Jeff King
2007-12-17 23:14 ` Pierre Habouzit
2007-12-17 20:42 ` Junio C Hamano
2007-12-17 20:53 ` Jeff King
2007-12-17 21:24 ` Pierre Habouzit
2007-12-17 21:11 ` Pierre Habouzit
2007-12-17 11:13 ` Junio C Hamano
2007-12-17 11:56 ` Pierre Habouzit
2007-12-17 11:59 ` Pierre Habouzit
2007-12-13 17:40 ` [RFH] convert shortlog to use parse_options Junio C Hamano
2007-12-13 18:03 ` Pierre Habouzit
2007-12-13 18:07 ` Pierre Habouzit
2007-12-13 19:49 ` Junio C Hamano
2007-12-13 18:28 ` Kristian Høgsberg
2007-12-13 18:47 ` Kristian Høgsberg
2007-12-13 20:46 ` Junio C Hamano
2007-12-14 4:08 ` Jeff King
2007-12-14 5:59 ` Junio C Hamano
2007-12-14 8:33 ` Andreas Ericsson
2007-12-14 8:39 ` Pierre Habouzit
2007-12-14 20:34 ` Junio C Hamano
2007-12-15 11:03 ` Pierre Habouzit
2007-12-17 7:27 ` Junio C Hamano
2007-12-17 7:36 ` Andreas Ericsson
2007-12-17 7:59 ` Junio C Hamano
2007-12-17 9:38 ` Andreas Ericsson
2007-12-17 16:21 ` Kristian Høgsberg
2007-12-13 19:31 ` Junio C Hamano
2007-12-13 20:53 ` Pierre Habouzit
2007-12-13 9:29 ` Pierre Habouzit
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=7vd4t5eq52.fsf@gitster.siamese.dyndns.org \
--to=gitster@pobox.com \
--cc=git@vger.kernel.org \
--cc=madcoder@debian.org \
--cc=peff@peff.net \
/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;
as well as URLs for NNTP newsgroup(s).