This started as an optimization to have cat-file use the pack/offset info it gets during --batch-all-objects to avoid extra object lookups. And that does happen in the final patch. But there was an interesting interaction with replace refs there, which led me to patch 3. The other patches are relevant prep/cleanup. [1/5]: t1006: clean up broken objects [2/5]: cat-file: mention --unordered along with --batch-all-objects [3/5]: cat-file: disable refs/replace with --batch-all-objects [4/5]: cat-file: split ordered/unordered batch-all-objects callbacks [5/5]: cat-file: use packed_object_info() for --batch-all-objects Documentation/git-cat-file.txt | 6 ++- builtin/cat-file.c | 49 +++++++++++++++------- t/t1006-cat-file.sh | 75 ++++++++++++++++++++++++++++++++++ 3 files changed, 114 insertions(+), 16 deletions(-) -Peff