When we originally added --batch-all-objects, it stuffed everything into an oid_array(), and then iterated over that array with a callback to write the actual output. When we later added --unordered, that code path writes immediately as we discover each object, but just calls the same batch_object_cb() as our entry point to the writing code. That callback has a narrow interface; it only receives the oid, but we know much more about each object in the unordered write (which we'll make use of in the next patch). So let's just call batch_object_write() directly. The callback wasn't saving us much effort. Signed-off-by: Jeff King <peff@xxxxxxxx> --- builtin/cat-file.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/builtin/cat-file.c b/builtin/cat-file.c index b713be545e..b533935d5c 100644 --- a/builtin/cat-file.c +++ b/builtin/cat-file.c @@ -470,7 +470,9 @@ static int batch_unordered_object(const struct object_id *oid, void *vdata) if (oidset_insert(data->seen, oid)) return 0; - return batch_object_cb(oid, data); + oidcpy(&data->expand->oid, oid); + batch_object_write(NULL, data->scratch, data->opt, data->expand); + return 0; } static int batch_unordered_loose(const struct object_id *oid, -- 2.33.0.1231.g45ae28b974