summaryrefslogtreecommitdiffstats
path: root/lib/tasks
diff options
context:
space:
mode:
Diffstat (limited to 'lib/tasks')
-rw-r--r--lib/tasks/migrate_from_trac.rake64
1 files changed, 38 insertions, 26 deletions
diff --git a/lib/tasks/migrate_from_trac.rake b/lib/tasks/migrate_from_trac.rake
index 9e3ec73d3..3c589c031 100644
--- a/lib/tasks/migrate_from_trac.rake
+++ b/lib/tasks/migrate_from_trac.rake
@@ -136,7 +136,7 @@ namespace :redmine do
def trac_fullpath
attachment_type = read_attribute(:type)
trac_file = filename.gsub( /[^a-zA-Z0-9\-_\.!~*']/n ) {|x| sprintf('%%%02x', x[0]) }
- "#{TracMigrate.trac_directory}/attachments/#{attachment_type}/#{id}/#{trac_file}"
+ "#{TracMigrate.trac_attachments_directory}/#{attachment_type}/#{id}/#{trac_file}"
end
end
@@ -350,19 +350,38 @@ namespace :redmine do
def self.encoding(charset)
@ic = Iconv.new('UTF-8', charset)
rescue Iconv::InvalidEncoding
- return false
+ puts "Invalid encoding!"
+ return false
end
- def self.trac_directory=(path)
- @trac_directory = path if File.directory?(path)
+ def self.set_trac_directory(path)
+ @trac_directory = path
+ raise "This directory doesn't exist!" unless File.directory?(path)
+ raise "#{trac_db_path} doesn't exist!" unless File.exist?(trac_db_path)
+ raise "#{trac_attachments_directory} doesn't exist!" unless File.directory?(trac_attachments_directory)
+ @trac_directory
+ rescue Exception => e
+ puts e
+ return false
end
def self.trac_directory
@trac_directory
end
+ def self.trac_db_path; "#{trac_directory}/db/trac.db" end
+ def self.trac_attachments_directory; "#{trac_directory}/attachments" end
+
def self.target_project_identifier(identifier)
- @target_project = Project.find_by_identifier(identifier)
+ project = Project.find_by_identifier(identifier)
+ if !project
+ # create the target project
+ project = Project.new :name => identifier.humanize,
+ :description => identifier.humanize
+ project.identifier = identifier
+ puts "Unable to create a project with identifier '#{identifier}'!" unless project.save
+ end
+ @target_project = project.new_record? ? nil : project
end
def self.establish_connection(params)
@@ -386,31 +405,24 @@ namespace :redmine do
print "Are you sure you want to continue ? [y/N] "
break unless STDIN.gets.match(/^y$/i)
puts
-
- while true
- print "Trac directory: "
- directory = STDIN.gets.chomp!
- TracMigrate.trac_directory = directory
- break if TracMigrate.trac_directory
- puts " This directory doesn't exist!"
- end
- while true
- print "Database encoding [UTF-8]: "
- encoding = STDIN.gets.chomp!
- encoding = 'UTF-8' if encoding.blank?
- break if TracMigrate.encoding encoding
- puts " Invalid encoding!"
- end
- while true
- print "Target project identifier: "
- identifier = STDIN.gets.chomp!
- break if TracMigrate.target_project_identifier identifier
- puts " Project not found in Redmine database!"
+
+ def prompt(text, options = {}, &block)
+ default = options[:default] || ''
+ while true
+ print "#{text} [#{default}]: "
+ value = STDIN.gets.chomp!
+ value = default if value.blank?
+ break if yield value
+ end
end
+
+ prompt('Trac directory') {|directory| TracMigrate.set_trac_directory directory}
+ prompt('Database encoding', :default => 'UTF-8') {|encoding| TracMigrate.encoding encoding}
+ prompt('Target project identifier') {|identifier| TracMigrate.target_project_identifier identifier}
puts
TracMigrate.establish_connection({:adapter => 'sqlite',
- :database => "#{TracMigrate.trac_directory}/db/trac.db"})
+ :database => "#{TracMigrate.trac_db_path}"})
TracMigrate.migrate
end
end