1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
|
#!/bin/mksh
set -e
export LC_ALL=C
unset LANGUAGE
set -o pipefail
set +e
if [[ $1 != --upstream-version || $# != 2 ]]; then
print -ru2 -- 'E: not called from uscan?'
exit 1
fi
debver=$2
basever=${2%%'+dfsg'*([0-9])}
uver=r${basever//./_}
if [[ ! -s ../jamulus_${debver}.orig.tar.gz ]]; then
print -ru2 -- 'E: missing origtgz'
exit 1
fi
if ! orig=$(realpath "../jamulus_${debver}.orig.tar.gz"); then
print -ru2 -- 'E: cannot find origtgz'
exit 255
fi
cwd=$PWD
if ! T=$(mktemp --tmpdir -d repack.XXXXXXXXXX); then
print -ru2 -- 'E: cannot mktemp'
exit 255
fi
if [[ $T != /* ]] || ! cd "$T"; then
print -ru2 -- "E: mktemp (${T@Q}) error"
exit 255
fi
function die {
local x
print -ru2 -- "E: $1"
shift
for x in "$@"; do
print -ru2 -- "N: $x"
done
cd /
rm -rf "$T"
exit 1
}
print -ru2 -- 'I: extracting origtgz'
tar xaf "$orig" || die 'cannot extract origtgz'
set -A top -- *
if (( ${#top[*]} != 1 )); then
die "origtgz toplevel elements ${#top[*]} mismatch" "${top[*]}"
elif [[ $top = '*' ]]; then
die 'origtgz toplevel empty'
fi
print -ru2 -- 'I: fixing up top-level directory name per DevRef'
policyname=jamulus-${debver}.orig
[[ $top = "$policyname" ]] || mv "$top" "$policyname" || \
die "cannot rename toplevel ${top@Q} to ${policyname@Q}"
top=$policyname
print -ru2 -- 'I: fixing up file permissions'
find "$top" -type d -print0 | xargs -0r chmod 755 -- || \
die 'failed to chmod directories'
find "$top" -type f -print0 | xargs -0r chmod 644 -- || \
die 'failed to chmod files'
print -ru2 -- 'I: repacking'
find "$top" -print0 | sort -z | paxcpio -oC512 -Hustar -Mdist -0 | \
xz -7e >"${orig%.gz}.xz" || die 'could not repack'
print -ru2 -- 'I: cleaning up'
cd "$cwd" || die 'huh'
ls -ltr "../$uver.tar.gz" "../jamulus_${debver}.orig.tar"* | sed 's/^/N: /' >&2
rm "../$uver.tar.gz" "../jamulus_${debver}.orig.tar.gz"
rm -rf "$T"
print -ru2 -- 'I: done'
|