Author: blogic
Date: 2015-07-14 11:57:19 +0200 (Tue, 14 Jul 2015)
New Revision: 46360

Modified:
   trunk/scripts/ipkg-build
Log:
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 <[email protected]>

Modified: trunk/scripts/ipkg-build
===================================================================
--- trunk/scripts/ipkg-build    2015-07-14 09:57:08 UTC (rev 46359)
+++ trunk/scripts/ipkg-build    2015-07-14 09:57:19 UTC (rev 46360)
@@ -13,8 +13,19 @@
 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 @@
 
 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
_______________________________________________
openwrt-commits mailing list
[email protected]
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-commits

Reply via email to