"git tag" should not silently accept unrecognized options when operating in a given mode. For example, "git tag -n 100", which may be a typo for "git tag -n100", should not silently create a tag named "100". Signed-off-by: Samuel Tardieu <sam@xxxxxxxxxxx> --- builtin-tag.c | 10 ++++++++-- 1 files changed, 8 insertions(+), 2 deletions(-) diff --git a/builtin-tag.c b/builtin-tag.c index 5ce0e21..d339971 100644 --- a/builtin-tag.c +++ b/builtin-tag.c @@ -344,7 +344,7 @@ int cmd_tag(int argc, const char **argv, const char *prefix) 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 }; @@ -383,10 +383,16 @@ int cmd_tag(int argc, const char **argv, const char *prefix) 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) -- 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