mirror of
https://github.com/wesnoth/wesnoth
synced 2025-04-15 21:12:47 +00:00

Respect server options given as script arguments. Fix killing background process in trap. Use printf instead of echo. Keep upper case variable names reserved for env variables. Logfilter scripts converted to sed -E and removed GNUisms.
61 lines
2.8 KiB
Bash
Executable File
61 lines
2.8 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# Rewrites server config files to switch to a new version and makes
|
|
# the server re-read those config files. Also sends a server messages
|
|
# to announce the new version.
|
|
# Has logic to handle a temporary server for the (now) previous version.
|
|
#
|
|
# Option -n can be used to do a "dry run".
|
|
|
|
die() { echo >&2 "$@"; exit 1; }
|
|
[ $# -ge 1 ] || die "Syntax: $0 [-n] <new minor version>"
|
|
set -o errexit
|
|
set -o nounset
|
|
set -x
|
|
|
|
echo=""
|
|
[ "$1" = "-n" ] && { echo=echo; shift; }
|
|
[ "$1" -ge 1 ] || die "New version must be at least 1!"
|
|
|
|
dev_version=$(readlink "$HOME/servers/dev")
|
|
dev_version_re=${dev_version//./\\.}
|
|
new_version=$dev_version.$1
|
|
new_version_re=${new_version//./\\.}
|
|
prev_version=$dev_version.$(($1-1))
|
|
prev_version_re=${prev_version//./\\.}
|
|
pprev_version=$dev_version.$(($1-2))
|
|
pprev_version_re=${pprev_version//./\\.}
|
|
next_version=$dev_version.$(($1+1))
|
|
dev_server_config=$HOME/servers/$dev_version/wesnothd.cfg
|
|
prev_server_config=$HOME/servers/$dev_version-prev/wesnothd.cfg
|
|
prev_server_redirect=$HOME/servers/$dev_version-prev/redirect.cfg
|
|
|
|
prev=no
|
|
test -w "$prev_server_config" && prev=yes
|
|
[ "$prev" = no ] || [ "$1" -gt 1 ] || die "New version must be greater than 1 when using a previous version server!"
|
|
|
|
|
|
server_message="Version $new_version has been released! Update now! (You need the new version in order to join this server again.)"
|
|
[ "$prev" = yes ] && server_message="Version $new_version has been released! New users with the previous version will now get redirected to a temporary server that will run until binaries for all major OSes are out."
|
|
|
|
#if ! ps -C wesnothd-$dev_version-prev>/dev/null; then
|
|
# echo "Previous server isn't running!"
|
|
# exit 1
|
|
#fi
|
|
|
|
# Handle the 15 character limit for process names of /proc/<pid>/stat
|
|
reread_config() { $echo pkill -HUP "${1:0:15}"; }
|
|
|
|
[ "$prev" = yes ] && $echo sed -i "/versions_accepted=/s/$pprev_version_re/$prev_version/;/motd=/s/$prev_version_re/$new_version/g" "$prev_server_config"
|
|
# reload the config
|
|
[ "$prev" = yes ] && reread_config "wesnothd-$dev_version-prev"
|
|
# check if we currently allow the previous version to prevent announcing the same version twice
|
|
grep "versions_accepted=.*${prev_version//./\\.}" "$dev_server_config" || die "Previous version $prev_version currently not accepted. Announcing the right version? Aborting..."
|
|
$echo sed -i "s/^id=.*/id=$new_version/;/^versions_accepted=/{s/$new_version_re/$next_version/;s/$prev_version_re/$new_version/};/motd=/s/$prev_version_re/$new_version/g" "$dev_server_config"
|
|
# update previous version redirect
|
|
[ "$prev" = yes ] && $echo sed -i "/version=/s/$pprev_version_re/$prev_version/" "$prev_server_redirect"
|
|
[ "$prev" = yes ] && $echo sed -i "s,#\({./$dev_version_re-prev-redirect.cfg}\),\1," "$dev_server_config"
|
|
# reload the config
|
|
reread_config "wesnothd-$dev_version"
|
|
$echo "$HOME/bin/send_server_message" "$dev_version" "$server_message"
|