Him

Seth McDonald wrote:
> I believe I've found a bug in Gnulib's bootstrap functionality.  When
> attempting to ./bootstrap Libntlm 1.8 (from [0]), I ran into this error:
> 
>       $ ./bootstrap
>       ./bootstrap: Bootstrapping from checked-out libntlm sources...
>       ./bootstrap: getting gnulib files...
>       Initialized empty Git repository in /[...]/gnulib/.git/
>       warning: redirecting to 
> https://https.git.savannah.gnu.org/git/gnulib.git/
>       fatal: couldn't find remote ref dfb71172a46ef41f8cf8ab7ca529c1dd3097a41d
>       warning: redirecting to 
> https://https.git.savannah.gnu.org/git/gnulib.git/
>       fatal: mismatched algorithms: client sha256; server sha1
> 
> I eventually remembered I have init.defaultObjectFormat set to sha256 in
> my global git config.  And after temporarily changing it to sha1,
> ./bootstrap appeared to work.
> 
> Usually this shouldn't occur, since I believe git-clone sets the object
> format automatically to the same as upstream.  But after grepping
> Libntlm's bootstrap scripts, I found that it instead invokes git-init
> and manually adds the upstream with git-remote.  From
> bootstrap-funclib.sh, lines 527-529 (see [1]):
> 
>       git -C "$gnulib_path" init
>       git -C "$gnulib_path" remote add origin \
>           ${GNULIB_URL:-$default_gnulib_url}

Yes. We do this in order to save network bandwidth.

> And briefly searching the current Gnulib repo, it appears this is still
> the case.  From top/bootstrap.sh, lines 564-565 (see [2]):
> 
>       git -C "$gnulib_path" -c init.defaultBranch=master init
>       git -C "$gnulib_path" remote add origin "$gnulib_url"
> 
> This explains the bug.  git-init initialises the repo with a SHA256
> object format, then git-remote adds an upstream with a SHA1 object
> format.

Thanks for the report.

> As such, the bug can be fixed by appending --object-format=sha1 to the
> git-init command, which forces git to initialise the repo with a SHA1
> object format regardless of the global default.

We can't do this, because the option --object-format=sha1 was only introduced
in git version 2.27 (2020), which is too new. We can't assume all users of
Gnulib have a git version that is this new.

> I've tested this with
> the same Libntlm repository and it appears to work.

Instead I'm applying the patch below. Can you please test whether it works
for you?

Bruno


2026-08-09  Bruno Haible  <[email protected]>

        bootstrap: Fix error "client sha256; server sha1" seen by some users.
        Reported by Seth McDonald <[email protected]> in
        <https://lists.gnu.org/archive/html/bug-gnulib/2026-08/msg00149.html>.
        * top/bootstrap-funclib.sh (prepare_GNULIB_SRCDIR): Force sha1 object
        format in "git init" command.
        * build-aux/bootstrap: Regenerated.

diff --git a/build-aux/bootstrap b/build-aux/bootstrap
index 19f9424bb6..da6337aa9d 100755
--- a/build-aux/bootstrap
+++ b/build-aux/bootstrap
@@ -37,7 +37,7 @@ medir=`dirname "$me"`
 
 # A library of shell functions for autopull.sh, autogen.sh, and bootstrap.
 
-scriptlibversion=2025-12-04.19; # UTC
+scriptlibversion=2026-08-09.13; # UTC
 
 # Copyright (C) 2003-2026 Free Software Foundation, Inc.
 #
@@ -597,8 +597,12 @@ prepare_GNULIB_SRCDIR ()
             mkdir -p "$gnulib_path"
             # Use a -c option to silence an annoying message
             # "hint: Using 'master' as the name for the initial branch."
-            # (cf. <https://stackoverflow.com/questions/65524512/>).
-            git -C "$gnulib_path" -c init.defaultBranch=master init
+            # (cf. <https://stackoverflow.com/questions/65524512/>)
+            # and another -c option to override a configuration
+            # init.defaultObjectFormat=sha256 that some users have installed.
+            git -C "$gnulib_path" -c init.defaultBranch=master \
+                                  -c init.defaultObjectFormat=sha1 \
+                                  init
             git -C "$gnulib_path" remote add origin "$gnulib_url"
             if git -C "$gnulib_path" fetch $shallow origin "$GNULIB_REVISION"
             then
diff --git a/top/bootstrap-funclib.sh b/top/bootstrap-funclib.sh
index 8a0116a76f..679c4916ab 100644
--- a/top/bootstrap-funclib.sh
+++ b/top/bootstrap-funclib.sh
@@ -1,6 +1,6 @@
 # A library of shell functions for autopull.sh, autogen.sh, and bootstrap.
 
-scriptlibversion=2025-12-04.19; # UTC
+scriptlibversion=2026-08-09.13; # UTC
 
 # Copyright (C) 2003-2026 Free Software Foundation, Inc.
 #
@@ -560,8 +560,12 @@ prepare_GNULIB_SRCDIR ()
             mkdir -p "$gnulib_path"
             # Use a -c option to silence an annoying message
             # "hint: Using 'master' as the name for the initial branch."
-            # (cf. <https://stackoverflow.com/questions/65524512/>).
-            git -C "$gnulib_path" -c init.defaultBranch=master init
+            # (cf. <https://stackoverflow.com/questions/65524512/>)
+            # and another -c option to override a configuration
+            # init.defaultObjectFormat=sha256 that some users have installed.
+            git -C "$gnulib_path" -c init.defaultBranch=master \
+                                  -c init.defaultObjectFormat=sha1 \
+                                  init
             git -C "$gnulib_path" remote add origin "$gnulib_url"
             if git -C "$gnulib_path" fetch $shallow origin "$GNULIB_REVISION"
             then




Reply via email to