diff options
author | Denton Liu <liu.denton@gmail.com> | 2019-04-04 11:25:15 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2019-04-12 10:52:35 +0900 |
commit | eea9c1e78ffd878cbaaf2c1e346e186a1e58a460 (patch) | |
tree | ec87c56eb606225be5ccfb62d0982f591a521a09 /builtin/tag.c | |
parent | tag: fix formatting (diff) | |
download | tgif-eea9c1e78ffd878cbaaf2c1e346e186a1e58a460.tar.xz |
tag: advise on nested tags
Robert Dailey reported confusion on the mailing list about a nested
tag which was most likely created by mistake. Jeff King noted that
this isn't a very common case and creating a tag-to-a-tag can be a
user-error.
Suggest that it may be a mistake with an advice message when
creating such a tag. Those who do want to create a tag that point
at another tag regularly can turn it off with the usual advice
mechanism.
Reported-by: Robert Dailey <rcdailey.lists@gmail.com>
Helped-by: Jeff King <peff@peff.net>
Helped-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Denton Liu <liu.denton@gmail.com>
[jc: fixed test style and tweaked the log message]
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'builtin/tag.c')
-rw-r--r-- | builtin/tag.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/builtin/tag.c b/builtin/tag.c index faae364e0f..32948fade0 100644 --- a/builtin/tag.c +++ b/builtin/tag.c @@ -206,7 +206,14 @@ struct create_tag_options { } cleanup_mode; }; -static void create_tag(const struct object_id *object, const char *tag, +static const char message_advice_nested_tag[] = + N_("You have created a nested tag. The object referred to by your new is\n" + "already a tag. If you meant to tag the object that it points to, use:\n" + "\n" + "\tgit tag -f %s %s^{}"); + +static void create_tag(const struct object_id *object, const char *object_ref, + const char *tag, struct strbuf *buf, struct create_tag_options *opt, struct object_id *prev, struct object_id *result) { @@ -218,6 +225,9 @@ static void create_tag(const struct object_id *object, const char *tag, if (type <= OBJ_NONE) die(_("bad object type.")); + if (type == OBJ_TAG && advice_nested_tag) + advise(_(message_advice_nested_tag), tag, object_ref); + strbuf_addf(&header, "object %s\n" "type %s\n" @@ -551,7 +561,7 @@ int cmd_tag(int argc, const char **argv, const char *prefix) if (create_tag_object) { if (force_sign_annotate && !annotate) opt.sign = 1; - create_tag(&object, tag, &buf, &opt, &prev, &object); + create_tag(&object, object_ref, tag, &buf, &opt, &prev, &object); } transaction = ref_transaction_begin(&err); |