]> mj.ucw.cz Git - moe.git/blob - submit/remote-submit.pl
Isolate: Add informative error message for bad command-line usage.
[moe.git] / submit / remote-submit.pl
1 #!/usr/bin/perl
2
3 use strict;
4 use warnings;
5
6 BEGIN {
7         defined $ENV{"MO_ROOT"} or die "Please set MO_ROOT to the contest root directory first.\n";
8 }
9 use lib $ENV{"MO_ROOT"} . "/submit";
10 use lib $ENV{"MO_ROOT"} . "/lib/perl5";
11
12 use MO::Submit;
13 use Sherlock::Object;
14 use File::stat;
15
16 @ARGV == 2 || @ARGV == 3 or die "Usage: remote-submit <task> [<part>] <filename>\n";
17 my $task = $ARGV[0];
18 my $part = $task;
19 if (@ARGV == 3) {
20         $part = $ARGV[1];
21         shift @ARGV;
22 }
23 my $file = $ARGV[1];
24 my ($ext) = ($file =~ /\.([^.]+)$/) or die "Unable to determine filename extension\n";
25
26 open F, $file or die "Unable to open $file: $!\n";
27 my $s = stat(*F) or die;
28 my $size = $s->size;
29
30 my $conn = new MO::Submit;
31
32 my $he = $conn->write_history($task, $part, $ext, $file);
33 if (defined $he) { die "$he\n"; }
34
35 $conn->connect or die $conn->{"error"} . "\n";
36
37 sub or_die($) {
38         my $r = shift @_;
39         if (!defined $r) { die $conn->{"error"} . "\n"; }
40         my $err = $r->get("-");
41         if ($err) { die "$err\n"; }
42 }
43
44 my $r = new Sherlock::Object("!" => "SUBMIT", "T" => $task, "P" => $part, "X" => $ext, "S" => $size);
45 $r = $conn->request($r);
46 or_die($r);
47
48 $r = $conn->send_file(\*F, $size);
49 or_die($r);
50
51 print "Submitted OK.\n";
52
53 $conn->disconnect;
54 close F;