Description:
[grader] +grade submission git-svn-id: http://theory.cpe.ku.ac.th/grader/judge/trunk/scripts@264 6386c4cd-e34a-4fa8-8920-d93eb39b512e
Commit status:
[Not Reviewed]
References:
Comments:
0 Commit comments 0 Inline Comments
Unresolved TODOs:
There are no unresolved TODOs
Add another comment

r61:3dcc15f24294 - - 3 files changed: 34 inserted, 0 deleted

@@ -158,32 +158,55
158 158 end
159 159 if task==nil
160 160 sleep(1)
161 161 end
162 162 end
163 163
164 164 when "prob"
165 165 engine = Grader::Engine.new
166 166 runner = Grader::Runner.new(engine, grader_proc)
167 167
168 168 grader_proc.report_active if grader_proc!=nil
169 169
170 170 ARGV.shift
171 171 ARGV.shift
172 172
173 173 ARGV.each do |prob_name|
174 174 prob = Problem.find_by_name(prob_name)
175 175 if prob==nil
176 176 puts "cannot find problem: #{prob_name}"
177 177 else
178 178 runner.grade_problem(prob)
179 179 end
180 180 end
181 181
182 + when "sub"
183 + engine = Grader::Engine.new
184 + runner = Grader::Runner.new(engine, grader_proc)
185 +
186 + grader_proc.report_active if grader_proc!=nil
187 +
188 + ARGV.shift
189 + ARGV.shift
190 +
191 + ARGV.each do |sub_id|
192 + puts "Grading #{sub_id}"
193 + begin
194 + submission = Submission.find(sub_id.to_i)
195 + rescue ActiveRecord::RecordNotFound
196 + puts "Record not found"
197 + submission = nil
198 + end
199 +
200 + if submission!=nil
201 + runner.grade_submission(submission)
202 + end
203 + end
204 +
182 205 else
183 206 display_manual
184 207 exit(0)
185 208 end
186 209
187 210 # report inactive
188 211 grader_proc.report_inactive if grader_proc!=nil
189 212
@@ -17,40 +17,45
17 17 @grader_process.report_active(task) if @grader_process!=nil
18 18
19 19 submission = Submission.find(task.submission_id)
20 20 @engine.grade(submission)
21 21 task.status_complete!
22 22 @grader_process.report_inactive(task) if @grader_process!=nil
23 23 end
24 24 return task
25 25 end
26 26
27 27 def grade_problem(problem)
28 28 users = User.find(:all)
29 29 users.each do |u|
30 30 puts "user: #{u.login}"
31 31 last_sub = Submission.find(:first,
32 32 :conditions => "user_id = #{u.id} and " +
33 33 "problem_id = #{problem.id}",
34 34 :order => 'submitted_at DESC')
35 35 if last_sub!=nil
36 36 @engine.grade(last_sub)
37 37 end
38 38 end
39 39 end
40 40
41 + def grade_submission(submission)
42 + puts "Submission: #{submission.id} by #{submission.user.full_name}"
43 + @engine.grade(submission)
44 + end
45 +
41 46 def grade_oldest_test_request
42 47 test_request = TestRequest.get_inqueue_and_change_status(Task::STATUS_GRADING)
43 48 if test_request!=nil
44 49 @grader_process.report_active(test_request) if @grader_process!=nil
45 50
46 51 @engine.grade(test_request)
47 52 test_request.status_complete!
48 53 @grader_process.report_inactive(test_request) if @grader_process!=nil
49 54 end
50 55 return test_request
51 56 end
52 57
53 58 end
54 59
55 60 end
56 61
@@ -82,51 +82,57
82 82 end
83 83 execute("#{problem_home}/script/compile #{language} #{source_file}", "Compilation error!")
84 84 compile_message = `cat compiler_message`
85 85 compile_message.strip!
86 86 execute("mv compiler_message #{test_result_dir}", "Cannot move the compiler message to #{test_result_dir}.")
87 87 if !FileTest.exist?("a.out")
88 88 log "Cannot compile the source code. See message in #{test_result_dir}/compile_message"
89 89 exit(127)
90 90 else
91 91 execute("mv a.out #{test_result_dir}", "Cannot move the compiled program to #{test_result_dir}")
92 92 system("rm -Rf #{sandbox_dir}/*")
93 93 end
94 94
95 95 require "#{problem_home}/script/test_dsl.rb"
96 96 load "#{problem_home}/test_cases/all_tests.cfg"
97 97 problem = Problem.get_instance
98 98
99 99 if problem.well_formed? == false
100 100 log "The problem specification is not well formed."
101 101 exit(127)
102 102 end
103 103
104 104 # Doing the testing.
105 105 (1..(problem.num_tests)).each do |test_num|
106 +
107 + $stdout.print "[#{test_num}]"
108 + $stdout.flush
109 +
106 110 log "Test number: #{test_num}"
107 111 execute("cp #{test_result_dir}/a.out #{sandbox_dir}", "Cannot copy the compiled program into #{sandbox_dir}")
108 112 begin
109 113 execute("#{problem_home}/script/run #{language} #{test_num}", "Error occured during execution of the run script")
110 114 rescue
111 115 # do nothing
112 116 end
113 117 execute("mkdir #{test_result_dir}/#{test_num}", "Cannot create directory #{test_result_dir}/#{test_num}")
114 118 execute("mv #{sandbox_dir}/result #{test_result_dir}/#{test_num}", "Cannot copy the result file into #{test_result_dir}/#{test_num}")
115 119 execute("mv #{sandbox_dir}/comment #{test_result_dir}/#{test_num}", "Cannot copy the comment file into #{test_result_dir}/#{test_num}")
116 120 execute("mv #{sandbox_dir}/output.txt #{test_result_dir}/#{test_num}", "Cannot copy the output file into #{test_result_dir}/#{test_num}")
117 121 execute("rm -Rf #{sandbox_dir}/*", "Cannot clear #{sandbox_dir}")
118 122 end
119 123
124 + $stdout.print "[done]\n"
125 +
120 126 # Grade
121 127 log
122 128 log "Grading..."
123 129 begin
124 130 Dir.chdir test_result_dir
125 131 rescue
126 132 log "ERROR: Cannot change directory to #{test_result_dir}."
127 133 exit(127)
128 134 end
129 135 execute("#{problem_home}/script/grade", "An error occured during grading!")
130 136
131 137 log
132 138 log "All done!"
You need to be logged in to leave comments. Login now