Merge branch 'st/maint-tag' into maint
authorJunio C Hamano <gitster@pobox.com>
Mon, 1 Dec 2008 02:18:50 +0000 (18:18 -0800)
committerJunio C Hamano <gitster@pobox.com>
Mon, 1 Dec 2008 02:18:50 +0000 (18:18 -0800)
* st/maint-tag:
tag: Add more tests about mixing incompatible modes and options
tag: Check that options are only allowed in the appropriate mode

1  2 
builtin-tag.c
diff --combined builtin-tag.c
index 843e9ac056c88bb2c9a8c6ded464096a99f13aff,50cafc814d3774bf358288c23cafbf2cbcecf673..11b91b3c3b2289d396c72067f7b3ded2ec6a0b64
@@@ -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",
@@@ -344,7 -344,7 +344,7 @@@ int cmd_tag(int argc, const char **argv
        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 };
        }
        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)
                }
        }
  
-       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";