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>
This commit is contained in:

committed by
Junio C Hamano

parent
01dc801ada
commit
eea9c1e78f
@ -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);
|
||||
|
Reference in New Issue
Block a user