Description:
removed many 'system' invokations
Commit status:
[Not Reviewed]
References:
Comments:
0 Commit comments 0 Inline Comments
Unresolved TODOs:
There are no unresolved TODOs
Add another comment

r101:65a501bec36b - - 4 files changed: 84 inserted, 41 deleted

@@ -1,5 +1,4
1 require 'fileutils'
1 require 'fileutils'
2 - require 'ftools'
3 require File.join(File.dirname(__FILE__),'dir_init')
2 require File.join(File.dirname(__FILE__),'dir_init')
4
3
5 module Grader
4 module Grader
@@ -139,7 +138,7
139 fname = File.basename(s)
138 fname = File.basename(s)
140 if !FileTest.exist?("#{script_dir}/#{fname}")
139 if !FileTest.exist?("#{script_dir}/#{fname}")
141 copied << fname
140 copied << fname
142 - system("cp #{s} #{script_dir}")
141 + FileUtils.cp(s, "#{script_dir}")
143 end
142 end
144 end
143 end
145
144
@@ -174,7 +173,7
174
173
175 def clear_script(log,problem_home)
174 def clear_script(log,problem_home)
176 log.each do |s|
175 log.each do |s|
177 - system("rm #{problem_home}/script/#{s}")
176 + FileUtils.rm("#{problem_home}/script/#{s}")
178 end
177 end
179 end
178 end
180
179
@@ -5,6 +5,23
5
5
6 module Grader
6 module Grader
7
7
8 + def self.link_or_copy(src, des)
9 + begin
10 + FileUtils.ln_s(src, des)
11 + rescue
12 + FileUtils.cp(src,des)
13 + end
14 + end
15 +
16 + def self.call_and_log(error_message)
17 + begin
18 + yield
19 + rescue
20 + msg = "ERROR: #{error_message}"
21 + raise msg
22 + end
23 + end
24 +
8 #
25 #
9 # A TestRequestRoomMaker is a helper object for Engine
26 # A TestRequestRoomMaker is a helper object for Engine
10 # - finds grading room: in user_result_dir/(user)/test_request/ ...
27 # - finds grading room: in user_result_dir/(user)/test_request/ ...
@@ -28,8 +45,8
28 # to the sandbox directory later. The run script should do it.
45 # to the sandbox directory later. The run script should do it.
29 #
46 #
30 if FileTest.exists?("#{test_request.input_file_name}.files")
47 if FileTest.exists?("#{test_request.input_file_name}.files")
31 - cmd = "cp #{test_request.input_file_name}.files/* #{grading_room}"
48 + FileUtils.cp_r("#{test_request.input_file_name}.files/.",
32 - system(cmd)
49 + "#{grading_room}")
33 end
50 end
34
51
35 grading_room
52 grading_room
@@ -82,11 +99,12
82 end
99 end
83
100
84 def copy_problem_template(template_dir,problem_home)
101 def copy_problem_template(template_dir,problem_home)
85 - cmd = "cp -R #{template_dir}/* #{problem_home}"
102 + Grader::call_and_log("Test Request: cannot copy problem template") {
86 - system_and_raise_when_fail(cmd,"Test Request: cannot copy problem template")
103 + FileUtils.cp_r("#{template_dir}/.","#{problem_home}")
104 + }
87 end
105 end
88 -
106 +
89 - def link_input_file(test_request,problem_home)
107 + def link_input_file(test_request, problem_home)
90 input_fname = "#{test_request.input_file_name}"
108 input_fname = "#{test_request.input_file_name}"
91 if !File.exists?(input_fname)
109 if !File.exists?(input_fname)
92 raise "Test Request: input file not found."
110 raise "Test Request: input file not found."
@@ -97,20 +115,14
97 FileUtils.rm([input_fname_problem_home], :force => true)
115 FileUtils.rm([input_fname_problem_home], :force => true)
98 end
116 end
99
117
100 - cmd = "ln -s #{input_fname} #{input_fname_problem_home}"
118 + Grader::link_or_copy("#{input_fname}", "#{input_fname_problem_home}")
101 - system_and_raise_when_fail(cmd,"Test Request: cannot link input file")
102 end
119 end
103
120
104 def remove_data_files(problem_home)
121 def remove_data_files(problem_home)
105 if File.exists?("#{problem_home}/test_cases/1/input-1.txt")
122 if File.exists?("#{problem_home}/test_cases/1/input-1.txt")
106 - cmd = "rm #{problem_home}/test_cases/1/*"
123 + Grader::call_and_log("Test Request: cannot remove data files") {
107 - system_and_raise_when_fail(cmd,"Test Request: cannot remove data files")
124 + FileUtils.rm Dir.glob("#{problem_home}/test_cases/1/*")
108 - end
125 + }
109 - end
110 -
111 - def system_and_raise_when_fail(cmd,msg)
112 - if !system(cmd)
113 - raise msg
114 end
126 end
115 end
127 end
116
128
@@ -221,10 +233,7
221 target_file_name = random_output_file_name(test_request.user,
233 target_file_name = random_output_file_name(test_request.user,
222 test_request.problem)
234 test_request.problem)
223 FileUtils.mkdir_p(File.dirname(target_file_name))
235 FileUtils.mkdir_p(File.dirname(target_file_name))
224 - cmd = "ln -s #{fname} #{target_file_name}"
236 + Grader::link_or_copy("#{fname}", "#{target_file_name}")
225 - if !system(cmd)
226 - raise "TestRequestReporter: cannot move output file"
227 - end
228 return target_file_name
237 return target_file_name
229 end
238 end
230
239
@@ -1,5 +1,7
1 #!/usr/bin/ruby
1 #!/usr/bin/ruby
2
2
3 + require 'fileutils'
4 +
3 def log(str='')
5 def log(str='')
4 if ENV['TALKATIVE']!=nil
6 if ENV['TALKATIVE']!=nil
5 puts str
7 puts str
@@ -22,6 +24,21
22 end
24 end
23 end
25 end
24
26
27 + def call_and_log(error_message)
28 + begin
29 + yield
30 + rescue
31 + msg = "ERROR: #{error_message}"
32 + log msg
33 + raise msg
34 + end
35 + end
36 +
37 + def clear_and_create_empty_dir(dir)
38 + FileUtils.rm_rf(dir, :secure => true)
39 + call_and_log("Cannot make directory #{dir}.") { FileUtils.mkdir(dir) }
40 + end
41 +
25 # ARGV[0] --- language
42 # ARGV[0] --- language
26 # ARGV[1] --- program source file
43 # ARGV[1] --- program source file
27 # ARGV[2] --- test result directory
44 # ARGV[2] --- test result directory
@@ -57,9 +74,9
57 else
74 else
58 test_result_dir = "#{current_dir}/test-result"
75 test_result_dir = "#{current_dir}/test-result"
59 end
76 end
77 +
60 log "Test result directory: #{test_result_dir}"
78 log "Test result directory: #{test_result_dir}"
61 - system("rm -Rf #{test_result_dir}")
79 + clear_and_create_empty_dir(test_result_dir)
62 - execute("mkdir #{test_result_dir}", "Cannot make directory #{test_result_dir}.")
63
80
64 if ARGV.length >= 4
81 if ARGV.length >= 4
65 sandbox_dir = ARGV[3]
82 sandbox_dir = ARGV[3]
@@ -67,13 +84,14
67 sandbox_dir = "#{current_dir}/sandbox"
84 sandbox_dir = "#{current_dir}/sandbox"
68 end
85 end
69 log "Sandbox directory: #{sandbox_dir}"
86 log "Sandbox directory: #{sandbox_dir}"
70 - system("rm -Rf #{sandbox_dir}")
87 + clear_and_create_empty_dir(sandbox_dir)
71 - execute("mkdir #{sandbox_dir}", "Cannot make directory #{sandbox_dir}")
72
88
73 # Compile
89 # Compile
74 log
90 log
75 log "Compiling..."
91 log "Compiling..."
76 - execute("cp #{source_file} #{sandbox_dir}", "Cannot copy the source file to #{sandbox_dir}")
92 + call_and_log("Cannot copy the source file to #{sandbox_dir}") {
93 + FileUtils.cp(source_file, sandbox_dir)
94 + }
77 begin
95 begin
78 Dir.chdir sandbox_dir
96 Dir.chdir sandbox_dir
79 rescue
97 rescue
@@ -83,13 +101,17
83 execute("#{problem_home}/script/compile #{language} #{source_file}", "Compilation error!")
101 execute("#{problem_home}/script/compile #{language} #{source_file}", "Compilation error!")
84 compile_message = `cat compiler_message`
102 compile_message = `cat compiler_message`
85 compile_message.strip!
103 compile_message.strip!
86 - execute("mv compiler_message #{test_result_dir}", "Cannot move the compiler message to #{test_result_dir}.")
104 + call_and_log("Cannot move the compiler message to #{test_result_dir}.") {
105 + FileUtils.mv("compiler_message", test_result_dir)
106 + }
87 if !FileTest.exist?("a.out")
107 if !FileTest.exist?("a.out")
88 log "Cannot compile the source code. See message in #{test_result_dir}/compile_message"
108 log "Cannot compile the source code. See message in #{test_result_dir}/compile_message"
89 exit(127)
109 exit(127)
90 else
110 else
91 - execute("mv a.out #{test_result_dir}", "Cannot move the compiled program to #{test_result_dir}")
111 + call_and_log("Cannot move the compiled program to #{test_result_dir}") {
92 - system("rm -Rf #{sandbox_dir}/*")
112 + FileUtils.mv("a.out",test_result_dir)
113 + }
114 + FileUtils.rm_rf("#{sandbox_dir}/.")
93 end
115 end
94
116
95 require "#{problem_home}/script/test_dsl.rb"
117 require "#{problem_home}/script/test_dsl.rb"
@@ -108,17 +130,29
108 $stdout.flush
130 $stdout.flush
109
131
110 log "Test number: #{test_num}"
132 log "Test number: #{test_num}"
111 - execute("cp #{test_result_dir}/a.out #{sandbox_dir}", "Cannot copy the compiled program into #{sandbox_dir}")
133 + call_and_log("Cannot copy the compiled program into #{sandbox_dir}") {
134 + FileUtils.cp("#{test_result_dir}/a.out", sandbox_dir)
135 + }
112 begin
136 begin
113 execute("#{problem_home}/script/run #{language} #{test_num}", "Error occured during execution of the run script")
137 execute("#{problem_home}/script/run #{language} #{test_num}", "Error occured during execution of the run script")
114 rescue
138 rescue
115 # do nothing
139 # do nothing
116 end
140 end
117 - execute("mkdir #{test_result_dir}/#{test_num}", "Cannot create directory #{test_result_dir}/#{test_num}")
141 + call_and_log("Cannot create directory #{test_result_dir}/#{test_num}") {
118 - execute("mv #{sandbox_dir}/result #{test_result_dir}/#{test_num}", "Cannot copy the result file into #{test_result_dir}/#{test_num}")
142 + FileUtils.mkdir "#{test_result_dir}/#{test_num}"
119 - execute("mv #{sandbox_dir}/comment #{test_result_dir}/#{test_num}", "Cannot copy the comment file into #{test_result_dir}/#{test_num}")
143 + }
120 - execute("mv #{sandbox_dir}/output.txt #{test_result_dir}/#{test_num}", "Cannot copy the output file into #{test_result_dir}/#{test_num}")
144 + call_and_log("Cannot copy the result file into #{test_result_dir}/#{test_num}") {
121 - execute("rm -Rf #{sandbox_dir}/*", "Cannot clear #{sandbox_dir}")
145 + FileUtils.mv "#{sandbox_dir}/result", "#{test_result_dir}/#{test_num}"
146 + }
147 + call_and_log("Cannot copy the comment file into #{test_result_dir}/#{test_num}") {
148 + FileUtils.mv "#{sandbox_dir}/comment", "#{test_result_dir}/#{test_num}"
149 + }
150 + call_and_log("Cannot copy the output file into #{test_result_dir}/#{test_num}") {
151 + FileUtils.mv "#{sandbox_dir}/output.txt", "#{test_result_dir}/#{test_num}"
152 + }
153 + call_and_log("Cannot clear #{sandbox_dir}") {
154 + FileUtils.rm_rf(Dir.glob("#{sandbox_dir}/*"), :secure => true)
155 + }
122 end
156 end
123
157
124 $stdout.print "[done]\n"
158 $stdout.print "[done]\n"
@@ -1,17 +1,18
1 + require 'fileutils'
2 +
1 module GraderEngineHelperMethods
3 module GraderEngineHelperMethods
2
4
3 def clear_sandbox
5 def clear_sandbox
4 config = Grader::Configuration.get_instance
6 config = Grader::Configuration.get_instance
5 - clear_cmd = "rm -rf #{config.test_sandbox_dir}/*"
7 + FileUtils.rm_rf(Dir.glob("#{config.test_sandbox_dir}/*"),
6 - system(clear_cmd)
8 + :secure => true)
7 end
9 end
8
10
9 def init_sandbox
11 def init_sandbox
10 config = Grader::Configuration.get_instance
12 config = Grader::Configuration.get_instance
11 clear_sandbox
13 clear_sandbox
12 FileUtils.mkdir_p config.user_result_dir
14 FileUtils.mkdir_p config.user_result_dir
13 - cp_cmd = "cp -R #{config.test_data_dir}/ev #{config.test_sandbox_dir}"
15 + FileUtils.cp_r("#{config.test_data_dir}/ev", "#{config.test_sandbox_dir}")
14 - system(cp_cmd)
15 end
16 end
16
17
17 def create_submission_from_file(id, user, problem,
18 def create_submission_from_file(id, user, problem,
You need to be logged in to leave comments. Login now