From b6a4f9aa1e4d5e6246e02c60d0a5ebc5daecbff6 Mon Sep 17 00:00:00 2001 From: Viktor Szakats Date: Tue, 9 Apr 2024 06:46:35 +0000 Subject: [PATCH] dist: add reproducible dir entries to tarballs In the initial implementation of reproducible tarballs, they were missing directory entries, while .zip archives had them. It meant that on extracting the tarball, on-disk directory entries got the current timestamp. This patch fixes this by including directory entries in the tarball, with reproducible timestamps. It also moves sorting inside tar, to ensure reproducible directory entry timestamps on extract (without the need of `--delay-directory-restore` option, when extracting with GNU tar. BSD tar got that right by default.) GNU tar 1.28 (2014-07-28) introduced `--sort=`. Ref: https://github.com/curl/curl/pull/13299#discussion_r1555957350 Follow-up to 860cd5fc2dc8e165fadd2c19a9b7c73b3ae5069d #13299 Closes #13322 --- maketgz | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/maketgz b/maketgz index fa7e4d97be..18b717dea6 100755 --- a/maketgz +++ b/maketgz @@ -185,8 +185,8 @@ retar() { mkdir "$tempdir" cd "$tempdir" gzip -dc "../$targz" | tar -xf - - find curl-* -type f -exec touch -c -t "$filestamp" '{}' + - find curl-* -type f | sort | tar --create --format=ustar --owner=0 --group=0 --numeric-owner --files-from - | gzip --best --no-name > out.tar.gz + find curl-* -depth -exec touch -c -t "$filestamp" '{}' + + tar --create --format=ustar --owner=0 --group=0 --numeric-owner --sort=name curl-* | gzip --best --no-name > out.tar.gz mv out.tar.gz ../ cd .. rm -rf "$tempdir" @@ -223,7 +223,6 @@ makezip() { mkdir "$tempdir" cd "$tempdir" gzip -dc "../$targz" | tar -xf - - find . -depth -type d -exec touch -c -t "$filestamp" '{}' + find . | sort | zip -9 -X "$zip" -@ >/dev/null mv "$zip" ../ cd ..