This is the fourteenth series of patches to switch to using struct object_id and the_hash_algo. This series converts several core pieces to use struct object_id, including the oid* and hex functions. All of these patches have been tested with both SHA-1 and a 256-bit hash. Most of these patches are fixes for things that will clearly cause segfaults or other very obvious breakage on a Git with a 256-bit hash. Changes from v1: * Drop patch that's been replaced by one from Ben Peart. * Update patch handling hash* and oid* functions. tbdiff output below. brian m. carlson (16): cache: update object ID functions for the_hash_algo tree-walk: replace hard-coded constants with the_hash_algo hex: switch to using the_hash_algo commit: express tree entry constants in terms of the_hash_algo strbuf: allocate space with GIT_MAX_HEXSZ sha1-name: use the_hash_algo when parsing object names refs/files-backend: use the_hash_algo for writing refs builtin/update-index: convert to using the_hash_algo builtin/update-index: simplify parsing of cacheinfo builtin/fmt-merge-msg: make hash independent builtin/merge: switch to use the_hash_algo builtin/merge-recursive: make hash independent diff: switch GIT_SHA1_HEXSZ to use the_hash_algo log-tree: switch GIT_SHA1_HEXSZ to the_hash_algo->hexsz sha1-file: convert constants to uses of the_hash_algo pretty: switch hard-coded constants to the_hash_algo builtin/fmt-merge-msg.c | 19 ++++++++++--------- builtin/merge-recursive.c | 4 ++-- builtin/merge.c | 11 ++++++----- builtin/update-index.c | 14 ++++++++------ cache.h | 6 +++--- commit.c | 4 ++-- diff.c | 6 +++--- hex.c | 6 +++--- log-tree.c | 2 +- pretty.c | 4 ++-- refs/files-backend.c | 4 ++-- sha1-file.c | 8 ++++---- sha1-name.c | 12 +++++++----- strbuf.c | 2 +- tree-walk.c | 3 ++- 15 files changed, 56 insertions(+), 49 deletions(-) tbdiff output: 1: e8209cc180 ! 1: cad74b3d9b cache: update object ID functions for the_hash_algo @@ -2,10 +2,18 @@ cache: update object ID functions for the_hash_algo - Update the hashcpy and hashclr functions to use the_hash_algo, since - they are used in a variety of places to copy and manipulate buffers that - need to move data into or out of struct object_id. Update oidcmp so - that it is implemented on its own and similarly uses the_hash_algo. + Most of our code has been converted to use struct object_id for object + IDs. However, there are some places that still have not, and there are + a variety of places that compare equivalently sized hashes that are not + object IDs. All of these hashes are artifacts of the internal hash + algorithm in use, and when we switch to NewHash for object storage, all + of these uses will also switch. + + Update the hashcpy, hashclr, and hashcmp functions to use the_hash_algo, + since they are used in a variety of places to copy and manipulate + buffers that need to move data into or out of struct object_id. This + has the effect of making the corresponding oid* functions use + the_hash_algo as well. Signed-off-by: brian m. carlson <sandals@xxxxxxxxxxxxxxxxxxxx> @@ -14,13 +22,13 @@ +++ b/cache.h @@ - static inline int oidcmp(const struct object_id *oid1, const struct object_id *oid2) + static inline int hashcmp(const unsigned char *sha1, const unsigned char *sha2) { -- return hashcmp(oid1->hash, oid2->hash); -+ return memcmp(oid1->hash, oid2->hash, the_hash_algo->rawsz); +- return memcmp(sha1, sha2, GIT_SHA1_RAWSZ); ++ return memcmp(sha1, sha2, the_hash_algo->rawsz); } - static inline int is_null_sha1(const unsigned char *sha1) + static inline int oidcmp(const struct object_id *oid1, const struct object_id *oid2) @@ static inline void hashcpy(unsigned char *sha_dst, const unsigned char *sha_src) 2: d0bf993bc5 = 2: 2d2229b112 tree-walk: replace hard-coded constants with the_hash_algo 3: 718ff26cb3 = 3: e2ea848e69 hex: switch to using the_hash_algo 4: 9c387dc7b4 = 4: a2ba0e70ac commit: express tree entry constants in terms of the_hash_algo 5: efbae0c278 = 5: 7cd0a1600e strbuf: allocate space with GIT_MAX_HEXSZ 6: e37fa26cf7 = 6: b89147f48b sha1-name: use the_hash_algo when parsing object names 7: b7ef5b65fc < --: ------- commit: increase commit message buffer size 8: 309c452bd7 = 7: 6d2efbfdb0 refs/files-backend: use the_hash_algo for writing refs 9: 08684a629e = 8: 745d8c1e5f builtin/update-index: convert to using the_hash_algo 10: 36c7de8d9a = 9: a9e4fe9a49 builtin/update-index: simplify parsing of cacheinfo 11: cfa93658a1 = 10: 3618c468cb builtin/fmt-merge-msg: make hash independent 12: cdc2507c68 = 11: 83c8c1881a builtin/merge: switch to use the_hash_algo 13: b728ff86d4 = 12: eac8c307e1 builtin/merge-recursive: make hash independent 14: 04e69f589b = 13: 5da6c63e78 diff: switch GIT_SHA1_HEXSZ to use the_hash_algo 15: a75208a598 = 14: c179e8c3db log-tree: switch GIT_SHA1_HEXSZ to the_hash_algo->hexsz 16: d4ebee341a = 15: d6437a47d6 sha1-file: convert constants to uses of the_hash_algo 17: 68b95089d7 = 16: 6313f07df0 pretty: switch hard-coded constants to the_hash_algo