Description:
fix reimport bug when creating existing dirs
Commit status:
[Not Reviewed]
References:
Comments:
0 Commit comments 0 Inline Comments
Unresolved TODOs:
There are no unresolved TODOs
Add another comment

r100:384e1befe70e - - 1 file changed: 18 inserted, 13 deleted

@@ -1,61 +1,60
1 1 #!/usr/bin/ruby
2 2
3 3 require 'erb'
4 - require 'ftools'
5 4 require 'fileutils'
6 5 require File.join(File.dirname(__FILE__),'lib/import_helper')
7 6
8 7 JUDGE_ENVIRONMENTS = [:grading, :exam]
9 8 ENV_INFO = {
10 9 :grading => {
11 10 :ev_dir => 'ev',
12 11 :raw_prefix => '',
13 12 },
14 13 :exam => {
15 14 :ev_dir => 'ev-exam',
16 15 :raw_prefix => 'ex.',
17 16 }
18 17 }
19 18
20 19 def input_filename(dir,i)
21 20 "#{dir}/input-#{i}.txt"
22 21 end
23 22
24 23 def answer_filename(dir,i)
25 24 "#{dir}/answer-#{i}.txt"
26 25 end
27 26
28 27 def build_testrun_info_from_dir(num_testruns, importing_test_dir, raw_prefix='')
29 28 filenames = Dir["#{importing_test_dir}/#{raw_prefix}*.in"].collect do |filename|
30 29 File.basename((/(.*)\.in/.match(filename))[1])
31 30 end
32 31 build_testrun_info(num_testruns,filenames,raw_prefix)
33 32 end
34 33
35 34 def copy_testcase(importing_test_dir,fname,dir,i)
36 - File.copy("#{importing_test_dir}/#{fname}.in", "#{input_filename(dir,i)}")
37 - File.copy("#{importing_test_dir}/#{fname}.sol", "#{answer_filename(dir,i)}")
35 + FileUtils.cp("#{importing_test_dir}/#{fname}.in", "#{input_filename(dir,i)}")
36 + FileUtils.cp("#{importing_test_dir}/#{fname}.sol", "#{answer_filename(dir,i)}")
38 37 end
39 38
40 39 def process_options(options)
41 40 i = 3
42 41 while i<ARGV.length
43 42 if ARGV[i]=='-t'
44 43 options[:time_limit] = ARGV[i+1].to_f if ARGV.length>i+1
45 44 i += 1
46 45 end
47 46 if ARGV[i]=='-m'
48 47 options[:mem_limit] = ARGV[i+1].to_i if ARGV.length>i+1
49 48 i += 1
50 49 end
51 50 i += 1
52 51 end
53 52 end
54 53
55 54 def print_usage
56 55 puts "using: import_problem_new name dir check [options]
57 56
58 57 where: name = problem_name (put '-' (dash) to use dir name)
59 58 dir = importing testcase directory
60 59 check = check script, which can be
61 60 'integer', 'text' (for standard script),
@@ -80,137 +79,143
80 79
81 80 puts"
82 81 For each environment, the script
83 82 * creates a directory for a problem in ev dir of that environment,
84 83 * copies testdata in the old format and create standard testcase config file
85 84 * copies a check script for grading
86 85 * creates a test_request template in the ev dir + '/test_request'
87 86
88 87 For wrapped checked script see comment in templates/check_wrapper for
89 88 information."
90 89 end
91 90
92 91 def count_testruns(testcase_dir, raw_prefix)
93 92 n = 0
94 93 begin
95 94 # check for test case n+1
96 95 if ((Dir["#{testcase_dir}/#{raw_prefix}#{n+1}.in"].length==0) and
97 96 (Dir["#{testcase_dir}/#{raw_prefix}#{n+1}[a-z].in"].length==0))
98 97 return n
99 98 end
100 99 n += 1
101 100 end while true
102 101 end
103 102
103 + def create_dir_if_not_exists(dir)
104 + if ! FileTest.exists? dir
105 + FileUtils.mkdir(dir)
106 + end
107 + end
108 +
104 109 def import_problem(ev_dir, problem, testcase_dir, num_testruns, raw_prefix, check_script, options)
105 110 testrun_info = build_testrun_info_from_dir(num_testruns, testcase_dir, raw_prefix)
106 111
107 112 if !(FileTest.exists? ev_dir)
108 113 puts "Testdata dir (#{ev_dir}) not found."
109 114 return
110 115 end
111 116
112 117 problem_dir = "#{ev_dir}/#{problem}"
113 118
114 119 # start working
115 120 puts "creating directories"
116 121
117 - File.makedirs("#{problem_dir}")
118 - File.makedirs("#{problem_dir}/script")
119 - File.makedirs("#{problem_dir}/test_cases")
122 + create_dir_if_not_exists("#{problem_dir}")
123 + create_dir_if_not_exists("#{problem_dir}/script")
124 + create_dir_if_not_exists("#{problem_dir}/test_cases")
120 125
121 126 puts "copying testcases"
122 127
123 128 tr_num = 0
124 129
125 130 num_testcases = 0
126 131
127 132 testrun_info.each do |testrun|
128 133 tr_num += 1
129 134 puts "testrun: #{tr_num}"
130 135
131 136 testrun.each do |testcase_info|
132 137 testcase_num, testcase_fname = testcase_info
133 138
134 139 puts "copy #{testcase_fname} to #{testcase_num}"
135 140
136 - File.makedirs("#{problem_dir}/test_cases/#{testcase_num}")
141 + create_dir_if_not_exists("#{problem_dir}/test_cases/#{testcase_num}")
137 142 copy_testcase("#{testcase_dir}",testcase_fname,"#{problem_dir}/test_cases/#{testcase_num}",testcase_num)
138 143
139 144 num_testcases += 1
140 145 end
141 146 end
142 147
143 148 # generating all_tests.cfg
144 149 puts "generating testcase config file"
145 150
146 151 template = File.open(SCRIPT_DIR + "/templates/all_tests.cfg.erb").read
147 152 all_test_cfg = ERB.new(template)
148 153
149 154 cfg_file = File.open("#{problem_dir}/test_cases/all_tests.cfg","w")
150 155 cfg_file.puts all_test_cfg.result binding
151 156 cfg_file.close
152 157
153 158 # copy check script
154 159 if res = /^wrapper:(.*)$/.match(check_script)
155 160 # wrapper script
156 161 check_script_fname = res[1]
157 162 script_name = File.basename(check_script_fname)
158 163 check_wrapper_template = File.open(SCRIPT_DIR + "/templates/check_wrapper").read
159 164 check_wrapper = ERB.new(check_wrapper_template)
160 165
161 166 check_file = File.open("#{problem_dir}/script/check","w")
162 167 check_file.puts check_wrapper.result binding
163 168 check_file.close
164 169
165 170 File.chmod(0755,"#{problem_dir}/script/check")
166 171
167 - File.copy("#{check_script_fname}", "#{problem_dir}/script/#{script_name}")
172 + FileUtils.cp("#{check_script_fname}", "#{problem_dir}/script/#{script_name}")
168 173 else
169 174 if File.exists?(SCRIPT_DIR + "/templates/check.#{check_script}")
170 175 check_script_fname = SCRIPT_DIR + "/templates/check.#{check_script}"
171 176 else
172 177 check_script_fname = check_script
173 178 end
174 - File.copy("#{check_script_fname}", "#{problem_dir}/script/check")
179 + FileUtils.cp("#{check_script_fname}", "#{problem_dir}/script/check")
175 180 end
176 181
177 182 # generating test_request directory
178 183 puts "generating test_request template"
179 184 FileUtils.mkdir_p("#{ev_dir}/test_request/#{problem}/script")
180 185 FileUtils.mkdir_p("#{ev_dir}/test_request/#{problem}/test_cases/1")
181 186
182 187 template = File.open(SCRIPT_DIR + "/templates/test_request_all_tests.cfg.erb").read
183 188 test_request_all_test_cfg = ERB.new(template)
184 189
185 190 cfg_file = File.open("#{ev_dir}/test_request/#{problem}/test_cases/all_tests.cfg","w")
186 191 cfg_file.puts test_request_all_test_cfg.result
187 192 cfg_file.close
188 193
189 - File.copy("#{SCRIPT_DIR}/templates/check_empty",
190 - "#{ev_dir}/test_request/#{problem}/script/check")
191 - File.copy("#{SCRIPT_DIR}/templates/answer-1.txt",
192 - "#{ev_dir}/test_request/#{problem}/test_cases/1")
194 + FileUtils.cp("#{SCRIPT_DIR}/templates/check_empty",
195 + "#{ev_dir}/test_request/#{problem}/script/check")
196 + FileUtils.cp("#{SCRIPT_DIR}/templates/answer-1.txt",
197 + "#{ev_dir}/test_request/#{problem}/test_cases/1")
193 198
194 199 puts "done"
195 200 end
196 201
197 202
198 203 SCRIPT_DIR = File.dirname(__FILE__)
199 204
200 205 # print usage
201 206 if (ARGV.length < 3) or (ARGV[2][0,1]=="-")
202 207 print_usage
203 208 exit(127)
204 209 end
205 210
206 211 # processing arguments
207 212 problem = ARGV[0]
208 213 testcase_dir = ARGV[1]
209 214 problem = File.basename(testcase_dir) if problem=="-"
210 215 check_script = ARGV[2]
211 216 options = {:time_limit => 1, :mem_limit => 16}
212 217 process_options(options)
213 218
214 219 JUDGE_ENVIRONMENTS.each do |env|
215 220 ev_dir = ENV_INFO[env][:ev_dir]
216 221 raw_prefix = ENV_INFO[env][:raw_prefix]
You need to be logged in to leave comments. Login now