mirror of
https://codeberg.org/h3xx/you-dont-need-pihole.git
synced 2024-08-14 20:27:01 +00:00
Limit file clobbering during update
Don't clobber files in-place unless there's actual changes.
This commit is contained in:
parent
65ade612e7
commit
59ef0fd513
1 changed files with 32 additions and 32 deletions
64
update.sh
64
update.sh
|
@ -36,6 +36,34 @@ cleanup() {
|
|||
}
|
||||
trap 'cleanup' EXIT
|
||||
|
||||
copy_perms() {
|
||||
local -r FROM=$1 TO=$2
|
||||
chmod --reference="$FROM" -- "$TO"
|
||||
if [[ $UID -eq 0 ]]; then
|
||||
chown --reference="$FROM" -- "$TO"
|
||||
fi
|
||||
}
|
||||
|
||||
replace_with() {
|
||||
local -r ORIG=$1 NEW=$2
|
||||
if ! diff -q -- "$ORIG" "$NEW" &>/dev/null; then
|
||||
# There's a change
|
||||
if [[ -f $ORIG ]]; then
|
||||
copy_perms "$ORIG" "$NEW"
|
||||
if [[ -n $BACKUPSUFFIX ]]; then
|
||||
mv -- "$ORIG" "$ORIG$BACKUPSUFFIX"
|
||||
fi
|
||||
else
|
||||
mkdir -p -- "${ORIG%/*}"
|
||||
fi
|
||||
mv -- "$NEW" "$ORIG"
|
||||
else
|
||||
printf 'File "%s" not modified\n' \
|
||||
"$ORIG" \
|
||||
>&2
|
||||
fi
|
||||
}
|
||||
|
||||
(cd "$WORKDIR" && git submodule update --init --remote)
|
||||
|
||||
for (( I = 0 ; I < ${#OUT[@]} ; ++I )); do
|
||||
|
@ -52,44 +80,16 @@ for (( I = 0 ; I < ${#OUT[@]} ; ++I )); do
|
|||
|
||||
TEMP_OUT=$(mktemp -p "$TEMP_DIR")
|
||||
|
||||
if [[ -f $MY_OUT ]]; then
|
||||
cp -a -- "$MY_OUT" "$TEMP_OUT"
|
||||
fi
|
||||
|
||||
wget \
|
||||
-O "$TEMP_OUT" \
|
||||
"$MY_URL"
|
||||
|
||||
if [[ -f $MY_OUT ]]; then
|
||||
chmod --reference="$MY_OUT" "$TEMP_OUT"
|
||||
if [[ -n $BACKUPSUFFIX ]]; then
|
||||
mv -- "$MY_OUT" "$MY_OUT$BACKUPSUFFIX"
|
||||
fi
|
||||
fi
|
||||
|
||||
mkdir -p -- "${MY_OUT%/*}"
|
||||
mv -- "$TEMP_OUT" "$MY_OUT"
|
||||
|
||||
# If the old one is the same, don't keep it around
|
||||
if [[ -n $BACKUPSUFFIX && -f $MY_OUT$BACKUPSUFFIX ]]; then
|
||||
if diff -q "$MY_OUT" "$MY_OUT$BACKUPSUFFIX"; then
|
||||
rm -f -- "$MY_OUT$BACKUPSUFFIX"
|
||||
fi
|
||||
fi
|
||||
|
||||
replace_with "$MY_OUT" "$TEMP_OUT"
|
||||
done
|
||||
|
||||
if [[ -n $BACKUPSUFFIX && -f $BLOCKLIST ]]; then
|
||||
mv -- "$BLOCKLIST" "$BLOCKLIST$BACKUPSUFFIX"
|
||||
fi
|
||||
"$WORKDIR/make-block.pl" --out="$BLOCKLIST"
|
||||
|
||||
# If the old one is the same the same, don't keep it around
|
||||
if [[ -n $BACKUPSUFFIX && -f $BLOCKLIST$BACKUPSUFFIX ]]; then
|
||||
if diff -q "$BLOCKLIST" "$BLOCKLIST$BACKUPSUFFIX"; then
|
||||
rm -f -- "$BLOCKLIST$BACKUPSUFFIX"
|
||||
fi
|
||||
fi
|
||||
TEMP_BLOCKLIST=$(mktemp -p "$TEMP_DIR")
|
||||
"$WORKDIR/make-block.pl" --out="$TEMP_BLOCKLIST"
|
||||
replace_with "$BLOCKLIST" "$TEMP_BLOCKLIST"
|
||||
|
||||
if [[ ${#DNSMASQ_RESTART_COMMAND[@]} -gt 0 ]]; then
|
||||
"${DNSMASQ_RESTART_COMMAND[@]}"
|
||||
|
|
Loading…
Reference in a new issue