dev: re-run update.sh if the script itself is modified by the update

This commit is contained in:
naskya 2024-01-10 10:00:07 +09:00
parent 32fac3768b
commit 350161974f
Signed by: naskya
GPG key ID: 712D413B3A9FED5C
2 changed files with 74 additions and 73 deletions

69
neko/update/main.sh Executable file
View file

@ -0,0 +1,69 @@
#!/bin/sh
set -eu
. neko/update/utils
# Show messages
for message in $(find neko/messages -type f ! -name '*.resolved' -print | sort); do
file=$(basename -- "${message}")
if [ ! -f "neko/flags/${file}" ]; then
if contains '--install' "$@"; then
touch "neko/flags/${file}"
else
say 'There is an important notice!'
cat "${message}"
say 'Continue? (Are you ready for upgrading?)'
printf '[y/N] > '
read -r yn
case "${yn}" in
[Yy]|[Yy][Ee][Ss])
touch "neko/flags/${file}"
say "Let's go!"
say "To read the message again, run: \$ cat ${message}"
br
;;
*)
say "Okay, please run this script again when you're ready!"
exit 1
;;
esac
fi
fi
done
# Update
docker_update() {
./neko/update/container.sh 'docker' "$@"
}
podman_update() {
./neko/update/container.sh 'podman' "$@"
}
native_update() {
./neko/update/native.sh "$@"
}
if contains '--docker' "$@"; then docker_update "$@"
elif contains '--podman' "$@"; then podman_update "$@"
elif contains '--native' "$@"; then native_update "$@"
else
say 'Do you use Docker or Podman?'
printf 'd: Docker, p: Podman, n: No [d/p/N] > '
read -r resp
case "${resp}" in
[Yy]|[Yy][Ee][Ss])
sadsay "Watch out! ${resp} is not a valid answer." >&2
exit 2
;;
[Dd]) docker_update "$@" ;;
[Pp]) podman_update "$@" ;;
*) native_update "$@" ;;
esac
fi
# Done
say 'Enjoy your sabakan life~'

View file

@ -4,14 +4,12 @@ set -eu
. neko/update/utils . neko/update/utils
say 'Start upgrading Firefish!' say 'Start upgrading Firefish!'
br
# Apply patches # Apply patches
run './neko/update/patch.sh' run './neko/update/patch.sh'
br br
# Pull changes # Pull changes
## git pull
OLD_COMMIT=$(git rev-parse --short HEAD) OLD_COMMIT=$(git rev-parse --short HEAD)
say 'Pulling changes from the remote repo...' say 'Pulling changes from the remote repo...'
@ -27,77 +25,11 @@ fi
say 'Pulled successfully!' say 'Pulled successfully!'
br br
## check if the update script itself is updated # Check if the update script itself is modified
say 'Checking if the update script itself has been modified by this update...' if [ "$(git diff "${OLD_COMMIT}" "${NEW_COMMIT}" update.sh)" != '' ]; then
if [ "$(git diff "${OLD_COMMIT}" "${NEW_COMMIT}" update.sh neko/update)" != '' ]; then say 'This script itself has been modified by the update. Reloading...'
say 'Oh meow, that seems to be the case.'
sadsay "I'm sorry to bother you, but please run this script again!"
exit 1
else
say 'This script seems to be up-to-date!'
br br
fi exec "$0" "$@"
## show messages
for message in $(find neko/messages -type f ! -name '*.resolved' -print | sort); do
file=$(basename -- "${message}")
if [ ! -f "neko/flags/${file}" ]; then
if contains '--install' "$@"; then
touch "neko/flags/${file}"
else else
say 'There is an important notice!' ./neko/update/main.sh "$@"
cat "${message}"
say 'Continue? (Are you ready for upgrading?)'
printf '[y/N] > '
read -r yn
case "${yn}" in
[Yy]|[Yy][Ee][Ss])
touch "neko/flags/${file}"
say "Let's go!"
say "To read the message again, run: \$ cat ${message}"
br
;;
*)
say "Okay, please run this script again when you're ready!"
exit 1
;;
esac
fi fi
fi
done
docker_update() {
./neko/update/container.sh 'docker' "$@"
}
podman_update() {
./neko/update/container.sh 'podman' "$@"
}
native_update() {
./neko/update/native.sh "$@"
}
if contains '--docker' "$@"; then docker_update "$@"
elif contains '--podman' "$@"; then podman_update "$@"
elif contains '--native' "$@"; then native_update "$@"
else
say 'Do you use Docker or Podman?'
printf 'd: Docker, p: Podman, n: No [d/p/N] > '
read -r resp
case "${resp}" in
[Yy]|[Yy][Ee][Ss])
sadsay "Watch out! ${resp} is not a valid answer." >&2
exit 2
;;
[Dd]) docker_update "$@" ;;
[Pp]) podman_update "$@" ;;
*) native_update "$@" ;;
esac
fi
# Done
say 'Enjoy your sabakan life~'