@@ -24,7 +24,7 namespace :redmine do | |||
|
24 | 24 | task :migrate_from_trac => :environment do |
|
25 | 25 | |
|
26 | 26 | module TracMigrate |
|
27 |
TICKET_MAP = [] |
|
|
27 | TICKET_MAP = [] | |
|
28 | 28 | |
|
29 | 29 | DEFAULT_STATUS = IssueStatus.default |
|
30 | 30 | assigned_status = IssueStatus.find_by_position(2) |
@@ -187,7 +187,7 namespace :redmine do | |||
|
187 | 187 | # External Links |
|
188 | 188 | text = text.gsub(/\[(http[^\s]+)\s+([^\]]+)\]/) {|s| "\"#{$2}\":#{$1}"} |
|
189 | 189 | # Internal Links |
|
190 | text = text.gsub(/[[BR]]/, "\n") # This has to go before the rules below | |
|
190 | text = text.gsub(/\[\[BR\]\]/, "\n") # This has to go before the rules below | |
|
191 | 191 | text = text.gsub(/\[\"(.+)\".*\]/) {|s| "[[#{$1.delete(',./?;|:')}]]"} |
|
192 | 192 | text = text.gsub(/\[wiki:\"(.+)\".*\]/) {|s| "[[#{$1.delete(',./?;|:')}]]"} |
|
193 | 193 | text = text.gsub(/\[wiki:\"(.+)\".*\]/) {|s| "[[#{$1.delete(',./?;|:')}]]"} |
@@ -197,7 +197,7 namespace :redmine do | |||
|
197 | 197 | # Ticket number re-writing |
|
198 | 198 | text = text.gsub(/#(\d+)/) do |s| |
|
199 | 199 | TICKET_MAP[$1.to_i] ||= $1 |
|
200 | "\##{TICKET_MAP[$1.to_i]}" | |
|
200 | "\##{TICKET_MAP[$1.to_i] || $1}" | |
|
201 | 201 | end |
|
202 | 202 | # Preformatted blocks |
|
203 | 203 | text = text.gsub(/\{\{\{/, '<pre>') |
@@ -214,13 +214,11 namespace :redmine do | |||
|
214 | 214 | # Lists |
|
215 | 215 | text = text.gsub(/^([ ]+)\* /) {|s| '*' * $1.length + " "} |
|
216 | 216 | |
|
217 | ||
|
218 | 217 | text |
|
219 | 218 | end |
|
220 | 219 | |
|
221 | 220 | def self.migrate |
|
222 |
establish_connection |
|
|
223 | :database => trac_db_path}) | |
|
221 | establish_connection | |
|
224 | 222 | |
|
225 | 223 | # Quick database test |
|
226 | 224 | TracComponent.count |
@@ -418,26 +416,55 namespace :redmine do | |||
|
418 | 416 | end |
|
419 | 417 | |
|
420 | 418 | def self.set_trac_directory(path) |
|
421 | @trac_directory = path | |
|
419 | @@trac_directory = path | |
|
422 | 420 | raise "This directory doesn't exist!" unless File.directory?(path) |
|
423 | raise "#{trac_db_path} doesn't exist!" unless File.exist?(trac_db_path) | |
|
424 | 421 | raise "#{trac_attachments_directory} doesn't exist!" unless File.directory?(trac_attachments_directory) |
|
425 | @trac_directory | |
|
422 | @@trac_directory | |
|
426 | 423 | rescue Exception => e |
|
427 | 424 | puts e |
|
428 | 425 | return false |
|
429 | 426 | end |
|
430 | 427 | |
|
431 | 428 | def self.trac_directory |
|
432 | @trac_directory | |
|
429 | @@trac_directory | |
|
433 | 430 | end |
|
434 | 431 | |
|
435 | 432 | def self.set_trac_adapter(adapter) |
|
436 | return false unless %w(sqlite sqlite3).include?(adapter) | |
|
437 | @trac_adapter = adapter | |
|
433 | return false if adapter.blank? | |
|
434 | raise "Unknown adapter: #{adapter}!" unless %w(sqlite sqlite3 mysql postgresql).include?(adapter) | |
|
435 | # If adapter is sqlite or sqlite3, make sure that trac.db exists | |
|
436 | raise "#{trac_db_path} doesn't exist!" if %w(sqlite sqlite3).include?(adapter) && !File.exist?(trac_db_path) | |
|
437 | @@trac_adapter = adapter | |
|
438 | rescue Exception => e | |
|
439 | puts e | |
|
440 | return false | |
|
441 | end | |
|
442 | ||
|
443 | def self.set_trac_db_host(host) | |
|
444 | return nil if host.blank? | |
|
445 | @@trac_db_host = host | |
|
446 | end | |
|
447 | ||
|
448 | def self.set_trac_db_port(port) | |
|
449 | return nil if port.to_i == 0 | |
|
450 | @@trac_db_port = port.to_i | |
|
451 | end | |
|
452 | ||
|
453 | def self.set_trac_db_name(name) | |
|
454 | return nil if name.blank? | |
|
455 | @@trac_db_name = name | |
|
456 | end | |
|
457 | ||
|
458 | def self.set_trac_db_username(username) | |
|
459 | @@trac_db_username = username | |
|
438 | 460 | end |
|
439 | 461 | |
|
440 | def self.trac_adapter; @trac_adapter end | |
|
462 | def self.set_trac_db_password(password) | |
|
463 | @@trac_db_password = password | |
|
464 | end | |
|
465 | ||
|
466 | mattr_reader :trac_directory, :trac_adapter, :trac_db_host, :trac_db_port, :trac_db_name, :trac_db_username, :trac_db_password | |
|
467 | ||
|
441 | 468 | def self.trac_db_path; "#{trac_directory}/db/trac.db" end |
|
442 | 469 | def self.trac_attachments_directory; "#{trac_directory}/attachments" end |
|
443 | 470 | |
@@ -451,17 +478,31 namespace :redmine do | |||
|
451 | 478 | puts "Unable to create a project with identifier '#{identifier}'!" unless project.save |
|
452 | 479 | # enable issues and wiki for the created project |
|
453 | 480 | project.enabled_module_names = ['issue_tracking', 'wiki'] |
|
481 | end | |
|
454 | 482 |
|
|
455 | 483 |
|
|
456 | end | |
|
457 | 484 | @target_project = project.new_record? ? nil : project |
|
458 | 485 | end |
|
459 | 486 | |
|
460 |
def self. |
|
|
487 | def self.connection_params | |
|
488 | if %w(sqlite sqlite3).include?(trac_adapter) | |
|
489 | {:adapter => trac_adapter, | |
|
490 | :database => trac_db_path} | |
|
491 | else | |
|
492 | {:adapter => trac_adapter, | |
|
493 | :database => trac_db_name, | |
|
494 | :host => trac_db_host, | |
|
495 | :port => trac_db_port, | |
|
496 | :username => trac_db_username, | |
|
497 | :password => trac_db_password} | |
|
498 | end | |
|
499 | end | |
|
500 | ||
|
501 | def self.establish_connection | |
|
461 | 502 | constants.each do |const| |
|
462 | 503 | klass = const_get(const) |
|
463 | 504 | next unless klass.respond_to? 'establish_connection' |
|
464 | klass.establish_connection params | |
|
505 | klass.establish_connection connection_params | |
|
465 | 506 | end |
|
466 | 507 | end |
|
467 | 508 | |
@@ -474,7 +515,7 namespace :redmine do | |||
|
474 | 515 | end |
|
475 | 516 | |
|
476 | 517 | puts |
|
477 |
puts "WARNING: |
|
|
518 | puts "WARNING: a new project will be added to Redmine during this process." | |
|
478 | 519 | print "Are you sure you want to continue ? [y/N] " |
|
479 | 520 | break unless STDIN.gets.match(/^y$/i) |
|
480 | 521 | puts |
@@ -489,8 +530,17 namespace :redmine do | |||
|
489 | 530 | end |
|
490 | 531 | end |
|
491 | 532 | |
|
533 | DEFAULT_PORTS = {'mysql' => 3306, 'postgresl' => 5432} | |
|
534 | ||
|
492 | 535 | prompt('Trac directory') {|directory| TracMigrate.set_trac_directory directory} |
|
493 | prompt('Trac database adapter (sqlite, sqlite3)', :default => 'sqlite') {|adapter| TracMigrate.set_trac_adapter adapter} | |
|
536 | prompt('Trac database adapter (sqlite, sqlite3, mysql, postgresql)', :default => 'sqlite') {|adapter| TracMigrate.set_trac_adapter adapter} | |
|
537 | unless %w(sqlite sqlite3).include?(TracMigrate.trac_adapter) | |
|
538 | prompt('Trac database host', :default => 'localhost') {|host| TracMigrate.set_trac_db_host host} | |
|
539 | prompt('Trac database port', :default => DEFAULT_PORTS[TracMigrate.trac_adapter]) {|port| TracMigrate.set_trac_db_port port} | |
|
540 | prompt('Trac database name') {|name| TracMigrate.set_trac_db_name name} | |
|
541 | prompt('Trac database username') {|username| TracMigrate.set_trac_db_username username} | |
|
542 | prompt('Trac database password') {|password| TracMigrate.set_trac_db_password password} | |
|
543 | end | |
|
494 | 544 | prompt('Trac database encoding', :default => 'UTF-8') {|encoding| TracMigrate.encoding encoding} |
|
495 | 545 | prompt('Target project identifier') {|identifier| TracMigrate.target_project_identifier identifier} |
|
496 | 546 | puts |
General Comments 0
You need to be logged in to leave comments.
Login now