While fixing some bugs last month in c39e5cbaa5 (Merge branch 'jk/zlib-inflate-fixes', 2025-04-15), I noted that objects with non-standard types are not really usable. You can get their size and type, but nothing else, not even their contents. And you can't transfer them to other repositories, as packfiles have no way to represent them. We've had that code since 2015, but beyond using it in a few tests, it's never gone anywhere. So I'd like to consider the whole direction a failed experiment and rip it out, which simplifies some of the core object code. IMHO this doesn't need to follow the breaking-change flow and wait until Git 3.0, because what's there is not really usable in any useful way. But others may disagree. I've tried to group the patches logically: [01/13]: object-file.h: fix typo in variable declaration Nearby cleanup that can be taken independently. [02/13]: cat-file: make --allow-unknown-type a noop [03/13]: object-file: drop OBJECT_INFO_ALLOW_UNKNOWN_TYPE flag This drops the user-facing reading feature, and the hairiest bits of the reading code. [04/13]: cat-file: use type enum instead of buffer for -t option [05/13]: oid_object_info_convert(): stop using string for object type [06/13]: fsck: stop using object_info->type_name strbuf [07/13]: oid_object_info(): drop type_name strbuf This drops the rest of the unknown-type code. The first three are refactors to prepare for it, then the final one drops the code. These are mostly not user-facing, though patch 6 does change some fsck stderr output. This is not strictly necessary to happen along with patches 2+3, but I think the resulting code is an improvement. All the patches after this deal with the writing side (the two are conceptually independent, but of course many of the reading-side tests removed by earlier commits did depend on the writing side for setup). [08/13]: t/helper: add zlib test-tool [09/13]: t: add lib-loose.sh [10/13]: hash-object: stop allowing unknown types This drops the user-facing support for writing objects with non-standard types. We do use that feature in the test suite (e.g., to see how fsck reacts), so there's a new helper to enable that. So in a sense we are trading code removed from the object-writing system and putting it in the test suite. But IMHO that is still a win, because we care more about the "production" code in git itself. [11/13]: hash-object: merge HASH_* and INDEX_* flags [12/13]: hash-object: handle --literally with OPT_NEGBIT [13/13]: object-file: drop support for writing objects with unknown types These are some cleanups enabled by patch 10, culminating in dropping write_object_file_literally(). Documentation/git-cat-file.adoc | 6 +- Makefile | 1 + builtin/cat-file.c | 31 ++-- builtin/fsck.c | 13 +- builtin/hash-object.c | 69 +++------ object-file.c | 142 +++--------------- object-file.h | 17 +-- object-store.c | 17 +-- object-store.h | 3 - packfile.c | 7 +- streaming.c | 2 +- t/helper/meson.build | 1 + t/helper/test-tool.c | 1 + t/helper/test-tool.h | 1 + t/helper/test-zlib.c | 62 ++++++++ t/lib-loose.sh | 30 ++++ t/t1006-cat-file.sh | 216 +++++++--------------------- t/t1007-hash-object.sh | 11 +- t/t1450-fsck.sh | 32 +---- t/t1512-rev-parse-disambiguation.sh | 5 +- 20 files changed, 220 insertions(+), 447 deletions(-) create mode 100644 t/helper/test-zlib.c create mode 100644 t/lib-loose.sh -Peff