All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Ævar Arnfjörð Bjarmason" <avarab@gmail.com>
To: git@vger.kernel.org
Cc: "Junio C Hamano" <gitster@pobox.com>, "Jeff King" <peff@peff.net>,
	"Bagas Sanjaya" <bagasdotme@gmail.com>,
	"Josh Steadmon" <steadmon@google.com>,
	"Ævar Arnfjörð Bjarmason" <avarab@gmail.com>
Subject: [PATCH v8 0/7] object-name: make ambiguous object output translatable + show tag date
Date: Thu, 27 Jan 2022 06:26:42 +0100	[thread overview]
Message-ID: <cover-v8-0.7-00000000000-20220127T052116Z-avarab@gmail.com> (raw)
In-Reply-To: <cover-v7-0.6-00000000000-20220111T130811Z-avarab@gmail.com>

This topic improves the output we emit on ambiguous objects as noted
in 5/7, and makes it translatable, see 4/7. See [1] for v7.

This v8 addresses feedback from Junio. There's a small test change +
commit message change in 1/7, and a rather small change in adding an
explicit message in 5/7 for tags that we cannot parse.

The range-diff looks rather scary though because if we're going to add
such output it made sense to add it in a new 3/7, before we made the
output translatable, and then to carry that change forward.

1. https://lore.kernel.org/git/cover-v7-0.6-00000000000-20220111T130811Z-avarab@gmail.com/

Ævar Arnfjörð Bjarmason (7):
  object-name tests: add tests for ambiguous object blind spots
  object-name: explicitly handle OBJ_BAD in show_ambiguous_object()
  object-name: explicitly handle bad tags in show_ambiguous_object()
  object-name: make ambiguous object output translatable
  object-name: show date for ambiguous tag objects
  object-name: iterate ambiguous objects before showing header
  object-name: re-use "struct strbuf" in show_ambiguous_object()

 object-name.c                       | 121 +++++++++++++++++++++++++---
 t/t1512-rev-parse-disambiguation.sh |  81 +++++++++++++++++++
 2 files changed, 190 insertions(+), 12 deletions(-)

Range-diff against v7:
1:  28c01b7f8a5 ! 1:  756c94bda7a object-name tests: add tests for ambiguous object blind spots
    @@ Commit message
         and because a subsequent commit will tweak it. Showing a diff of how
         the output changes is helpful to explain those subsequent commits.
     
    +    The "sed" invocation in test_cmp_failed_rev_parse() doesn't need a
    +    "/g" because under both SHA-1 and SHA-256 we'll wildcard match any
    +    trailing part of the OID after our known starting prefix. We'd like to
    +    convert all of that to just "..." for the "test_cmp" which follows.
    +
         1. https://lore.kernel.org/git/YZwbphPpfGk78w2f@coredump.intra.peff.net/
     
         Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
    @@ t/t1512-rev-parse-disambiguation.sh: export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
      . ./test-lib.sh
      
     +test_cmp_failed_rev_parse () {
    ++	dir=$1
    ++	rev=$2
    ++
     +	cat >expect &&
    -+	test_must_fail git -C "$1" rev-parse "$2" 2>actual.raw &&
    -+	sed "s/\($2\)[0-9a-f]*/\1.../" <actual.raw >actual &&
    ++	test_must_fail git -C "$dir" rev-parse "$rev" 2>actual.raw &&
    ++	sed "s/\($rev\)[0-9a-f]*/\1.../" <actual.raw >actual &&
     +	test_cmp expect actual
     +}
     +
2:  b7027dfc843 = 2:  e60f100003a object-name: explicitly handle OBJ_BAD in show_ambiguous_object()
4:  2e5511c9fa5 ! 3:  eaede34fa4f object-name: show date for ambiguous tag objects
    @@ Metadata
     Author: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
     
      ## Commit message ##
    -    object-name: show date for ambiguous tag objects
    +    object-name: explicitly handle bad tags in show_ambiguous_object()
     
    -    Make the ambiguous tag object output nicer in the case of tag objects
    -    such as ebf3c04b262 (Git 2.32, 2021-06-06) by including the date in
    -    the "tagger" header. I.e.:
    +    Follow-up the handling of OBJ_BAD in the preceding commit and
    +    explicitly handle those cases where parse_tag() fails, or we don't end
    +    up with a non-NULL pointer in in tag->tag.
     
    -        $ git rev-parse b7e68
    -        error: short object ID b7e68 is ambiguous
    -        hint: The candidates are:
    -        hint:   b7e68c41d92 tag 2021-06-06 - v2.32.0
    -        hint:   b7e68ae18e0 commit 2019-12-23 - bisect: use the standard 'if (!var)' way to check for 0
    -        hint:   b7e68f6b413 tree
    -        hint:   b7e68490b97 blob
    -        b7e68
    -        [...]
    +    If we run into such a tag we'd previously be silent about it. We
    +    really should also be handling these batter in parse_tag_buffer() by
    +    being more eager to emit an error(), instead of silently aborting with
    +    "return -1;".
     
    -    Before this we'd emit a "tag" line of:
    +    One example of such a tag is the one that's tested for in
    +    "t3800-mktag.sh", where the code takes the "size <
    +    the_hash_algo->hexsz + 24" branch.
     
    -        hint:   b7e68c41d92 tag v2.32.0
    +    But in lieu of earlier missing "error" output let's show the user
    +    something to indicate why we're not showing a tag message in these
    +    cases, now instead of showing:
     
    -    As with OBJ_COMMIT we punt on the cases where the date in the object
    -    is nonsensical, and other cases where parse_tag() might fail. For
    -    those we'll use our default date of "0" and tag message of
    -    "". E.g. for some of the corrupt tags created by t3800-mktag.sh we'd
    -    emit a line like:
    +        hint:   deadbeef tag
     
    -        hint:   8d62cb0b06 tag 1970-01-01 -
    +    We'll instead display:
     
    -    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.
    +        hint:   deadbeef tag [tag could not be parsed]
     
         Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
     
      ## object-name.c ##
     @@ object-name.c: static int show_ambiguous_object(const struct object_id *oid, void *data)
    - 	} else if (type == OBJ_TAG) {
      		struct tag *tag = lookup_tag(ds->repo, oid);
    - 		const char *tag_tag = "";
    -+		timestamp_t tag_date = 0;
    - 
    --		if (!parse_tag(tag) && tag->tag)
    -+		if (!parse_tag(tag) && tag->tag) {
    - 			tag_tag = tag->tag;
    -+			tag_date = tag->date;
    -+		}
    + 		if (!parse_tag(tag) && tag->tag)
    + 			strbuf_addf(&desc, " %s", tag->tag);
    ++		else
    ++			strbuf_addstr(&desc, " [tag could not be parsed]");
    + 	}
      
    - 		/*
    - 		 * 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);
    - 	} else if (type == OBJ_TREE) {
    - 		/*
    - 		 * TRANSLATORS: This is a line of ambiguous <type>
    + out:
3:  65801f2c890 ! 4:  6a26c917a94 object-name: make ambiguous object output translatable
    @@ Commit message
         for RTL languages, who'd presumably like to change that to
         "%s<SP><SP>\n".
     
    +    In the case of the existing "tag [tag could not be parsed]" output
    +    we'll now instead emit "[bad tag, could not parse it]". This is
    +    consistent with the "[bad object]" output. Rephrasing the message like
    +    this is possible because we're not unconditionally adding the
    +    type_name() at the beginning.
    +
         1. 1ffa26c461 (get_short_sha1: list ambiguous objects on error,
            2016-09-26)
         2. 5cc044e0257 (get_short_oid: sort ambiguous objects by type,
    @@ object-name.c: static int show_ambiguous_object(const struct object_id *oid, voi
     +		strbuf_release(&msg);
      	} else if (type == OBJ_TAG) {
      		struct tag *tag = lookup_tag(ds->repo, oid);
    -+		const char *tag_tag = "";
    -+
    - 		if (!parse_tag(tag) && tag->tag)
    +-		if (!parse_tag(tag) && tag->tag)
     -			strbuf_addf(&desc, " %s", tag->tag);
    -+			tag_tag = tag->tag;
    +-		else
    +-			strbuf_addstr(&desc, " [tag could not be parsed]");
     +
    -+		/*
    -+		 * TRANSLATORS: This is a line of
    -+		 * ambiguous tag object output. E.g.:
    -+		 *
    -+		 *    "deadbeef tag Some Tag Message"
    -+		 *
    -+		 * The second argument is the "tag" string from
    -+		 * object.c.
    -+		 */
    -+		strbuf_addf(&desc, _("%s tag %s"), hash, tag_tag);
    ++		if (!parse_tag(tag) && tag->tag) {
    ++			/*
    ++			 * TRANSLATORS: This is a line of ambiguous
    ++			 * tag object output. E.g.:
    ++			 *
    ++			 *    "deadbeef tag Some Tag Message"
    ++			 *
    ++			 * The second argument is the "tag" string
    ++			 * from object.c.
    ++			 */
    ++			strbuf_addf(&desc, _("%s tag %s"), hash, tag->tag);
    ++		} else {
    ++			/*
    ++			 * TRANSLATORS: This is a line of ambiguous
    ++			 * tag object output where we couldn't parse
    ++			 * the tag itself. E.g.:
    ++			 *
    ++			 *    "deadbeef tag [bad tag, could not parse it]"
    ++			 */
    ++			strbuf_addf(&desc, _("%s [bad tag, could not parse it]"),
    ++				    hash);
    ++		}
     +	} else if (type == OBJ_TREE) {
     +		/*
     +		 * TRANSLATORS: This is a line of ambiguous <type>
-:  ----------- > 5:  6237f07e3a9 object-name: show date for ambiguous tag objects
5:  2c03cdd3c1e = 6:  57336c67dd2 object-name: iterate ambiguous objects before showing header
6:  bf226f67099 ! 7:  1f0e1053918 object-name: re-use "struct strbuf" in show_ambiguous_object()
    @@ object-name.c: static int show_ambiguous_object(const struct object_id *oid, voi
      		strbuf_release(&date);
      		strbuf_release(&msg);
     @@ object-name.c: static int show_ambiguous_object(const struct object_id *oid, void *data)
    - 		 * The second argument is the "tag" string from
    - 		 * object.c.
    - 		 */
    --		strbuf_addf(&desc, _("%s tag %s - %s"), hash,
    -+		strbuf_addf(sb, _("%s tag %s - %s"), hash,
    - 			    show_date(tag_date, 0, DATE_MODE(SHORT)),
    - 			    tag_tag);
    + 			 * The third argument is the "tag" string
    + 			 * from object.c.
    + 			 */
    +-			strbuf_addf(&desc, _("%s tag %s - %s"), hash,
    ++			strbuf_addf(sb, _("%s tag %s - %s"), hash,
    + 				    show_date(tag->date, 0, DATE_MODE(SHORT)),
    + 				    tag->tag);
    + 		} else {
    +@@ object-name.c: static int show_ambiguous_object(const struct object_id *oid, void *data)
    + 			 *
    + 			 *    "deadbeef [bad tag, could not parse it]"
    + 			 */
    +-			strbuf_addf(&desc, _("%s [bad tag, could not parse it]"),
    ++			strbuf_addf(sb, _("%s [bad tag, could not parse it]"),
    + 				    hash);
    + 		}
      	} else if (type == OBJ_TREE) {
     @@ object-name.c: static int show_ambiguous_object(const struct object_id *oid, void *data)
      		 * TRANSLATORS: This is a line of ambiguous <type>
-- 
2.35.0.890.gd7e422415d9


  parent reply	other threads:[~2022-01-27  5:26 UTC|newest]

Thread overview: 90+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-10-04  1:42 [PATCH 0/2] i18n: improve translatability of ambiguous object output Ævar Arnfjörð Bjarmason
2021-10-04  1:42 ` [PATCH 1/2] object-name tests: tighten up advise() output test Ævar Arnfjörð Bjarmason
2021-10-04  2:52   ` Eric Sunshine
2021-10-04  7:05   ` Jeff King
2021-10-04  1:42 ` [PATCH 2/2] object-name: make ambiguous object output translatable Ævar Arnfjörð Bjarmason
2021-10-04  7:35   ` Jeff King
2021-10-04  8:26     ` Ævar Arnfjörð Bjarmason
2021-10-04  9:29       ` Jeff King
2021-10-04 11:16         ` Ævar Arnfjörð Bjarmason
2021-10-04 12:07           ` Jeff King
2021-10-04 14:27 ` [PATCH v2 0/2] i18n: improve translatability of ambiguous object output Ævar Arnfjörð Bjarmason
2021-10-04 14:27   ` [PATCH v2 1/2] object.[ch]: mark object type names for translation Ævar Arnfjörð Bjarmason
2021-10-04 18:54     ` Eric Sunshine
2021-10-05  9:37     ` Bagas Sanjaya
2021-10-05 15:52       ` Ævar Arnfjörð Bjarmason
2021-10-06 19:05     ` Jeff King
2021-10-06 19:46       ` Junio C Hamano
2021-10-06 20:38         ` Jeff King
2021-10-07 18:06           ` Junio C Hamano
2021-10-04 14:27   ` [PATCH v2 2/2] object-name: make ambiguous object output translatable Ævar Arnfjörð Bjarmason
2021-10-06 19:11     ` Jeff King
2021-10-08 19:34   ` [PATCH v3 0/3] i18n: improve translatability of ambiguous object output Ævar Arnfjörð Bjarmason
2021-10-08 19:34     ` [PATCH v3 1/3] object-name: remove unreachable "unknown type" handling Ævar Arnfjörð Bjarmason
2021-10-08 19:34     ` [PATCH v3 2/3] object-name: make ambiguous object output translatable Ævar Arnfjörð Bjarmason
2021-10-08 19:34     ` [PATCH v3 3/3] object-name: show date for ambiguous tag objects Ævar Arnfjörð Bjarmason
2021-11-22 17:53     ` [PATCH v2 0/3] object-name: make ambiguous object output translatable + show tag date Ævar Arnfjörð Bjarmason
2021-11-22 17:53       ` [PATCH v4 1/3] object-name: remove unreachable "unknown type" handling Ævar Arnfjörð Bjarmason
2021-11-22 22:37         ` Jeff King
2021-11-22 17:53       ` [PATCH v4 2/3] object-name: make ambiguous object output translatable Ævar Arnfjörð Bjarmason
2021-11-22 17:53       ` [PATCH v4 3/3] object-name: show date for ambiguous tag objects Ævar Arnfjörð Bjarmason
2021-11-25 22:03       ` [PATCH v5 0/6] object-name: make ambiguous object output translatable + show tag date Ævar Arnfjörð Bjarmason
2021-11-25 22:03         ` [PATCH v5 1/6] object-name tests: add tests for ambiguous object blind spots Ævar Arnfjörð Bjarmason
2021-12-23 21:51           ` Josh Steadmon
2021-11-25 22:03         ` [PATCH v5 2/6] object-name: explicitly handle OBJ_BAD in show_ambiguous_object() Ævar Arnfjörð Bjarmason
2021-12-23 21:51           ` Josh Steadmon
2021-12-23 22:42           ` Junio C Hamano
2021-11-25 22:03         ` [PATCH v5 3/6] object-name: make ambiguous object output translatable Ævar Arnfjörð Bjarmason
2021-12-23 21:54           ` [PATCH] fixup! " Josh Steadmon
2021-12-23 22:48             ` Junio C Hamano
2021-11-25 22:03         ` [PATCH v5 4/6] object-name: show date for ambiguous tag objects Ævar Arnfjörð Bjarmason
2021-11-25 22:03         ` [PATCH v5 5/6] object-name: iterate ambiguous objects before showing header Ævar Arnfjörð Bjarmason
2021-11-25 22:03         ` [PATCH v5 6/6] object-name: re-use "struct strbuf" in show_ambiguous_object() Ævar Arnfjörð Bjarmason
2021-12-28 14:34         ` [PATCH v6 0/6] object-name: make ambiguous object output translatable + show tag date Ævar Arnfjörð Bjarmason
2021-12-28 14:34           ` [PATCH v6 1/6] object-name tests: add tests for ambiguous object blind spots Ævar Arnfjörð Bjarmason
2021-12-30 23:36             ` Junio C Hamano
2021-12-28 14:34           ` [PATCH v6 2/6] object-name: explicitly handle OBJ_BAD in show_ambiguous_object() Ævar Arnfjörð Bjarmason
2021-12-28 14:34           ` [PATCH v6 3/6] object-name: make ambiguous object output translatable Ævar Arnfjörð Bjarmason
2021-12-30 23:46             ` Junio C Hamano
2021-12-28 14:35           ` [PATCH v6 4/6] object-name: show date for ambiguous tag objects Ævar Arnfjörð Bjarmason
2021-12-30 21:43             ` Junio C Hamano
2021-12-28 14:35           ` [PATCH v6 5/6] object-name: iterate ambiguous objects before showing header Ævar Arnfjörð Bjarmason
2021-12-28 14:35           ` [PATCH v6 6/6] object-name: re-use "struct strbuf" in show_ambiguous_object() Ævar Arnfjörð Bjarmason
2021-12-28 15:18           ` [PATCH v8 0/7] progress: test fixes / cleanup Ævar Arnfjörð Bjarmason
2021-12-28 15:18             ` [PATCH v8 1/7] leak tests: fix a memory leak in "test-progress" helper Ævar Arnfjörð Bjarmason
2021-12-28 15:18             ` [PATCH v8 2/7] progress.c test helper: add missing braces Ævar Arnfjörð Bjarmason
2021-12-28 15:18             ` [PATCH v8 3/7] progress.c tests: make start/stop commands on stdin Ævar Arnfjörð Bjarmason
2021-12-28 16:25               ` Johannes Altmanninger
2021-12-28 15:19             ` [PATCH v8 4/7] progress.c tests: test some invalid usage Ævar Arnfjörð Bjarmason
2021-12-28 16:33               ` Johannes Altmanninger
2021-12-28 15:19             ` [PATCH v8 5/7] progress.c: add temporary variable from progress struct Ævar Arnfjörð Bjarmason
2021-12-28 16:05               ` René Scharfe
2021-12-28 16:13               ` Johannes Altmanninger
2021-12-28 15:19             ` [PATCH v8 6/7] pack-bitmap-write.c: don't return without stop_progress() Ævar Arnfjörð Bjarmason
2021-12-28 15:19             ` [PATCH v8 7/7] *.c: use isatty(0|2), not isatty(STDIN_FILENO|STDERR_FILENO) Ævar Arnfjörð Bjarmason
2021-12-28 16:47               ` René Scharfe
2021-12-28 23:56                 ` Ævar Arnfjörð Bjarmason
2022-01-08  0:45             ` [PATCH v8 0/7] progress: test fixes / cleanup Junio C Hamano
2022-01-12 12:39           ` [PATCH v7 0/6] object-name: make ambiguous object output translatable + show tag date Ævar Arnfjörð Bjarmason
2022-01-12 12:39             ` [PATCH v7 1/6] object-name tests: add tests for ambiguous object blind spots Ævar Arnfjörð Bjarmason
2022-01-13 22:39               ` Junio C Hamano
2022-01-14 12:07                 ` Ævar Arnfjörð Bjarmason
2022-01-14 18:45                   ` Junio C Hamano
2022-01-12 12:39             ` [PATCH v7 2/6] object-name: explicitly handle OBJ_BAD in show_ambiguous_object() Ævar Arnfjörð Bjarmason
2022-01-12 12:39             ` [PATCH v7 3/6] object-name: make ambiguous object output translatable Ævar Arnfjörð Bjarmason
2022-01-12 12:39             ` [PATCH v7 4/6] object-name: show date for ambiguous tag objects Ævar Arnfjörð Bjarmason
2022-01-13 22:46               ` Junio C Hamano
2022-01-14 12:05                 ` Ævar Arnfjörð Bjarmason
2022-01-14 19:04                   ` Junio C Hamano
2022-01-14 19:35                     ` Ævar Arnfjörð Bjarmason
2022-01-12 12:39             ` [PATCH v7 5/6] object-name: iterate ambiguous objects before showing header Ævar Arnfjörð Bjarmason
2022-01-12 12:39             ` [PATCH v7 6/6] object-name: re-use "struct strbuf" in show_ambiguous_object() Ævar Arnfjörð Bjarmason
2022-01-27  5:26             ` Ævar Arnfjörð Bjarmason [this message]
2022-01-27  5:26               ` [PATCH v8 1/7] object-name tests: add tests for ambiguous object blind spots Ævar Arnfjörð Bjarmason
2022-01-27  5:26               ` [PATCH v8 2/7] object-name: explicitly handle OBJ_BAD in show_ambiguous_object() Ævar Arnfjörð Bjarmason
2022-01-27  5:26               ` [PATCH v8 3/7] object-name: explicitly handle bad tags " Ævar Arnfjörð Bjarmason
2022-01-27  5:26               ` [PATCH v8 4/7] object-name: make ambiguous object output translatable Ævar Arnfjörð Bjarmason
2022-01-27  5:26               ` [PATCH v8 5/7] object-name: show date for ambiguous tag objects Ævar Arnfjörð Bjarmason
2022-01-27  5:26               ` [PATCH v8 6/7] object-name: iterate ambiguous objects before showing header Ævar Arnfjörð Bjarmason
2022-01-27  5:26               ` [PATCH v8 7/7] object-name: re-use "struct strbuf" in show_ambiguous_object() Ævar Arnfjörð Bjarmason
2022-01-27 20:14               ` [PATCH v8 0/7] object-name: make ambiguous object output translatable + show tag date Junio C Hamano

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=cover-v8-0.7-00000000000-20220127T052116Z-avarab@gmail.com \
    --to=avarab@gmail.com \
    --cc=bagasdotme@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=peff@peff.net \
    --cc=steadmon@google.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.