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 <[email protected]>
@@ -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