Re: RFC: Sort tarballs created by the src-release.sh script

Nick Clifton via Gdb-patches
2022-10-05T12:25:17Z

[-- Attachment #1: Type: text/plain, Size: 907 bytes --]

Hi Guys,

On 10/4/22 08:10, Jan Beulich wrote:
> Every commit should be considered to affect the tarball, imo, as such
> effects could also be indirect. If you really wanted to go that route,
> then perhaps an alternative would be to use the commit date of the
> most recent commit touching bfd/version.m4.

Hmm, except that would probably only be appropriate for binutils tarballs,
not others.

So how about the attached patch ? This one adds a new command line option to
src-release.sh. If it is not used then the behaviour is not changed in any
way. If the new option is used, it provides a date that is passed to tar's
--mtime option, along with triggering the use of sort and the other tar
options necessary to make a reproducible tarball. So:

src-release.sh -x -r `git log -1 --format=%cd --date=format:%F bfd/version.m4` binutils

should create a pretty consistent tarball.

Cheers
Nick

[-- Attachment #2: src-release.sh.patch --]
[-- Type: text/x-patch, Size: 1656 bytes --]

diff --git a/src-release.sh b/src-release.sh
index 079b545ae7c..6e16cb00992 100755
--- a/src-release.sh
+++ b/src-release.sh
@@ -30,6 +30,7 @@ SHA256PROG=sha256sum
MAKE=make
CC=gcc
CXX=g++
+release_date=

# Default to avoid splitting info files by setting the threshold high.
MAKEINFOFLAGS=--split-size=5000000
@@ -184,9 +185,17 @@ do_tar()
ver=$2
echo "==> Making $package-$ver.tar"
rm -f $package-$ver.tar
- find $package-$ver -follow \( $CVS_NAMES \) -prune \
- -o -type f -print \
- | tar cTfh - $package-$ver.tar
+ if test x$release_date == "x" ; then
+ find $package-$ver -follow \( $CVS_NAMES \) -prune -o -type f -print \
+ | tar cTfh - $package-$ver.tar
+ else
+ # Attempt to create a consistent, reproducible tarball using the
+ # specified date.
+ find $package-$ver -follow \( $CVS_NAMES \) -prune -o -type f -print \
+ | LC_ALL=C sort \
+ | tar cTfh - $package-$ver.tar \
+ --mtime=$release_date --group=0 --owner=0
+ fi
}

# Compress the output with bzip2
@@ -340,6 +349,7 @@ usage()
echo " -g: Compress with gzip"
echo " -l: Compress with lzip"
echo " -x: Compress with xz"
+ echo " -r <date>: Create a reproducible tarall using <date> as the mtime"
exit 1
}

@@ -363,7 +373,7 @@ build_release()

compressors=""

-while getopts ":bglx" opt; do
+while getopts ":bglr:x" opt; do
case $opt in
b)
compressors="$compressors bz2";;
@@ -371,6 +381,8 @@ while getopts ":bglx" opt; do
compressors="$compressors gz";;
l)
compressors="$compressors lz";;
+ r)
+ release_date=$OPTARG;;
x)
compressors="$compressors xz";;
\?)