Show More
Commit Description:
handle the case when problem id or submission id is null. Grader will simply skip such request. Add more report on console (for command line grading)...
Commit Description:
handle the case when problem id or submission id is null. Grader will simply skip such request. Add more report on console (for command line grading) (mercurial grafted from d233105d3965c5368c9b33125f390e39b25f910e)
File last commit:
Show/Diff file:
Action:
rename_problem | 100 lines | 2.3 KiB | text/plain | TextLexer |
#!/usr/bin/env ruby
ENVIRONMENT_DIRS = ['ev', 'ev-exam']
def config
Grader::Configuration.get_instance
end
def rename_problem(old_problem_name, new_problem_name)
if valid_problem_name(new_problem_name)
puts "Bad new problem name: #{new_problem_name}"
return
end
problem = Problem.find_by_name(old_problem_name)
if problem==nil
puts "Problem #{old_problem_name} does not exist."
return
end
puts "Problem: #{old_problem_name} -> #{new_problem_name}"
ENVIRONMENT_DIRS.each do |dir|
problem_dir = File.join(GRADER_ROOT,'..',dir,old_problem_name)
new_problem_dir = File.join(GRADER_ROOT,'..',dir,new_problem_name)
if FileTest.exists? problem_dir
puts "Moving #{problem_dir} to #{new_problem_dir}."
File.rename(problem_dir, new_problem_dir)
tr_problem_dir = File.join(GRADER_ROOT,'..',dir,
'test_request',old_problem_name)
new_tr_problem_dir = File.join(GRADER_ROOT,'..',dir,
'test_request',new_problem_name)
File.rename(tr_problem_dir, new_tr_problem_dir)
end
end
problem.name = new_problem_name
problem.save
end
def usage
puts <<USAGE
Usage:
rename_problem [old_name] [new_name]
or
rename_problem -f [filename]
When using with -f, that file should contain, for each line, the old
problem name and its new name.
This script should be called at the judge root dir where dirs 'ev' and
'ev-exam' are.
USAGE
end
def valid_problem_name(name)
if name.length==0:
return false
else
return !(/^[a-zA-Z0-9_\-]+$/ === name)
end
end
if (ARGV.length!=2)
usage
exit(0)
end
if ARGV[0]=='-f' and !FileTest.exists?(ARGV[1])
puts "File #{ARGV[1]} does not exist."
usage
exit(0)
end
# load grader environment
GRADER_ENV = 'grading'
require File.join(File.dirname(__FILE__),'config/environment')
# boot rails, to be able to rename the problem
RAILS_ENV = config.rails_env
require RAILS_ROOT + '/config/environment'
if ARGV[0]!='-f'
old_problem_name = ARGV[0]
new_problem_name = ARGV[1]
rename_problem(old_problem_name, new_problem_name)
else
lines = IO.readlines(ARGV[1])
lines.each do |line|
items = line.split
if items.length==2
old_name, new_name = items
rename_problem(old_name, new_name)
end
end
end