wesnoth/utils/mp-server/update_addons

81 lines
3.0 KiB
Bash

#!/bin/bash
# Add-ons server static web generation (addons.wesnoth.org)
die() { printf '%s\n' "$*" >&2; exit 1; }
[ $# -eq 1 ] || die "Syntax: $0 <addon server version>"
version=$1
addon_files=$HOME/WWW/html/files/addons/$version
addon_cache=$HOME/addons-unpacked/$version
addon_list=$HOME/WWW/html/addons/$version
#deleted_addons=/backup/deleted-addons/$version
deleted_addons=$HOME/deleted-addons/$version
url=https://files.wesnoth.org/addons/$version/
manager=$HOME/source/$version/data/tools/wesnoth_addon_manager
campaignd_host="192.168.1.20"
#campaignd_host="add-ons.wesnoth.org"
options=(-a "$campaignd_host" --port "$version".x)
case $version in
1.2) cd "$HOME/source/1.4" || exit
manager=utils/campaigns_client.py;;
1.4) cd "$HOME/source/1.4" || exit
manager=utils/campaigns_client.py;;
1.8) options+=(--port 1.8.x);;
1.9) options+=(--port 1.9.x --datadir "$HOME/source/1.10")
manager=$HOME/source/master/data/tools/wesnoth_addon_manager;;
1.14) options+=(--port 1.14.x --datadir "$HOME/source/$version");;
trunk) options=(--port trunk --verbose)
manager=$HOME/source/master/data/tools/wesnoth_addon_manager;;
*) [[ -d "$HOME/source/$version" ]] && options+=(--port "$version".x --datadir "$HOME/source/$version")
manager=$HOME/source/master/data/tools/wesnoth_addon_manager;;
esac
mkdir -p "$addon_files" "$addon_list" || exit
# delete unpacked files without tar archive so it gets regenerated
[[ -d $addon_cache ]] && for file in "$addon_cache"/*;
do
addon=$(basename "${file%.cfg}")
[[ -e $addon_files/$addon.tar.bz2 ]] || rm -rfv "$file";
done
"$manager" "${options[@]}" --download='.*' -c "$addon_cache" --html="$addon_list" --url="$url" --tar="$addon_files" || exit
# improve parsing for newer manager versions
ifs=$IFS
[[ $manager = $HOME/source/master/data/tools/wesnoth_addon_manager ]] && ifs=$'\t'
# add addons to an associative array for easy existence check
declare -A addons
while IFS=$ifs read -r type addon rest
do
[[ $addon ]] && addons[$addon]=1
done < <("$manager" "${options[@]}" --list 2> /dev/null | sed 1d) # ignore header
# debug
#(cd "$addon_files" && printf '%s\n' * | sort > "$HOME/log/addon-files-list-$version")
#printf '%s\n' "${!addons[@]}" | sort > "$HOME/log/addon-names-list-$version"
mkdir -p "$deleted_addons"
((${#addons[@]} > 0)) || exit 0
# move deleted addons
for file in "$addon_files"/*.tar.bz2;
do
addon=$(basename "${file%.tar.bz2}")
if [[ $addon && ${addons[$addon]} != 1 ]]
then
# ignore addons with spaces since the list output the addon names are checked against is space separated
if [[ $IFS = $ifs && $addon = *\ * ]]
then
echo "Skipping deletion for $addon"
continue
fi
echo "Archiving files for deleted add-on $addon..."
mv "$file" "$deleted_addons/";
rm -rf "$addon_cache/$addon";
rm -f "$addon_cache/$addon.cfg";
fi
done