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