updpkgsums: retain permissions on rewritten PKGBUILD

This could have been easy with something like chown's --reference flag,
but this is GNU specific. Instead, just truncate and rewrite the file.
Our exit trap cleans up after us.

Fixes: https://bugs.archlinux.org/task/43272

Signed-off-by: Allan McRae <allan@archlinux.org>
This commit is contained in:
Dave Reisner 2014-12-31 14:33:31 -05:00 committed by Allan McRae
parent 39fe2d0e39
commit ca5a2771ae

View file

@ -82,9 +82,6 @@ fi
export BUILDDIR=$(mktemp -d --tmpdir updpkgsums.XXXXXX) export BUILDDIR=$(mktemp -d --tmpdir updpkgsums.XXXXXX)
newbuildfile=$(mktemp --tmpdir updpkgsums.XXXXXX) newbuildfile=$(mktemp --tmpdir updpkgsums.XXXXXX)
# In case the eventual replacement fails, we don't want to leave behind
# $newbuildfile as garbage in $TMPDIR. This fails silently if the replacement
# succeeds.
trap "rm -rf '$BUILDDIR' '$newbuildfile'" EXIT trap "rm -rf '$BUILDDIR' '$newbuildfile'" EXIT
newsums=$(makepkg -g -p "$buildfile") || die 'Failed to generate new checksums' newsums=$(makepkg -g -p "$buildfile") || die 'Failed to generate new checksums'
awk -v newsums="$newsums" ' awk -v newsums="$newsums" '
@ -100,8 +97,9 @@ awk -v newsums="$newsums" '
END { if (!w) print newsums } END { if (!w) print newsums }
' "$buildfile" > "$newbuildfile" || die 'Failed to write new PKGBUILD' ' "$buildfile" > "$newbuildfile" || die 'Failed to write new PKGBUILD'
# Replace the original buildfile. # Rewrite the original buildfile. Use cat instead of mv/cp to preserve
if ! mv -- "$newbuildfile" "$buildfile"; then # permissions implicitly.
if ! cat -- "$newbuildfile" >"$buildfile"; then
die "Failed to update %s. The file has not been modified." "$buildfile" die "Failed to update %s. The file has not been modified." "$buildfile"
fi fi