I was investigating how to adapt my existing patch for missing blob support [1] to consult a manifest of missing blobs, and found it difficult to further modify sha1_file.c without doing some further refactoring. So here are some patches to do that. I think patch 1 is an independently good change - it makes the code clearer and is also a net reduction in lines. If none of the other patches here make it, maybe patch 1 should go in independently. Patches 2-3 are also collectively independent, but more invasive. The commit messages explain what's going on in more detail, but basically there are 3 functions doing similar things (getting information for an object regardless of where it's stored) with duplicated mechanisms, and for maintainability, it is better to combine them into one function. Patch 4 is my adaptation of [1] after all the refactoring - notice that I just needed to edit 1 storage-agnostic object info function instead of previously needing to edit 3. It is still a work in progress - the code looks complete, but I would probably need to at least document the missing blob manifest format. I am providing it here just to show the effectiveness of the refactoring in patches 2-3. I am hoping for reviews on patches 1-3 to be included into the tree. [1] https://public-inbox.org/git/20170426221346.25337-1-jonathantanmy@xxxxxxxxxx/ Jonathan Tan (4): sha1_file: teach packed_object_info about typename sha1_file: extract type and size from object_info sha1_file: consolidate storage-agnostic object fns sha1_file, fsck: add missing blob support Documentation/config.txt | 10 + builtin/cat-file.c | 29 +-- builtin/fsck.c | 7 + builtin/pack-objects.c | 5 +- cache.h | 12 +- sha1_file.c | 484 +++++++++++++++++++++++++++++++---------------- streaming.c | 4 +- t/t3907-missing-blob.sh | 69 +++++++ 8 files changed, 439 insertions(+), 181 deletions(-) create mode 100755 t/t3907-missing-blob.sh -- 2.13.1.508.gb3defc5cc-goog