summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSlávek Banko <slavek.banko@axis.cz>2020-03-20 15:30:00 +0100
committerSlávek Banko <slavek.banko@axis.cz>2020-03-23 17:45:05 +0100
commit444f4bbf72ca360d6be8b2d35c7d4ef64f09a716 (patch)
treee6c0b3b7549af09e334ca203b19db46f868ecb72
parent6d5bbbe14bc8caa7a28c5d15c841f10e3aa53eef (diff)
downloadscripts-444f4bbf72ca360d6be8b2d35c7d4ef64f09a716.tar.gz
scripts-444f4bbf72ca360d6be8b2d35c7d4ef64f09a716.zip
create_tarball: Modify the tarball creation so that it is reproducible.
Note: If gzip or pigz is used, it is necessary to use the "-n" option. Signed-off-by: Slávek Banko <slavek.banko@axis.cz> (cherry picked from commit 428c2d88b4ac80df001d25973a1511d6a3d424c6)
-rwxr-xr-xcreate_tarball19
1 files changed, 13 insertions, 6 deletions
diff --git a/create_tarball b/create_tarball
index c65c5d2..282225d 100755
--- a/create_tarball
+++ b/create_tarball
@@ -15,9 +15,9 @@ TARBALL_DIR=${TARBALL_DIR:-".."}
# Set compression method
case ${COMPRESS:="xz"} in
- "gzip"|"pigz") TAR_SUFFIX="gz";;
- "bzip2"|"pbzip2") TAR_SUFFIX="bz2";;
- "xz"|"pxz") TAR_SUFFIX="xz";;
+ "gzip"*|"pigz"*) TAR_SUFFIX=".gz";;
+ "bzip2"|"pbzip2") TAR_SUFFIX=".bz2";;
+ "xz"|"pxz") TAR_SUFFIX=".xz";;
esac
# Check git-dir
@@ -142,18 +142,25 @@ fi
# Create tarball
echo "Package name: $package"
-if [ ! -e $TARBALL_DIR/$package.tar.$TAR_SUFFIX ]; then
+if [ ! -e $TARBALL_DIR/$package.tar$TAR_SUFFIX ]; then
echo "Creating tarball in $TARBALL_DIR."
echo "# TDE SCM module information" > .tdescminfo
echo "Name: $MODULE" >> .tdescminfo
echo "Revision: $branch-$(git rev-parse HEAD)" >> .tdescminfo
git log -1 --pretty=format:"DateTime: %cd%n" --date=format:"%m/%d/%Y %H:%M" >> .tdescminfo
trap "rm $TARBALL_DIR/tar-$$; rm .tdescminfo; exit 1" INT
- tar c --owner=root --group=users --exclude .git --exclude .gitmodules --transform "s|^\.\(/\|$\)|$package\1|" ./ | \
+ find ./ -print0 | LC_ALL=C sort -z | \
+ tar c --no-recursion --null -T - \
+ --mtime "@$(git log -1 --pretty=format:"%ct")" \
+ --owner=root --group=users --exclude .git --exclude .gitmodules \
+ --pax-option=exthdr.name=%d/PaxHeaders/%f,delete=atime,delete=ctime \
+ --transform "s|^\.\(/\|$\)|$package\1|" ./ | \
$COMPRESS -9 >$TARBALL_DIR/tar-$$ && \
- mv $TARBALL_DIR/tar-$$ $TARBALL_DIR/$package.tar.$TAR_SUFFIX || \
+ mv $TARBALL_DIR/tar-$$ $TARBALL_DIR/$package.tar$TAR_SUFFIX || \
rm $TARBALL_DIR/tar-$$
rm .tdescminfo
+ [ -f $TARBALL_DIR/$package.tar$TAR_SUFFIX ] && \
+ touch -d "@$(git log -1 --pretty=format:"%ct")" $TARBALL_DIR/$package.tar$TAR_SUFFIX
else
echo "Unchanged tarball in $TARBALL_DIR."
exit 2