Description:
git-svn-id: http://theory.cpe.ku.ac.th/grader/cli/trunk/scripts@20 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

r7:d40f897fb488 - - 3 files changed: 33 inserted, 8 deleted

@@ -18,46 +18,63
18 f.write(submission.source)
18 f.write(submission.source)
19 f.close
19 f.close
20 end
20 end
21
21
22 def call_judge(problem_home,language,problem_out_dir,fname)
22 def call_judge(problem_home,language,problem_out_dir,fname)
23 ENV['PROBLEM_HOME'] = problem_home
23 ENV['PROBLEM_HOME'] = problem_home
24 +
25 + puts problem_out_dir
24 Dir.chdir problem_out_dir
26 Dir.chdir problem_out_dir
25 cmd = "#{problem_home}/script/judge #{language} #{fname}"
27 cmd = "#{problem_home}/script/judge #{language} #{fname}"
26 # puts "CMD: #{cmd}"
28 # puts "CMD: #{cmd}"
27 system(cmd)
29 system(cmd)
28 end
30 end
29
31
30 def read_result(test_result_dir)
32 def read_result(test_result_dir)
31 cmp_msg_fname = "#{test_result_dir}/compiler_message"
33 cmp_msg_fname = "#{test_result_dir}/compiler_message"
32 - cmp_msg = File.open(cmp_msg_fname).read
34 + cmp_file = File.open(cmp_msg_fname)
35 + cmp_msg = cmp_file.read
36 + cmp_file.close
33
37
34 result_fname = "#{test_result_dir}/result"
38 result_fname = "#{test_result_dir}/result"
35 comment_fname = "#{test_result_dir}/comment"
39 comment_fname = "#{test_result_dir}/comment"
36 if FileTest.exist?(result_fname)
40 if FileTest.exist?(result_fname)
37 - result = File.open(result_fname).readline.to_i
41 + result_file = File.open(result_fname)
38 - comment = File.open(comment_fname).readline.chomp
42 + result = result_file.readline.to_i
43 + result_file.close
44 +
45 + comment_file = File.open(comment_fname)
46 + comment = comment_file.readline.chomp
47 + comment_file.close
48 +
39 return {:points => result,
49 return {:points => result,
40 :comment => comment,
50 :comment => comment,
41 :cmp_msg => cmp_msg}
51 :cmp_msg => cmp_msg}
42 else
52 else
43 return {:points => 0,
53 return {:points => 0,
44 :comment => 'compile error',
54 :comment => 'compile error',
45 :cmp_msg => cmp_msg}
55 :cmp_msg => cmp_msg}
46 end
56 end
47 end
57 end
48
58
49 def save_result(submission,result)
59 def save_result(submission,result)
60 + problem = Problem.find(submission.problem_id)
50 submission.graded_at = Time.now
61 submission.graded_at = Time.now
51 submission.points = result[:points]
62 submission.points = result[:points]
52 - submission.grader_comment = report_comment(result[:comment])
63 + if submission.points == problem.full_score
64 + submission.grader_comment = 'PASSED: ' + report_comment(result[:comment])
65 + else
66 + submission.grader_comment = 'FAILED: ' + report_comment(result[:comment])
67 + end
53 submission.compiler_message = result[:cmp_msg]
68 submission.compiler_message = result[:cmp_msg]
54 submission.save
69 submission.save
55 end
70 end
56
71
57 def grade(submission_id)
72 def grade(submission_id)
73 + current_dir = `pwd`.chomp
74 +
58 sub = Submission.find(submission_id)
75 sub = Submission.find(submission_id)
59 user = sub.user
76 user = sub.user
60 problem = sub.problem
77 problem = sub.problem
61
78
62 language = sub.language.name
79 language = sub.language.name
63 lang_ext = sub.language.ext
80 lang_ext = sub.language.ext
@@ -76,16 +93,18
76 problem_home = "#{PROBLEMS_DIR}/#{problem.name}"
93 problem_home = "#{PROBLEMS_DIR}/#{problem.name}"
77 source_name = "#{problem.name}.#{lang_ext}"
94 source_name = "#{problem.name}.#{lang_ext}"
78
95
79 save_source(sub,problem_out_dir,source_name)
96 save_source(sub,problem_out_dir,source_name)
80 call_judge(problem_home,language,problem_out_dir,source_name)
97 call_judge(problem_home,language,problem_out_dir,source_name)
81 save_result(sub,read_result("#{problem_out_dir}/test-result"))
98 save_result(sub,read_result("#{problem_out_dir}/test-result"))
99 +
100 + Dir.chdir(current_dir)
82 end
101 end
83
102
84 def stop_grader
103 def stop_grader
85 - File.open(File.dirname(__FILE__) + '/stop','w')
104 + File.open(File.dirname(__FILE__) + '/stop','w').close
86 end
105 end
87
106
88 def check_stopfile
107 def check_stopfile
89 FileTest.exist?(File.dirname(__FILE__) + '/stop')
108 FileTest.exist?(File.dirname(__FILE__) + '/stop')
90 end
109 end
91
110
@@ -118,14 +137,12
118 #main program
137 #main program
119 talk 'Reading rails environment'
138 talk 'Reading rails environment'
120
139
121 RAILS_ENV = 'development'
140 RAILS_ENV = 'development'
122 require RAILS_APP_DIR + '/config/environment'
141 require RAILS_APP_DIR + '/config/environment'
123
142
124 - current_dir = `pwd`
125 -
126 talk 'Grader queue'
143 talk 'Grader queue'
127 while true
144 while true
128 if check_stopfile # created by calling grader stop
145 if check_stopfile # created by calling grader stop
129 clear_stopfile
146 clear_stopfile
130 puts "stopped"
147 puts "stopped"
131 exit(0)
148 exit(0)
@@ -35,13 +35,17
35 exit(127)
35 exit(127)
36 end
36 end
37
37
38 result_file = File.new(result_file_name, "r")
38 result_file = File.new(result_file_name, "r")
39 result_file_lines = result_file.readlines
39 result_file_lines = result_file.readlines
40 run_score = run_score + result_file_lines[1].to_i
40 run_score = run_score + result_file_lines[1].to_i
41 - run_comment += char_comment(result_file_lines[0])
41 + # run_comment += char_comment(result_file_lines[0])
42 + result_file_lines.each do |l|
43 + run_comment += l
44 + end
45 + run_comment += "----\n"
42 result_file.close
46 result_file.close
43 end
47 end
44
48
45 run_result_file = File.new("result-#{k}", "w")
49 run_result_file = File.new("result-#{k}", "w")
46 run_result_file.write run_score
50 run_result_file.write run_score
47 run_result_file.write "\n"
51 run_result_file.write "\n"
@@ -69,12 +69,16
69 result_file.write "\n"
69 result_file.write "\n"
70 result_file.close
70 result_file.close
71 `rm run_result`
71 `rm run_result`
72 `rm output.txt`
72 `rm output.txt`
73
73
74 comment_file.write comment
74 comment_file.write comment
75 + comment_file.write "--run-result--\n"
76 + run_result.each do |l|
77 + comment_file.write l
78 + end
75 comment_file.close
79 comment_file.close
76
80
77 puts
81 puts
78 puts "Done!"
82 puts "Done!"
79 exit(0)
83 exit(0)
80 }
84 }
You need to be logged in to leave comments. Login now