]> mj.ucw.cz Git - eval.git/commitdiff
Added ability to submit or check an arbitrary file.
authorMartin Mares <mj@ucw.cz>
Mon, 11 Jun 2007 10:08:11 +0000 (12:08 +0200)
committerMartin Mares <mj@ucw.cz>
Mon, 11 Jun 2007 10:08:11 +0000 (12:08 +0200)
TODO
bin/lib
public/check
public/submit
submit/contest

diff --git a/TODO b/TODO
index da76d309b1d152005d664685f1d63e3986ef1cbe..72b106dfb3ffd6105e15395f0d18492946742786 100644 (file)
--- a/TODO
+++ b/TODO
@@ -4,9 +4,8 @@ box: konfigurovatelny pristup k timerum a /proc/self/stat (pripadne /proc/self/f
 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
 ~~~~~~~~~~~
diff --git a/bin/lib b/bin/lib
index 588cf269b5c4ec98522cc59a5bfaf9f36e5ae487..faf6d038d830561453d4a53395beaae29a398f4f 100644 (file)
--- a/bin/lib
+++ b/bin/lib
@@ -104,7 +104,30 @@ EOF
 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."
@@ -122,14 +145,15 @@ function locate-source
 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}`
@@ -344,6 +368,10 @@ function public-setup
 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"
 }
index d5fecff46b3e1872cc429a1e8b70645286101693..152884d2aaf674806a742552a5c129c84910f407 100755 (executable)
@@ -1,14 +1,37 @@
 #!/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
 
@@ -23,16 +46,15 @@ function test-verdict
 }
 
 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
index fc7c08e9553324be44fbe5c8d56611e7050fbb74..886a1c89e7f87ad1d4c0d28a151000be79e9b66d 100755 (executable)
@@ -7,14 +7,36 @@ set -e
 . $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
 
@@ -29,7 +51,7 @@ if [ $TASK_TYPE == open-data ] ; then
        [ -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
@@ -37,7 +59,7 @@ if [ $TASK_TYPE == open-data ] ; then
        ) || 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
                (
@@ -62,7 +84,7 @@ fi
 
 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
index 17e1b3921a63d4a53880d2f8de23845dc1a849af..3f9e6c39af4936fe5035dbded64bfe43894d0950 100755 (executable)
@@ -429,7 +429,7 @@ sub run_checks() {
        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 {