Git development
 help / color / mirror / Atom feed
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

             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