Bruno Haible via Gnulib discussion list <bug-gnulib@gnu.org> writes:

>> 1) Add a section to the gnulib manual describing what gnulib publish at
>> ftp.gnu.org and that it is a Git bundle for archival purposes.

I've pushed the patch below to start this, what do you all think?

>> 2) Upload a README to ftp.gnu.org/gnu/gnulib/ with a URL to that gnulib
>> manual section.

I suppose that to get a working URL, the gnulib manual on www.gnu.org
needs to be refreshed -- is doc/README accurate?  I can try those steps
to see if they work for me.

>> 3) Prepare and upload the PGP-signed Git bundle.  There probably need to
>> be a small shell script to do this.  You wouldn't want to run this in
>> your development gnulib git repository; I think git bundle may contain
>> old forgotten 'git commit -a --amend' objects.  I suggest something like
>> this:
>
> Sure. Go ahead.

If someone add me as administrator of the 'gnulib' project on Savannah,
I can make the upload.

/Simon
From 621614010a298724d561157feaff482726c31c22 Mon Sep 17 00:00:00 2001
From: Simon Josefsson <si...@josefsson.org>
Date: Mon, 3 Mar 2025 21:08:01 +0100
Subject: [PATCH] doc: Document upcoming Gnulib Git Bundle.

* doc/gnulib.texi (Miscellaneous Notes): Add sub-section "Gnulib Git Bundle".
* doc/gnulib-git-bundle.texi: New file.
---
 ChangeLog                  |  6 ++++
 doc/gnulib-git-bundle.texi | 61 ++++++++++++++++++++++++++++++++++++++
 doc/gnulib.texi            |  3 ++
 3 files changed, 70 insertions(+)
 create mode 100644 doc/gnulib-git-bundle.texi

diff --git a/ChangeLog b/ChangeLog
index d8730f5028..9b19d95cf7 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2025-03-03  Simon Josefsson  <si...@josefsson.org>
+
+	doc: Document upcoming Gnulib Git Bundle.
+	* doc/gnulib.texi (Miscellaneous Notes): Add sub-section "Gnulib Git Bundle".
+	* doc/gnulib-git-bundle.texi: New file.
+
 2025-03-03  Bruno Haible  <br...@clisp.org>
 
 	vasprintf-posix, vasprintf-gnu: Fix module description.
diff --git a/doc/gnulib-git-bundle.texi b/doc/gnulib-git-bundle.texi
new file mode 100644
index 0000000000..70519deb42
--- /dev/null
+++ b/doc/gnulib-git-bundle.texi
@@ -0,0 +1,61 @@
+@node Gnulib Git Bundle
+@section Gnulib Git Bundle
+
+To provide a serialized archival copy of the Gnulib Git repository we
+publish Git Bundles (@url{https://git-scm.com/docs/git-bundle}) of
+Gnulib at @url{ftp://ftp.gnu.org/gnu/gnulib/}.  These may be useful if
+Savannah happens to be offline or if you want to have a GnuPG signed
+confirmation of the Gnulib content.
+
+The files are named like @code{gnulib-YYYYMMDD.bundle}, for example
+@code{gnulib-20250303.bundle}, where @code{YYYYMMDD} corresponds to
+the Git commit date (in UTC0) of the last commit on the @code{master}
+branch in the bundle.
+
+Next to the Git Bundle is a PGP signature on the file, named
+@code{gnulib-YYYYMMDD.bundle.sig}, which can be verified using GnuPG
+as usual:
+
+@example
+gpg --verify gnulib-20250303.bundle.sig
+@end example
+
+Or using the simpler @code{gpgv} tool like this:
+
+@example
+gpgv gnulib-20250303.bundle.sig gnulib-20250303.bundle
+@end example
+
+After downloading the Git bundle you may use it to create a local
+gnulib clone using normal Git commands:
+
+@example
+git clone /path/to/your/gnulib-20250303.bundle gnulib
+cd gnulib
+@end example
+
+We desire that the Gnulib Git bundle is bit-by-bit reproducible,
+however we do not know how to achieve this.  Currently gnulib
+maintainers may invoke the following commands to prepare and upload a
+Gnulib git bundle.  We appreciate ideas on how to improve these set of
+commands (or the upstream Git tool) so that the bundle may be
+bit-by-bit reproducible by anyone.
+
+@example
+cd $(mktemp -d)
+REV=2520437549b14f3785b4b3c32a0a3fc792d4a9c0 # master branch commit to package
+git clone https://git.savannah.gnu.org/git/gnulib.git
+cd gnulib
+git fsck # attempt to validate input
+# inspect that the new tree matches a trusted copy
+git checkout -B master $REV # put $REV at master
+for b in $(git branch -r | grep origin/stable- | sort --version-sort); do git checkout $@{b#origin/@}; done
+git remote remove origin # drop some unrelated branches
+git gc --prune=now # drop any commits after $REV
+git -c 'pack.threads=1' bundle create gnulib.bundle --all
+V=$(env TZ=UTC0 git show -s --date=format:%Y%m%d --pretty=%cd master)
+mv gnulib.bundle gnulib-$V.bundle
+gpg --detach-sign --armor gnulib-$V.bundle
+gpg --verify gnulib-$V.bundle
+build-aux/gnupload --to ftp.gnu.org:gnulib gnulib-$V.bundle
+@end example
diff --git a/doc/gnulib.texi b/doc/gnulib.texi
index 31a206f8fb..3ffd5b88c2 100644
--- a/doc/gnulib.texi
+++ b/doc/gnulib.texi
@@ -900,6 +900,7 @@ better to share them.
 * A C++ namespace for gnulib::      A different way of using Gnulib in C++
 * License Texinfo sources::
 * Building gnulib::
+* Gnulib Git Bundle::
 @end menu
 
 @include out-of-memory.texi
@@ -916,6 +917,8 @@ better to share them.
 
 @include build-automation.texi
 
+@include gnulib-git-bundle.texi
+
 
 @node POSIX Substitutes Library
 @chapter Building the ISO C and POSIX Substitutes
-- 
2.48.1

Attachment: signature.asc
Description: PGP signature

Reply via email to