diff --git a/update.sh b/update.sh index 81b68f5..14d7a95 100755 --- a/update.sh +++ b/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[@]}"