forked from crawl/configs
145 lines
3.8 KiB
Bash
Executable File
145 lines
3.8 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# ===========================================================================
|
|
# Copyright (C) 2008, 2009, 2010, 2011 Marc H. Thoben
|
|
# Copyright (C) 2011 Darshan Shaligram
|
|
#
|
|
# This program is free software: you can redistribute it and/or modify
|
|
# it under the terms of the GNU Affero General Public License as published by
|
|
# the Free Software Foundation, either version 3 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU Affero General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU Affero General Public License
|
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
# ===========================================================================
|
|
#
|
|
|
|
set -u
|
|
|
|
ARGUMENTS=($@)
|
|
CHAR_NAME="$(echo ${ARGUMENTS[0]} | sed 's/[$*\/();.|+-]//g')"
|
|
BINARY_MAIN_NAME=${ARGUMENTS[1]}
|
|
BINARY_SAVE_NAME=$BINARY_MAIN_NAME
|
|
PREFIX="${ARGUMENTS[2]}"
|
|
|
|
trap "read -n 1 -s -p '-- Hit a key to exit --'; exit 0" EXIT
|
|
|
|
clear
|
|
|
|
TODAY="$(date +%y%m%d-%H%M)"
|
|
|
|
TARGET_DIR="%%CHROOT_SAVE_DUMPDIR%%"
|
|
HTTP_LINK="%%WEB_SAVEDUMP_URL%%"
|
|
|
|
USER_ID="%%DGL_UID%%"
|
|
|
|
existing-files() {
|
|
for file in "$@"; do
|
|
if [[ -f "$file" ]]; then
|
|
printf "%s " "$file"
|
|
fi
|
|
done
|
|
}
|
|
|
|
first-existing-file() {
|
|
for file in "$@"; do
|
|
if [[ -f "$file" ]]; then
|
|
echo "$file"
|
|
fi
|
|
done
|
|
}
|
|
|
|
savedir-containing() {
|
|
local char="$1"
|
|
local -a saves
|
|
saves=($PREFIX/$BINARY_SAVE_NAME{,-*}/saves/$char{,-$USER_ID}.{cs,chr,sav})
|
|
local savefile="$(first-existing-file "${saves[@]}")"
|
|
[[ -n "$savefile" ]] && dirname "$savefile"
|
|
return 0
|
|
}
|
|
|
|
SAVES="$(savedir-containing $CHAR_NAME)"
|
|
SPRINT_SAVES="$(savedir-containing sprint/$CHAR_NAME)"
|
|
ZOTDEF_SAVES="$(savedir-containing zotdef/$CHAR_NAME)"
|
|
|
|
if [[ -z "$SAVES" && -z "$SPRINT_SAVES" && -z "$ZOTDEF_SAVES" ]]; then
|
|
echo "No saves to backup for $CHAR_NAME"
|
|
fi
|
|
|
|
SAVE_QUALIFIER=""
|
|
|
|
CHAR=Character
|
|
|
|
C_NORMAL="\033[0m"
|
|
C_YELLOW="\033[1;33m"
|
|
C_GREEN="\033[1;32m"
|
|
C_RED="\033[1;31m"
|
|
|
|
PROMPT="Backup"
|
|
[[ -n "$SAVES" ]] && PROMPT="$PROMPT [n]ormal save"
|
|
[[ -n "$SPRINT_SAVES" ]] && PROMPT="$PROMPT [s]print"
|
|
[[ -n "$ZOTDEF_SAVES" ]] && PROMPT="$PROMPT [z]otdef"
|
|
PROMPT="$PROMPT character?"
|
|
|
|
read -n 1 -s -p "$PROMPT" REPLY
|
|
echo
|
|
|
|
REPLY="$(echo "$REPLY" | sed 's/\([A-Z]\)/\L\1/g')"
|
|
|
|
if [[ -n "$SPRINT_SAVES" && ( "$REPLY" = "s" ) ]]; then
|
|
SAVE_QUALIFIER="-sprint"
|
|
SAVES="$SPRINT_SAVES"
|
|
CHAR="Sprint character"
|
|
elif [[ -n "$ZOTDEF_SAVES" && ( "$REPLY" = "z" ) ]]; then
|
|
SAVE_QUALIFIER="-zotdef"
|
|
SAVES="$ZOTDEF_SAVES"
|
|
CHAR="Zot Defense character"
|
|
elif [[ "$REPLY" != "n" ]]; then
|
|
echo -e "Bad choice, aborting."
|
|
exit 1
|
|
fi
|
|
|
|
declare -a SAVE_MATCHES
|
|
SAVE_MATCHES=(${SAVES}/${CHAR_NAME}{,-${USER_ID}}.{sav,cs,chr}*)
|
|
|
|
# Get rid of glob patterns that failed to match anything:
|
|
SAVE_MATCHES=(${SAVE_MATCHES[@]##*\*})
|
|
|
|
# And the first remaining entry is the matched save.
|
|
SAVE_FOUND=${SAVE_MATCHES[0]}
|
|
|
|
if [[ -n "$SAVE_FOUND" && -f "$SAVE_FOUND" ]]; then
|
|
GAME_NAME=${SAVES%/zotdef}
|
|
GAME_NAME=${GAME_NAME%/sprint}
|
|
GAME_NAME="$(dirname $GAME_NAME)"
|
|
GAME_NAME="${GAME_NAME##*/}"
|
|
|
|
echo
|
|
echo "$CHAR \"${CHAR_NAME}\" in $GAME_NAME. "
|
|
|
|
echo -n "Backing up:"
|
|
cd $SAVES
|
|
|
|
TARNAME=${CHAR_NAME}${SAVE_QUALIFIER}-$GAME_NAME-${TODAY}.tar.bz2
|
|
tar -cjf ${TARGET_DIR}/$TARNAME \
|
|
$(existing-files ${CHAR_NAME}{,-${USER_ID}}.*)
|
|
|
|
if test $? -ne 0
|
|
then
|
|
echo -e " ${C_RED}failed!${C_NORMAL}"
|
|
else
|
|
echo -e " ${C_GREEN}successful.${C_NORMAL}"
|
|
echo "- ${HTTP_LINK}/$TARNAME"
|
|
echo
|
|
echo "Please provide this link in your bug-report or give it to a developer."
|
|
fi
|
|
else
|
|
echo "Your character ($CHAR_NAME) was not found in $SAVES."
|
|
fi
|
|
|