Dear gnulib developers,
GNU Octave uses Mercurial as the VCS of its main repository.
Developers are using the bootstrap script of gnulib to automatically clone its
Git repository in a subdirectory of Octave's source tree. The revision that
we'd like to use is set in the bootstrap.conf script. Currently, that is
: ${GNULIB_REVISION=d4ec02b3cc70cddaaa5183cc5a45814e0afb2292}
This is working perfectly for a fresh clone of Octave's source tree. However,
when we update GNULIB_REVISION to a newer revision and a user/developer ran the
bootstrap script before, running the bootstrap script again fails with an error
like the following:
./bootstrap: Bootstrapping from checked-out octave sources...
fatal: reference is not a tree: d4ec02b3cc70cddaaa5183cc5a45814e0afb2292
program finished with exit code 128
To work around that, a user/developer could manually fetch from the remote
repository. That is a bit more tedious when it comes to CI installations that
usually need no manual interaction.
As a workaround we are applying the attached patch to the bootstrap-funclib.sh
script to automatically fetch from the remote gnulib repository if the
GNULIB_REVISION isn't found in the local gnulib Git repository.
Would it be possible to make a similar change in gnulib so that updating to a
newer gnulib revision becomes a bit easier for that configuration?
Markus
Update bootstrap script from upstream gnulib to automatically fetch from
repository if needed
diff -r c51b07a71421 bootstrap-funclib.sh
--- a/bootstrap-funclib.sh Fri Apr 26 13:33:37 2024 -0400
+++ b/bootstrap-funclib.sh Fri Apr 26 20:00:21 2024 +0200
@@ -532,6 +532,10 @@
# The subdirectory 'gnulib' already exists.
if test -n "$GNULIB_REVISION"; then
if test -d "$gnulib_path/.git"; then
+ if ! git --git-dir="$gnulib_path"/.git cat-file \
+ commit "$GNULIB_REVISION"; then
+ git --git-dir="$gnulib_path"/.git fetch
+ fi
(cd "$gnulib_path" && git checkout "$GNULIB_REVISION") || exit 1
else
die "Error: GNULIB_REVISION is specified in bootstrap.conf," \