diff --git a/object-name.c b/object-name.c
index 990f384129e..743d272800d 100644
--- a/object-name.c
+++ b/object-name.c
@@ -351,9 +351,16 @@ static int init_object_disambiguation(struct repository *r,
return 0;
}
+struct ambiguous_output {
+ const struct disambiguate_state *ds;
+ struct strbuf advice;
+};
+
static int show_ambiguous_object(const struct object_id *oid, void *data)
{
- const struct disambiguate_state *ds = data;
+ struct ambiguous_output *state = data;
+ const struct disambiguate_state *ds = state->ds;
+ struct strbuf *advice = &state->advice;
struct strbuf desc = STRBUF_INIT;
int type;
const char *hash;@@ -443,7 +450,7 @@ static int show_ambiguous_object(const struct object_id *oid, void *data)
* TRANSLATORS: This is line item of ambiguous object output
* from describe_ambiguous_object() above.
*/
- advise(_(" %s"), desc.buf);
+ strbuf_addf(advice, _(" %s\n"), desc.buf);
strbuf_release(&desc);
return 0;@@ -542,6 +549,10 @@ static enum get_oid_result get_short_oid(struct repository *r,
if (!quietly && (status == SHORT_NAME_AMBIGUOUS)) {
struct oid_array collect = OID_ARRAY_INIT;
+ struct ambiguous_output out = {
+ .ds = &ds,
+ .advice = STRBUF_INIT,
+ };
error(_("short object ID %s is ambiguous"), ds.hex_pfx);
@@ -554,13 +565,21 @@ static enum get_oid_result get_short_oid(struct repository *r,
if (!ds.ambiguous)
ds.fn = NULL;
- advise(_("The candidates are:"));
repo_for_each_abbrev(r, ds.hex_pfx, collect_ambiguous, &collect);
sort_ambiguous_oid_array(r, &collect);
- if (oid_array_for_each(&collect, show_ambiguous_object, &ds))
+ if (oid_array_for_each(&collect, show_ambiguous_object, &out))
BUG("show_ambiguous_object shouldn't return non-zero");
+
+ /*
+ * TRANSLATORS: The argument is the list of ambiguous
+ * objects composed in show_ambiguous_object(). See
+ * its "TRANSLATORS" comments for details.
+ */
+ advise(_("The candidates are:\n%s"), out.advice.buf);
+
oid_array_clear(&collect);
+ strbuf_release(&out.advice);
}
return status;diff --git a/t/t1512-rev-parse-disambiguation.sh b/t/t1512-rev-parse-disambiguation.sh
index d68c411bfc7..cb8ee3d65ed 100755
--- a/t/t1512-rev-parse-disambiguation.sh
+++ b/t/t1512-rev-parse-disambiguation.sh
@@ -74,7 +74,6 @@ test_expect_success 'ambiguous loose blob parsed as OBJ_BAD' '
cat >expect <<-\EOF &&
error: short object ID bad0... is ambiguous
- hint: The candidates are:
fatal: invalid object type
EOF
test_cmp_failed_rev_parse blob.bad bad0
@@ -96,11 +95,11 @@ test_expect_success POSIXPERM 'ambigous zlib corrupt loose blob' '
cat >expect <<-\EOF &&
error: short object ID cafe... is ambiguous
- hint: The candidates are:
error: inflate: data stream error (incorrect header check)
error: unable to unpack cafe... header
error: inflate: data stream error (incorrect header check)
error: unable to unpack cafe... header
+ hint: The candidates are:
hint: cafe... [bad object]
hint: cafe... blob
fatal: ambiguous argument '\''cafe...'\'': unknown revision or path not in the working tree.
--
2.34.1.1257.g2af47340c7b