score: better formatting of the score table
interactive tasks: solve deadlocks?
interactive tasks: logging of messages
-
-!!!!!!!!! copy all users
-!!!!!!!!! contest: call check with the right filename and don't let it guess
+rename problem to task
+submit, check: unify command-line arguments
Environment
~~~~~~~~~~~
function locate-source
{
pstart "Finding source... "
- SBASE=${1:-$PROBLEM}
+ if [ -n "$1" ] ; then
+ SRCBASE=$(echo $1 | sed 's/\.\([^.]\+\)//')
+ SRCEXT=$(echo $1 | sed 's/.*\.\([^.]\+\)/\1/')
+ if [ -n "$SRCEXT" ] ; then
+ # Full name given, so just check the extension and existence
+ SRCN=$1
+ if [ ${SRCN:0:1} == / ] ; then
+ SRCN=${SRCN:1}
+ SDIR=
+ fi
+ [ -f "$SDIR/$SRCN" ] || die "Cannot find source file $SDIR/$SRCN"
+ SRCEXT_OK=
+ for a in $EXTENSIONS ; do
+ if [ $a == $SRCEXT ] ; then
+ pend $SDIR/$SRCN
+ echo "Explicitly set source file: $SDIR/$SRCN"
+ return 0
+ fi
+ done
+ die "Unknown extension .$SRCEXT"
+ fi
+ else
+ SBASE=$PROBLEM
+ fi
for a in $EXTENSIONS ; do
if [ -f $SDIR/$SBASE.$a ] ; then
[ -z "$SRCN" ] || die "Multiple source files found: $SDIR/$PROBLEM.$a and $SDIR/$SRCN. Please fix."
function compile
{
pstart "Compiling... "
- cp -a $SDIR/$SRCN $TDIR/$SRCN
+ # Beware, the original SRCN can be a strange user-supplied name
+ SRC=$PROBLEM.$SRCEXT
+ cp -a $SDIR/$SRCN $TDIR/$SRC
if [ -n "$COMP_EXTRAS" ] ; then
echo "Extras: $COMP_EXTRAS"
for a in $COMP_EXTRAS ; do cp $PDIR/$a $TDIR/ ; done
fi
box-clean
- for a in $SRCN $COMP_EXTRAS ; do cp $TDIR/$a $BOXDIR/ ; done
- SRC=$SRCN
+ for a in $SRC $COMP_EXTRAS ; do cp $TDIR/$a $BOXDIR/ ; done
EXE=$PROBLEM
CCMD=COMP_$SRCEXT
CCMD=`eval echo ${!CCMD}`
function open-locate
{
[ -f $PDIR/$TEST.in ] || die "Unknown test $TEST"
- SRCN=$SDIR/$PROBLEM$TEST.out
+ if [ -n "$1" ] ; then
+ SRCN=$1
+ else
+ SRCN=$SDIR/$PROBLEM$TEST.out
+ fi
[ -f $SRCN ] || fatal "Output file $SRCN not found"
}
#!/bin/bash
# The Evaluator -- Public Checking Script
-# (c) 2001--2004 Martin Mares <mj@ucw.cz>
+# (c) 2001--2007 Martin Mares <mj@ucw.cz>
set -e
[ -n "$MO_ROOT" -a -d "$MO_ROOT" ] || { echo >&2 "MO_ROOT not set, giving up." ; exit 1 ; }
. $MO_ROOT/bin/lib
. $MO_ROOT/config
-[ -n "$1" ] || die "Usage: check <problem> [<test-number>]"
+function usage
+{
+ die "Usage: check [-s <source-file>] <problem> [<test-number>]"
+}
+
+SRCFILE=
+while getopts "s:" opt ; do
+ case $opt in
+ s) SRCFILE="$OPTARG"
+ ;;
+ *) usage
+ ;;
+ esac
+done
+shift $(($OPTIND-1))
+[ -n "$1" ] || usage
PROBLEM=$1
+TEST=
+shift
+if [ -n "$1" ] ; then
+ TEST="$1"
+ shift
+fi
+[ -z "$1" ] || usage
+
public-setup
. $PDIR/config
}
if [ $TASK_TYPE == open-data ] ; then
- [ -n "$2" ] || die "You need to specify test number for open data problems."
- TEST=$2
+ [ -n "$TEST" ] || die "You need to specify test number for open data problems."
pstart "Checking $TEST: "
- open-locate
+ open-locate $SRCFILE
ln $SRCN $TDIR/$TEST.out
syntax-check
test-result 1 OK
else
- [ -z "$2" ] || die "Test number should be given only for open data problems."
- locate-source
+ [ -z "$TEST" ] || die "Test number should be given only for open data problems."
+ locate-source $SRCFILE
compile
RC=0
for TEST in $SAMPLE_TESTS ; do
. $MO_ROOT/bin/lib
. $MO_ROOT/config
+function usage
+{
+ die "Usage: check [--force] [-s <source-file>] <problem> [<test-number>]"
+}
+
FORCE=0
if [ "$1" = --force ] ; then
FORCE=1
shift
fi
-[ -n "$1" -o "$1" = "--help" ] || die "Usage: submit [--force] <problem> [<test-number>]"
+[ -n "$1" -a "$1" != "--help" ] || usage
+SRCFILE=
+while getopts "s:" opt ; do
+ case $opt in
+ s) SRCFILE="$OPTARG"
+ ;;
+ *) usage
+ ;;
+ esac
+done
+shift $(($OPTIND-1))
+[ -n "$1" ] || usage
PROBLEM=$1
-PART=$2
+PART=
+shift
+if [ -n "$1" ] ; then
+ PART="$1"
+ shift
+fi
+[ -z "$1" ] || usage
public-setup
. $PDIR/config
[ -n "$PART" ] || die "You need to specify test number for open data problems."
TEST=$PART
pstart "Test case $TEST: "
- open-locate
+ open-locate $SRCFILE
(
ln $SRCN $TDIR/$TEST.out
syntax-check
) || FAILED=1
else
[ -z "$PART" ] || die "Test number should be given only for open data problems."
- locate-source
+ locate-source $SRCFILE
compile
for TEST in $SAMPLE_TESTS ; do
(
if [ -n "$REMOTE_SUBMIT" ] ; then
pstart "Submitting to the server... "
- $MO_ROOT/bin/remote-submit $PROBLEM $PART $SRCN
+ $MO_ROOT/bin/remote-submit $PROBLEM $PART $SDIR/$SRCN
pend "OK"
exit 0
fi
my $root = $conn->{"root"};
my ($task, $part) = split /\//, $selected_task;
defined $part or $part = "";
- my $verdict = `$root/bin/check $task $part 2>&1`;
+ my $verdict = `$root/bin/check -s "$submit_filename" $task $part 2>&1`;
if ($?) {
checks_failed($verdict);
} else {