Skip to content
Snippets Groups Projects
Commit 3846bb9a authored by John Crispin's avatar John Crispin
Browse files

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: default avatarReiner Herrmann <reiner@reiner-h.de>

SVN-Revision: 46360
parent 5e1c7fb0
No related branches found
No related tags found
No related merge requests found
...@@ -13,8 +13,19 @@ version=1.0 ...@@ -13,8 +13,19 @@ version=1.0
FIND="$(which find)" FIND="$(which find)"
FIND="${FIND:-$(which gfind)}" FIND="${FIND:-$(which gfind)}"
TAR="${TAR:-$(which tar)}" TAR="${TAR:-$(which tar)}"
SVN="$(which svn)"
GIT="$(which git)"
export GZIP="-n" 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() { ipkg_extract_value() {
sed -e "s/^[^:]*:[[:space:]]*//" sed -e "s/^[^:]*:[[:space:]]*//"
} }
...@@ -128,20 +139,20 @@ mkdir $tmp_dir ...@@ -128,20 +139,20 @@ mkdir $tmp_dir
echo $CONTROL > $tmp_dir/tarX echo $CONTROL > $tmp_dir/tarX
# Preserve permissions (-p) when creating data.tar.gz as non-root user # 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` installed_size=`stat -c "%s" $tmp_dir/data.tar.gz`
sed -i -e "s/^Installed-Size: .*/Installed-Size: $installed_size/" \ sed -i -e "s/^Installed-Size: .*/Installed-Size: $installed_size/" \
$pkg_dir/$CONTROL/control $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 rm $tmp_dir/tarX
echo "2.0" > $tmp_dir/debian-binary echo "2.0" > $tmp_dir/debian-binary
pkg_file=$dest_dir/${pkg}_${version}_${arch}.ipk pkg_file=$dest_dir/${pkg}_${version}_${arch}.ipk
rm -f $pkg_file 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 rm $tmp_dir/debian-binary $tmp_dir/data.tar.gz $tmp_dir/control.tar.gz
rmdir $tmp_dir rmdir $tmp_dir
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment