From: Junio C Hamano Date: Thu, 13 Nov 2008 05:49:25 +0000 (-0800) Subject: Merge branch 'st/tag' X-Git-Tag: v1.6.1-rc1~64 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/df5e12f7d405b84de07c3f2dc1afe51b1d594e2c?ds=inline;hp=-c Merge branch 'st/tag' * st/tag: tag: Add more tests about mixing incompatible modes and options tag: Check that options are only allowed in the appropriate mode --- df5e12f7d405b84de07c3f2dc1afe51b1d594e2c diff --combined builtin-tag.c index 84db156e63,50cafc814d..d339971fab --- a/builtin-tag.c +++ b/builtin-tag.c @@@ -125,7 -125,7 +125,7 @@@ static int for_each_tag_name(const cha static int delete_tag(const char *name, const char *ref, const unsigned char *sha1) { - if (delete_ref(ref, sha1)) + if (delete_ref(ref, sha1, 0)) return 1; printf("Deleted tag '%s'\n", name); return 0; @@@ -283,7 -283,7 +283,7 @@@ static void create_tag(const unsigned c int fd; /* write the template message before editing: */ - path = xstrdup(git_path("TAG_EDITMSG")); + path = git_pathdup("TAG_EDITMSG"); fd = open(path, O_CREAT | O_TRUNC | O_WRONLY, 0600); if (fd < 0) die("could not create file '%s': %s", @@@ -338,13 -338,13 +338,13 @@@ static int parse_msg_arg(const struct o int cmd_tag(int argc, const char **argv, const char *prefix) { - struct strbuf buf; + struct strbuf buf = STRBUF_INIT; unsigned char object[20], prev[20]; char ref[PATH_MAX]; const char *object_ref, *tag; struct ref_lock *lock; - int annotate = 0, sign = 0, force = 0, lines = 0, + int annotate = 0, sign = 0, force = 0, lines = -1, list = 0, delete = 0, verify = 0; const char *msgfile = NULL, *keyid = NULL; struct msg_arg msg = { 0, STRBUF_INIT }; @@@ -380,14 -380,25 +380,24 @@@ } if (sign) annotate = 1; + if (argc == 0 && !(delete || verify)) + list = 1; + if ((annotate || msg.given || msgfile || force) && + (list || delete || verify)) + usage_with_options(git_tag_usage, options); + + if (list + delete + verify > 1) + usage_with_options(git_tag_usage, options); if (list) - return list_tags(argv[0], lines); + return list_tags(argv[0], lines == -1 ? 0 : lines); + if (lines != -1) + die("-n option is only allowed with -l."); if (delete) return for_each_tag_name(argv, delete_tag); if (verify) return for_each_tag_name(argv, verify_tag); - strbuf_init(&buf, 0); if (msg.given || msgfile) { if (msg.given && msgfile) die("only one -F or -m option is allowed."); @@@ -406,11 -417,6 +416,6 @@@ } } - if (argc == 0) { - if (annotate) - usage_with_options(git_tag_usage, options); - return list_tags(NULL, lines); - } tag = argv[0]; object_ref = argc == 2 ? argv[1] : "HEAD"; diff --combined t/t7004-tag.sh index f0edbf1a76,c616deb0d0..f377fea4bb --- a/t/t7004-tag.sh +++ b/t/t7004-tag.sh @@@ -625,7 -625,7 +625,7 @@@ esa # Name and email: C O Mitter # No password given, to enable non-interactive operation. -cp -R ../t7004 ./gpghome +cp -R "$TEST_DIRECTORY"/t7004 ./gpghome chmod 0700 gpghome GNUPGHOME="$(pwd)/gpghome" export GNUPGHOME @@@ -1090,4 -1090,15 +1090,15 @@@ test_expect_success 'filename for the m git cat-file tag tag-from-subdir-2 | grep "in sub directory" ' + # mixing modes and options: + + test_expect_success 'mixing incompatibles modes and options is forbidden' ' + test_must_fail git tag -a + test_must_fail git tag -l -v + test_must_fail git tag -n 100 + test_must_fail git tag -l -m msg + test_must_fail git tag -l -F some file + test_must_fail git tag -v -s + ' + test_done