Commit ea31d520 authored by Rusty Bird's avatar Rusty Bird Committed by Georg Koppen
Browse files

Bug 20147: (re-)dzip.sh: various improvements

- Don't ignore errors (except unzip exit status 1 or 2)
- Quote $@ and $1
- Work with absolute filenames and filenames starting with a dash
- Pass many files per chmod invocation (much faster)
- Pass $UNZIPOPTS, like $ZIPOPTS
- Reuse dzip.sh in re-dzip.sh

The (re)generated zip files are identical.
parent 55ba062a
Loading
Loading
Loading
Loading
+8 −9
Original line number Diff line number Diff line
#!/bin/sh
#!/bin/sh -e
# Crappy deterministic zip wrapper
export LC_ALL=C

ZIPFILE=$1
ZIPFILE=${1:?}
shift

[ -n "$REFERENCE_DATETIME" ] && \
	find $@ -exec touch --date="$REFERENCE_DATETIME" {} \;

find $@ -executable -exec chmod 700 {} \;
find $@ ! -executable -exec chmod 600 {} \;

find $@ | sort | zip $ZIPOPTS -X -@ "$ZIPFILE"
if [ -n "$REFERENCE_DATETIME" ]; then
	find "$@" -exec touch --date="$REFERENCE_DATETIME" -- {} +
fi
find "$@"   -executable -exec chmod 700 {} +
find "$@" ! -executable -exec chmod 600 {} +
find "$@" | sort | zip $ZIPOPTS -X -@ "$ZIPFILE"
+10 −13
Original line number Diff line number Diff line
#!/bin/sh
#!/bin/sh -e
# Crappy deterministic zip repackager
export LC_ALL=C

ZIPFILE=`basename $1`
ZIPFILE_BASENAME=$(basename -- "${1:?}")
TEMPDIR=tmp-re-dzip-$$
RE_DZIP=$(readlink -f -- "$(which -- "$0")")
PATH=$PATH:$(dirname "$RE_DZIP")

mkdir tmp_dzip
cd tmp_dzip
unzip ../$1
[ -n "$REFERENCE_DATETIME" ] && \
	find . -exec touch --date="$REFERENCE_DATETIME" {} \;
find . -executable -exec chmod 700 {} \;
find . ! -executable -exec chmod 600 {} \;
find . | sort | zip $ZIPOPTS -X -@ $ZIPFILE
mv $ZIPFILE ../$1
cd ..
rm -rf tmp_dzip
mkdir "$TEMPDIR"
unzip $UNZIPOPTS -d "$TEMPDIR" -- "$1" || [ $? -lt 3 ]
(cd "$TEMPDIR"; dzip.sh ./"$ZIPFILE_BASENAME" .)
mv -- "$TEMPDIR"/"$ZIPFILE_BASENAME" "$1"
rm -rf "$TEMPDIR"