aboutsummaryrefslogtreecommitdiff
path: root/tools/boca-submit-run
blob: d67c83ff5555f38e8da58da30bc3a12d75204daf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#!/bin/bash

[ -x /etc/icpc/bocaserver.sh ] && . /etc/icpc/bocaserver.sh
if [ "$BOCASERVER" != "" ]; then
	if [ "$BOCASERVERS" == "" ]; then
		BOCASERVERS=$BOCASERVER
	else
		BOCASERVERS="$BOCASERVERS;$BOCASERVER"
	fi
fi

if [ "$BOCASERVERS" == "" ]; then
	echo "This computer has no configured BOCA server. Ask an admin to update /etc/icpc/bocaserver.sh (usually resetting everything is an easy way)"
	exit 1
fi


for i in uuencode wget tr perl sha256sum cut; do
  p=`which $i`
  if [ -x "$p" ]; then
    echo -n ""
  else
    echo "$i" not found
    exit 1
  fi
done
temp=/tmp/.temp.`date +%s%N`.txt

if [ "$1" == "" ]; then
	echo "Usage: $0 USER PASSWORD PROBLEM LANGUAGE FILE"
	echo ""
	echo "where USER is your username"
	echo "PASSWORD is your password"
	echo "FILE is your submission file"
	echo "PROBLEM and LANGUAGE are according to defined in BOCA"
	echo "==>>You can check at your BOCA interface to be sure<<=="
	echo "PROBLEM is usually a single letter e.g. A or B or C etc"
	echo "LANGUAGE is usually one of { c cpp cc java }"
	echo "==>>You can check at your BOCA interface to be sure<<=="
	exit 1
fi

runaux=`which boca-submit-run-aux`
if [ "$runaux" == "" ]; then
	runaux=/usr/bin/boca-submit-run-aux
fi
runroot=`which boca-submit-run-root-wrapper`
if [ "$runroot" == "" ]; then
	runroot=/usr/bin/boca-submit-run-root-wrapper
fi

if [ -r "$5" ]; then
	nom=`echo -n "$5" | perl -MURI::Escape -lne 'print uri_escape($_)'`
	for BOCASERVER in `echo $BOCASERVERS | tr ';' ' '`; do
		echo "BOCASERVER=$BOCASERVER" > $temp
		echo "user=$1" >> $temp
		echo "pass=$2" >> $temp
		echo "problem=$3" >> $temp
		echo "language=$4" >> $temp
		echo "name=`basename $5`" >> $temp
		uniq=`sha256sum "$5" | cut -f1 -d' '`
		echo "uniq=$uniq" >> $temp
		echo -en "data=\"" >> $temp
		uuencode -m zzzzzzzzzz < "$5" | grep -v "begin-base64.*zzzzzzzzzz" >> $temp
		echo -e "\"" >> $temp
		$runaux $temp
		if [ "$?" == "2" ]; then
			echo "$BOCASERVER: time-out - this will automatically retry soon, you should not worry"
			$runroot "$BOCASERVER" "$1" "$2" "$3" "$4" "`basename $5`" "$5"
		fi
		[ -f "$temp" ] && rm -f $temp
	done
else
	echo "file $1 not found/readable"
fi