From: "brian m. carlson" <sandals@crustytoothpaste.net>
To: git@vger.kernel.org
Cc: Junio C Hamano <gitster@pobox.com>,
Eric Sunshine <sunshine@sunshineco.com>,
Derrick Stolee <stolee@gmail.com>,
Stefan Beller <sbeller@google.com>,
Brandon Williams <bmwill@google.com>,
Jacob Keller <jacob.keller@gmail.com>
Subject: [PATCH v2 00/16] object_id part 14
Date: Mon, 16 Jul 2018 01:27:52 +0000 [thread overview]
Message-ID: <20180716012808.961328-1-sandals@crustytoothpaste.net> (raw)
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@crustytoothpaste.net>
@@ -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
next reply other threads:[~2018-07-16 1:28 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-07-16 1:27 brian m. carlson [this message]
2018-07-16 1:27 ` [PATCH v2 01/16] cache: update object ID functions for the_hash_algo brian m. carlson
2018-07-16 1:27 ` [PATCH v2 02/16] tree-walk: replace hard-coded constants with the_hash_algo brian m. carlson
2018-07-16 1:27 ` [PATCH v2 03/16] hex: switch to using the_hash_algo brian m. carlson
2018-07-16 1:27 ` [PATCH v2 04/16] commit: express tree entry constants in terms of the_hash_algo brian m. carlson
2018-07-16 1:27 ` [PATCH v2 05/16] strbuf: allocate space with GIT_MAX_HEXSZ brian m. carlson
2018-07-16 1:27 ` [PATCH v2 06/16] sha1-name: use the_hash_algo when parsing object names brian m. carlson
2018-07-16 1:27 ` [PATCH v2 07/16] refs/files-backend: use the_hash_algo for writing refs brian m. carlson
2018-07-16 1:28 ` [PATCH v2 08/16] builtin/update-index: convert to using the_hash_algo brian m. carlson
2018-07-16 1:28 ` [PATCH v2 09/16] builtin/update-index: simplify parsing of cacheinfo brian m. carlson
2018-07-16 1:28 ` [PATCH v2 10/16] builtin/fmt-merge-msg: make hash independent brian m. carlson
2018-07-16 1:28 ` [PATCH v2 11/16] builtin/merge: switch to use the_hash_algo brian m. carlson
2018-07-16 1:28 ` [PATCH v2 12/16] builtin/merge-recursive: make hash independent brian m. carlson
2018-07-16 1:28 ` [PATCH v2 13/16] diff: switch GIT_SHA1_HEXSZ to use the_hash_algo brian m. carlson
2018-07-16 1:28 ` [PATCH v2 14/16] log-tree: switch GIT_SHA1_HEXSZ to the_hash_algo->hexsz brian m. carlson
2018-07-16 1:28 ` [PATCH v2 15/16] sha1-file: convert constants to uses of the_hash_algo brian m. carlson
2018-07-16 1:28 ` [PATCH v2 16/16] pretty: switch hard-coded constants to the_hash_algo brian m. carlson
2018-07-16 14:49 ` [PATCH v2 00/16] object_id part 14 Derrick Stolee
2018-07-16 15:21 ` Taylor Blau
2018-07-16 18:04 ` Stefan Beller
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180716012808.961328-1-sandals@crustytoothpaste.net \
--to=sandals@crustytoothpaste.net \
--cc=bmwill@google.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=jacob.keller@gmail.com \
--cc=sbeller@google.com \
--cc=stolee@gmail.com \
--cc=sunshine@sunshineco.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox