refactoring the pre-release script.

1. tests are now done in a subdiretory od the live server.
2. usage is easier, with commands.
3. using getopts for command-line parsing is cool.
This commit is contained in:
Enno Rehling 2014-08-11 13:41:37 +02:00
parent 3c2ae7ca93
commit 04be680bd5
3 changed files with 134 additions and 36 deletions

166
s/preview
View File

@ -1,58 +1,158 @@
#!/bin/bash
usage() {
echo "usage: $0 game-id"
exit 1
function usage() {
cat <<HEREDOC
usage: $0 [-t <turn>] [-g <game>] [-f <file>] command [args]
commands:
build -- pull and rebuild the code
version -- print the current build number
setup -- create base directory and config files
run -- run a turn
send [id ...] -- send reports to one or more factions, or to all ids in <file>
HEREDOC
exit 1
}
abort() {
echo $1
[ -z $2 ] && exit -1
exit $2 # otherwise
function abort() {
echo $1
[ -z $2 ] && exit -1
exit $2 # otherwise
}
[ -d $ERESSEA ] || abort "Invalid env variable ERESSEA ($ERESSEA)"
GAME=$1
LIVE=$ERESSEA/game-$GAME
SOURCE=$ERESSEA/git
TESTROOT=$LIVE/test
REBUILD=0
[ -d $LIVE ] || usage
[ -d $SOURCE ] || abort "missing source directory: $SOURCE"
[ -f $LIVE/turn ] || abort "missing turn file"
let TURN=$(cat $LIVE/turn)-1
if [ $REBUILD ] ; then
function build() {
assert_dir $SOURCE
cd $SOURCE
git pull || abort "failed to update source. do you have local changes?"
BUILD=$(grep BUILD src/build.h | awk '{ print $3 }')
s/build || abort "build failed."
fi
}
echo "testing turn $TURN of game $GAME with build $BUILD"
function assert_file() {
[ -e $1 ] || abort "missing file: $1"
}
function assert_files() {
while [ ! -z $1 ] ; do
assert_file $1
shift
done
}
function assert_dir() {
[ -d $1 ] || abort "missing directory: $1"
}
function version() {
assert_dir $SOURCE
cd $SOURCE
build=$(grep BUILD src/build.h | awk '{ print $3 }')
echo "eressea build $build"
}
function setup() {
assert_dir $SOURCE
assert_dir $LIVE
mkdir -p $TESTROOT
assert_dir $TESTROOT
cd $TESTROOT
if [ ! -e eressea.ini ] ; then
cat >| eressea.ini <<HEREDOC
[lua]
dbname = preview.db
install = $SOURCE
paths = $SOURCE/lunit:$SOURCE/git/scripts
rules = e$GAME
rules = e$game
HEREDOC
fi
}
function run() {
echo "testing turn $turn of game $game"
assert_dir $TESTROOT
cd $TESTROOT
[ -d data ] || mkdir data
assert_dir data
assert_files $LIVE/orders.$turn $LIVE/data/$turn.dat
cp $LIVE/eressea.db preview.db
ln -f $LIVE/orders.$TURN
ln -f $LIVE/data/$TURN.dat data/
ln -f $LIVE/orders.$turn
ln -f $LIVE/data/$turn.dat data/
rm -rf reports
mkdir -p reports
$SOURCE/build-x86_64-gcc-Debug/eressea/eressea -v1 -t$TURN -re$GAME $SOURCE/scripts/run-turn.lua
let TURN=$TURN+1
[ -e data/$TURN.dat ] || abort "no data file created"
$SOURCE/build-x86_64-gcc-Debug/eressea/eressea -v$verbose -t$turn -re$game $SOURCE/scripts/run-turn.lua
let turn=$turn+1
[ -e data/$turn.dat ] || abort "no data file created"
}
function send() {
echo "sending reports to $1"
zip="$turn-$1.zip"
zip -q -u $yip $turn-$1.?r
email=$(grep "faction=$1:" reports.txt | cut -d: -f2 | sed 's/email=//')
cat /dev/null | mutt -F $ERESSEA/etc/muttrc -s "Testauswertung Spiel $GAME Partei $1" -a $zip -- $email
}
game=0
turn=0
verbose=1
factions="testers.txt"
while getopts :g:t:f:v: o; do
case "${o}" in
f)
factions=${OPTARG}
;;
v)
verbose=${OPTARG}
;;
g)
game=${OPTARG}
;;
t)
turn=${OPTARG}
;;
*)
usage
;;
esac
done
shift $((OPTIND-1))
[ -d $ERESSEA ] || echo "invalid or missing env variable ERESSEA ($ERESSEA)"
[ -z $1 ] && usage
[ -z $SOURCE ] && SOURCE=$ERESSEA/git
[ -d $SOURCE ] || abort "missing source directory: $SOURCE"
[ -d LIVE ] || LIVE=$ERESSEA/game-$game
[ -d TESTROOT ] || TESTROOT=$LIVE/test
while [ ! -z $1 ]; do
case "$1" in
"version")
version
;;
"build")
build
;;
"setup")
setup
;;
"run")
if [ $turn -eq 0 ]; then
[ -f $LIVE/turn ] || abort "missing turn file, and no turn specified"
let turn=$(cat $LIVE/turn)-1
fi
run
;;
"send")
shift
for faction in $* ; do
send $faction
done
cd $TESTROOT
if [ -e $factions ]; then
for faction in $(cat $factions) ; do
send $faction
done
fi
break
;;
esac
shift
done

View File

@ -228,7 +228,7 @@ void give_men(int n, unit * u, unit * u2, struct order *ord)
error = 312;
}
else if (u2 && u2->number != 0 && u_race(u2) != u_race(u)) {
log_warning("faction %s attempts to give %s to %s.\n", itoa36(u->faction->no), u_race(u)->_name[0], u_race(u2)->_name[1]);
log_debug("faction %s attempts to give %s to %s.\n", itoa36(u->faction->no), u_race(u)->_name[0], u_race(u2)->_name[0]);
error = 139;
}
else if (u2 != NULL && (get_racename(u2->attribs)

View File

@ -965,8 +965,6 @@ void demographics(void)
free(free_migrants);
free_migrants = m;
};
if (verbosity >= 1)
putchar('\n');
remove_empty_units();