From: brian m. carlson Date: Thu, 02 Oct 2025 22:38:46 GMT Subject: [PATCH v2 0/9] SHA-1/SHA-256 interoperability, part 1 Message-ID: <20251002223855.1022847-1-sandals@crustytoothpaste.net> In-Reply-To: <20250919010911.649831-1-sandals@crustytoothpaste.net> This is the first of several series for SHA-1 and SHA-256 interoperability, all of which will hopefully land in Git 3.0. The first set of commits here is documentation updates for documentation which was incorrect, missing, or simply wrong. I have spent more time than I'd like in the pack code and felt our documentation there could be more helpful. I also am correcting some things about the interoperability formats that I've found are not correct or efficient in terms of implementation and thus I will be implementing differently. The loose object documentation will be updated with the loose object mapping in a future commit, but I felt I should send a basic loose object document first, so here it is. The remaining commits are for expected gpgsig headers in tags, which causes some tests which use strict fsck to fail, as well as for prerequisites for compatibility hashes in the testsuite. Actually using this configuration is not possible since the tests are still very broken using it, but declaring these prerequisites allows me and others to send in patches that use them and thus make our testsuite more resilient. For example, in interoperability mode we cannot write objects that are not valid since we cannot convert them into the other hash algorithm. Thus, when we're testing in a mode that has a compatibility algorithm, we skip these tests. The goal is to run the tests in a full compatibility mode where everything is dual-hash as well as introduce some specific tests for interoperability that run in all configurations of the tests. Changes from v1: * Squash the two test changes into one commit. * Include a new commit showing the use of the BROKEN_OBJECTS prereq. * Mention using main algorithm hash in pack index v3. * Hopefully clarify signed tags. * Improve text for pack format documentation. * Wire up build of loose object documentation. * Remove loose object map documentation. * Rephrase text about loose objects. * Remove needless RUST prerequisite. * Wrap overly long line. * Reject invalid signature algorithms in tag headers. * Fix if/whether problem in test comment. brian m. carlson (9): docs: update pack index v3 format docs: update offset order for pack index v3 docs: reflect actual double signature for tags docs: improve ambiguous areas of pack format documentation docs: add documentation for loose objects rev-parse: allow printing compatibility hash fsck: consider gpgsig headers expected in tags t: allow specifying compatibility hash t1010: use BROKEN_OBJECTS prerequisite Documentation/Makefile | 1 + Documentation/fsck-msgids.adoc | 6 +++ Documentation/git-rev-parse.adoc | 11 ++-- Documentation/gitformat-loose.adoc | 53 ++++++++++++++++++ Documentation/gitformat-pack.adoc | 18 +++++++ Documentation/meson.build | 1 + .../technical/hash-function-transition.adoc | 42 ++++++++------- builtin/rev-parse.c | 11 +++- fsck.c | 18 +++++++ fsck.h | 2 + t/t1010-mktree.sh | 13 +++-- t/t1450-fsck.sh | 54 +++++++++++++++++++ t/t1500-rev-parse.sh | 34 ++++++++++++ t/test-lib-functions.sh | 9 +++- t/test-lib.sh | 13 +++++ 15 files changed, 254 insertions(+), 32 deletions(-) create mode 100644 Documentation/gitformat-loose.adoc