]> mj.ucw.cz Git - moe.git/blob - mop/public/submit.sh
Merge branch 'layout'
[moe.git] / mop / public / submit.sh
1 #!/bin/bash
2 # The Evaluator -- Public Submit Script
3 # (c) 2001--2007 Martin Mares <mj@ucw.cz>
4
5 set -e
6 [ -n "$MO_ROOT" -a -d "$MO_ROOT" ] || { echo >&2 "MO_ROOT not set, giving up." ; exit 1 ; }
7 pushd $MO_ROOT >/dev/null
8 . lib/libeval.sh
9 . cf/mop
10 popd >/dev/null
11
12 function usage
13 {
14         die "Usage: submit [--force] [-s <source-file>] <problem> [<test-number>]"
15 }
16
17 FORCE=0
18 if [ "$1" = --force ] ; then
19         FORCE=1
20         shift
21 fi
22 [ -n "$1" -a "$1" != "--help" ] || usage
23 SRCFILE=
24 while getopts "s:" opt ; do
25         case $opt in
26                 s)      SRCFILE="$OPTARG"
27                         ;;
28                 *)      usage
29                         ;;
30         esac
31 done
32 shift $(($OPTIND-1))
33 [ -n "$1" ] || usage
34 PROBLEM=$1
35 PART=
36 shift
37 if [ -n "$1" ] ; then
38         PART="$1"
39         shift
40 fi
41 [ -z "$1" ] || usage
42 public-setup
43 . $PDIR/config
44
45 function test-verdict
46 {
47         pend "$2"
48         [ $1 == 0 ] && exit 1 || exit 0
49 }
50
51 FAILED=0
52 if [ $TASK_TYPE == open-data ] ; then
53         [ -n "$PART" ] || die "You need to specify test number for open data problems."
54         TEST=$PART
55         pstart "Test case $TEST: "
56         open-locate "$SRCFILE"
57         (
58                 [ -f $PDIR/$TEST.config ] && . $PDIR/$TEST.config
59                 try-ln "$SDIR/$SRCN" $TDIR/$TEST.out
60                 syntax-check
61                 test-result $POINTS_PER_TEST OK
62         ) || FAILED=1
63 else
64         [ -z "$PART" ] || die "Test number should be given only for open data problems."
65         locate-source "$SRCFILE"
66         compile
67         for TEST in $SAMPLE_TESTS ; do
68                 (
69                 pstart "Checking on sample input $TEST: "
70                 [ -f $PDIR/$TEST.config ] && . $PDIR/$TEST.config
71                 test-run
72                 syntax-check
73                 output-check
74                 die "How could I get there? It's a buuuuug!"
75                 ) || FAILED=$(($FAILED+1))
76         done
77 fi
78
79 if [ $FAILED != 0 ] ; then
80         if [ $FORCE != 0 ] ; then
81                 echo "Submit forced."
82                 pend "TESTS FAILED, but --force given, so submitting anyway."
83         else
84                 pend "TESTS FAILED. Nothing has been submitted!"
85                 pend "Use submit --force if you really want to submit an obviously WRONG solution."
86                 exit 1
87         fi
88 fi
89
90 if [ -n "$REMOTE_SUBMIT" ] ; then
91         pstart "Submitting to the server... "
92         $MO_ROOT/bin/remote-submit $PROBLEM $PART "$SDIR/$SRCN"
93         pend "OK"
94         exit 0
95 fi
96
97 pstart "Submitting... "
98 mkdir -p ~/.submit
99 if [ $TASK_TYPE == open-data ] ; then
100         mkdir -p ~/.submit/$PROBLEM
101         cp "$SDIR/$SRCN" ~/.submit/$PROBLEM/$PART.out
102 else
103         rm -rf ~/.submit/$PROBLEM
104         mkdir -p ~/.submit/$PROBLEM
105         cp "$SDIR/$SRCN" ~/.submit/$PROBLEM/
106 fi
107 pend "OK"