On Thu, Jan 13 2022, Junio C Hamano wrote: > Ævar Arnfjörð Bjarmason <avarab@xxxxxxxxx> writes: > >> } else if (type == OBJ_TAG) { >> struct tag *tag = lookup_tag(ds->repo, oid); >> const char *tag_tag = ""; >> + timestamp_t tag_date = 0; > > How about leaving these two uninitialized and introduce one extra > bool, > int tag_info_valid = 0; > > and then > >> >> - if (!parse_tag(tag) && tag->tag) >> + if (!parse_tag(tag) && tag->tag) { >> tag_tag = tag->tag; >> + tag_date = tag->date; > > tag_info_valid = 1; > >> + } >> >> /* >> * TRANSLATORS: This is a line of >> * ambiguous tag object output. E.g.: >> * >> - * "deadbeef tag Some Tag Message" >> + * "deadbeef tag 2021-01-01 - Some Tag Message" >> * >> * The second argument is the "tag" string from >> * object.c. >> */ >> - strbuf_addf(&desc, _("%s tag %s"), hash, tag_tag); >> + strbuf_addf(&desc, _("%s tag %s - %s"), hash, >> + show_date(tag_date, 0, DATE_MODE(SHORT)), >> + tag_tag); > > Then this part can use tag_info_valid to conditionally use tag_date > and tag_tag: > > if (tag_info_valid) > strbuf_addf(&desc, ... <hash,date,tag>); > else > strbuf_addf(&desc, _("%s tag [bad]"), hash); > > without throwing a misleading "In 1970 this happened". I still think the trade-off of not doing that discussed in the commit message is better, i.e. (to quote upthread): We could detect that and emit a "%s [bad tag object]" message (to go with the existing generic "%s [bad object]"), but I don't think it's worth the effort. Users are unlikely to ever run into cases where they've got a broken object that's also ambiguous, and in case they do output that's a bit nonsensical beats wasting translator time on this obscure edge case. We should instead change parse_tag_buffer() to be more eager to emit an error() instead of silently aborting with "return -1;". In the case of "t3800-mktag.sh" it takes the "size < the_hash_algo->hexsz + 24" branch. This really is so obscure that I don't think it warrants having N translators re-translate this message users are very likely never to see, ever. And to the extent that they will see anything I've got some planned/upcoming changes to make some of the underlying object machinery emit better diagnostic messages on these bad objects, which would hint in the general case about what's going wrong, instead of needing ambiguous-object-display-specific messaging. >> } else if (type == OBJ_TREE) { >> /* >> * TRANSLATORS: This is a line of ambiguous <type>