Subject: Re: [PATCH 10/10] Enable SHA-256 by default in breaking changes mode

From: Junio C Hamano <[email-masked]>
Date: Fri, 20 Jun 2025 07:58:07 -0700

"brian m. carlson" <[email-masked]> writes:

> Our document on breaking changes indicates that we intend to default to
> SHA-256 in Git 3.0.  Since most people choose the default option, this
> is an important security upgrade to our defaults.
>
> To allow people to test this case, when WITH_BREAKING_CHANGES is set in
> the configuration, build Git with SHA-256 as the default hash.  Update
> the testsuite to reflect this configuration so that the tests pass.

Nice.

> Signed-off-by: brian m. carlson <[email-masked]>
> ---
>  hash.h        | 6 ++++++
>  t/test-lib.sh | 7 ++++++-
>  2 files changed, 12 insertions(+), 1 deletion(-)
>
> diff --git a/hash.h b/hash.h
> index 0e14cade4e..144b53b7d6 100644
> --- a/hash.h
> +++ b/hash.h
> @@ -174,8 +174,14 @@ static inline void git_SHA256_Clone(git_SHA256_CTX *dst, const git_SHA256_CTX *s
>  #define GIT_HASH_SHA256 2
>  /* Number of algorithms supported (including unknown). */
>  #define GIT_HASH_NALGOS (GIT_HASH_SHA256 + 1)
> +
>  /* Default hash algorithm if unspecified. */
> +#ifdef WITH_BREAKING_CHANGES
> +#define GIT_HASH_DEFAULT GIT_HASH_SHA256
> +#else
>  #define GIT_HASH_DEFAULT GIT_HASH_SHA1
> +#endif

I think we decided to format the above this way.

    #ifdef WITH_BREAKING_CHANGES
    # define GIT_HASH_DEFAULT GIT_HASH_SHA256
    #else
    # define GIT_HASH_DEFAULT GIT_HASH_SHA1
    #endif

cf. Documentation/CodingGuidelines

 - Nested C preprocessor directives are indented after the hash by one
   space per nesting level.