summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Crispin <john@openwrt.org>2015-07-14 09:57:19 +0000
committerJohn Crispin <john@openwrt.org>2015-07-14 09:57:19 +0000
commit3846bb9ac92060669f9c798c3c128057a6d32809 (patch)
tree1bafb7345bc62f4e67e41e512df5b030e6d1fe99
parent5e1c7fb0cc6de1994579abd82e60eeea5976ca65 (diff)
downloadmtk-20170518-3846bb9ac92060669f9c798c3c128057a6d32809.zip
mtk-20170518-3846bb9ac92060669f9c798c3c128057a6d32809.tar.gz
mtk-20170518-3846bb9ac92060669f9c798c3c128057a6d32809.tar.bz2
ipkg-build: use deterministic timestamps in ipk tarballs
As a follow-up to r46026, this commit sets the modification times of files inside the tarballs to deterministic values. It uses the date of the last git or svn commit and falls back to the old behavior if those are not available. Signed-off-by: Reiner Herrmann <reiner@reiner-h.de> SVN-Revision: 46360
-rwxr-xr-xscripts/ipkg-build17
1 files changed, 14 insertions, 3 deletions
diff --git a/scripts/ipkg-build b/scripts/ipkg-build
index 6787ed4..2d41076 100755
--- a/scripts/ipkg-build
+++ b/scripts/ipkg-build
@@ -13,8 +13,19 @@ version=1.0
FIND="$(which find)"
FIND="${FIND:-$(which gfind)}"
TAR="${TAR:-$(which tar)}"
+SVN="$(which svn)"
+GIT="$(which git)"
export GZIP="-n"
+# look up date of last commit
+if [ -d "$TOPDIR/.git" ]; then
+ TIMESTAMP=$($GIT log -1 -s --format=%ci)
+elif [ -d "$TOPDIR/.svn" ]; then
+ TIMESTAMP=$($SVN info "$TOPDIR" | sed -n "s/^Last Changed Date: \(.*\)/\1/p")
+else
+ TIMESTAMP=$(date)
+fi
+
ipkg_extract_value() {
sed -e "s/^[^:]*:[[:space:]]*//"
}
@@ -128,20 +139,20 @@ mkdir $tmp_dir
echo $CONTROL > $tmp_dir/tarX
# Preserve permissions (-p) when creating data.tar.gz as non-root user
-( cd $pkg_dir && $TAR $ogargs -X $tmp_dir/tarX --format=gnu -czpf $tmp_dir/data.tar.gz . )
+( cd $pkg_dir && $TAR $ogargs -X $tmp_dir/tarX --format=gnu -czpf $tmp_dir/data.tar.gz --mtime="$TIMESTAMP" . )
installed_size=`stat -c "%s" $tmp_dir/data.tar.gz`
sed -i -e "s/^Installed-Size: .*/Installed-Size: $installed_size/" \
$pkg_dir/$CONTROL/control
-( cd $pkg_dir/$CONTROL && $TAR $ogargs --format=gnu -czf $tmp_dir/control.tar.gz . )
+( cd $pkg_dir/$CONTROL && $TAR $ogargs --format=gnu -czf $tmp_dir/control.tar.gz --mtime="$TIMESTAMP" . )
rm $tmp_dir/tarX
echo "2.0" > $tmp_dir/debian-binary
pkg_file=$dest_dir/${pkg}_${version}_${arch}.ipk
rm -f $pkg_file
-( cd $tmp_dir && $TAR --format=gnu -zcf $pkg_file ./debian-binary ./data.tar.gz ./control.tar.gz )
+( cd $tmp_dir && $TAR --format=gnu -zcf $pkg_file --mtime="$TIMESTAMP" ./debian-binary ./data.tar.gz ./control.tar.gz )
rm $tmp_dir/debian-binary $tmp_dir/data.tar.gz $tmp_dir/control.tar.gz
rmdir $tmp_dir