Hi, This is the fourth revision of my patch to fix the error message for git-cat-file(1) when using --batch and -z. I was asked to provide test coverage for both code paths that produce this kind of error message. Instead I've decided to extract the error formatting into a separate function. For two reasons: * It deduplicates code. * The code path that was not tested is hit by --batch-all-objects. I was not able to set up a test that hits that code. I'm happy to write that test, if anyone can give me a pointer how to produce a "missing" error with that option. Toon Toon Claes (2): cat-file: extract printing batch error message into function cat-file: quote-format name in error when using -z builtin/cat-file.c | 71 +++++++++++++++++++++++++++------------------ t/t1006-cat-file.sh | 8 +++++ 2 files changed, 51 insertions(+), 28 deletions(-) Range-diff against v3: -: ---------- > 1: b2f4ce88f2 cat-file: extract printing batch error message into function 1: a56932572c ! 2: 9e31796dc1 cat-file: quote-format name in error when using -z @@ builtin/cat-file.c #include "object-store.h" #include "promisor-remote.h" #include "mailmap.h" -@@ builtin/cat-file.c: static void batch_object_write(const char *obj_name, - &data->oid, &data->info, - OBJECT_INFO_LOOKUP_REPLACE); - if (ret < 0) { -+ struct strbuf quoted = STRBUF_INIT; -+ -+ if (opt->nul_terminated && -+ obj_name) { -+ quote_c_style(obj_name, "ed, NULL, 0); -+ obj_name = quoted.buf; -+ } -+ - printf("%s missing\n", - obj_name ? obj_name : oid_to_hex(&data->oid)); -+ strbuf_release("ed); - fflush(stdout); - return; - } -@@ builtin/cat-file.c: static void batch_one_object(const char *obj_name, - result = get_oid_with_context(the_repository, obj_name, - flags, &data->oid, &ctx); - if (result != FOUND) { +@@ builtin/cat-file.c: static void batch_print_error(const char *obj_name, + enum get_oid_result result, + struct batch_options* opt) + { + struct strbuf quoted = STRBUF_INIT; + -+ if (opt->nul_terminated) { ++ if (opt->nul_terminated && ++ obj_name) { + quote_c_style(obj_name, "ed, NULL, 0); + obj_name = quoted.buf; + } @@ builtin/cat-file.c: static void batch_one_object(const char *obj_name, switch (result) { case MISSING_OBJECT: printf("%s missing\n", obj_name); -@@ builtin/cat-file.c: static void batch_one_object(const char *obj_name, - result); +@@ builtin/cat-file.c: static void batch_print_error(const char *obj_name, break; } -+ -+ strbuf_release("ed); fflush(stdout); - return; - } ++ strbuf_release("ed); + } + + /* ## t/t1006-cat-file.sh ## @@ t/t1006-cat-file.sh: test_expect_success FUNNYNAMES '--batch-check, -z with newline in input' ' -- 2.39.2