diff --git a/grader b/grader --- a/grader +++ b/grader @@ -114,7 +114,7 @@ end options[:report] = (ARGV.delete('--report') != nil) - if options[:report] and (not ['prob','contest'].include? options[:mode]) + if options[:report] and (not ['prob','contest','autonew'].include? options[:mode]) puts "Report currently works only for 'prob' or 'contest' modes." exit(0) end @@ -129,6 +129,9 @@ @users = {} end + def after_save_hook(user, problem, grading_result) + end + def save(user, problem, grading_result) if not @problems.has_key? problem.id @problems[problem.id] = problem @@ -137,6 +140,8 @@ @users[user.id] = user end @results[[user.id, problem.id]] = grading_result + + after_save_hook(user, problem, grading_result) end def print_report_by_user @@ -202,11 +207,19 @@ def grader_autonew_loop(grader_proc, options) log "Grader: autonew" + if options[:report] + result_collector = ResultCollector.new + else + result_collector = nil + end + if options[:dry_run] puts "Running in dry mode" end - prob_reporter = Grader::SubmissionReporter.new(:dry_run => options[:dry_run]) + prob_reporter = Grader::SubmissionReporter.new(:dry_run => options[:dry_run], + :result_collector => result_collector) + engine = Grader::Engine.new(:reporter => prob_reporter) runner = Grader::Runner.new(engine, grader_proc)