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
This commit is contained in:
parent
5e1c7fb0cc
commit
3846bb9ac9
1 changed files with 14 additions and 3 deletions
|
@ -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
|
||||||
|
|
||||||
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
|
||||||
|
|
Loading…
Reference in a new issue