Mercurial > hg > soundsoftware-site
diff lib/tasks/migrate_from_trac.rake @ 1115:433d4f72a19b redmine-2.2
Update to Redmine SVN revision 11137 on 2.2-stable branch
author | Chris Cannam |
---|---|
date | Mon, 07 Jan 2013 12:01:42 +0000 |
parents | cbb26bc654de |
children | bb32da3bea34 622f24f53b42 261b3d9a4903 |
line wrap: on
line diff
--- a/lib/tasks/migrate_from_trac.rake Wed Jun 27 14:54:18 2012 +0100 +++ b/lib/tasks/migrate_from_trac.rake Mon Jan 07 12:01:42 2013 +0000 @@ -1,5 +1,5 @@ # Redmine - project management software -# Copyright (C) 2006-2011 Jean-Philippe Lang +# Copyright (C) 2006-2012 Jean-Philippe Lang # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License @@ -85,11 +85,11 @@ end class TracComponent < ActiveRecord::Base - set_table_name :component + self.table_name = :component end class TracMilestone < ActiveRecord::Base - set_table_name :milestone + self.table_name = :milestone # If this attribute is set a milestone has a defined target timepoint def due if read_attribute(:due) && read_attribute(:due) > 0 @@ -114,11 +114,11 @@ end class TracTicketCustom < ActiveRecord::Base - set_table_name :ticket_custom + self.table_name = :ticket_custom end class TracAttachment < ActiveRecord::Base - set_table_name :attachment + self.table_name = :attachment set_inheritance_column :none def time; Time.at(read_attribute(:time)) end @@ -159,17 +159,17 @@ end class TracTicket < ActiveRecord::Base - set_table_name :ticket + self.table_name = :ticket set_inheritance_column :none # ticket changes: only migrate status changes and comments - has_many :changes, :class_name => "TracTicketChange", :foreign_key => :ticket - has_many :attachments, :class_name => "TracAttachment", - :finder_sql => "SELECT DISTINCT attachment.* FROM #{TracMigrate::TracAttachment.table_name}" + - " WHERE #{TracMigrate::TracAttachment.table_name}.type = 'ticket'" + - ' AND #{TracMigrate::TracAttachment.table_name}.id = \'#{TracMigrate::TracAttachment.connection.quote_string(id.to_s)}\'' + has_many :ticket_changes, :class_name => "TracTicketChange", :foreign_key => :ticket has_many :customs, :class_name => "TracTicketCustom", :foreign_key => :ticket + def attachments + TracMigrate::TracAttachment.all(:conditions => ["type = 'ticket' AND id = ?", self.id.to_s]) + end + def ticket_type read_attribute(:type) end @@ -187,7 +187,12 @@ end class TracTicketChange < ActiveRecord::Base - set_table_name :ticket_change + self.table_name = :ticket_change + + def self.columns + # Hides Trac field 'field' to prevent clash with AR field_changed? method (Rails 3.0) + super.select {|column| column.name.to_s != 'field'} + end def time; Time.at(read_attribute(:time)) end end @@ -201,28 +206,27 @@ CamelCase TitleIndex) class TracWikiPage < ActiveRecord::Base - set_table_name :wiki + self.table_name = :wiki set_primary_key :name - has_many :attachments, :class_name => "TracAttachment", - :finder_sql => "SELECT DISTINCT attachment.* FROM #{TracMigrate::TracAttachment.table_name}" + - " WHERE #{TracMigrate::TracAttachment.table_name}.type = 'wiki'" + - ' AND #{TracMigrate::TracAttachment.table_name}.id = \'#{TracMigrate::TracAttachment.connection.quote_string(id.to_s)}\'' - def self.columns # Hides readonly Trac field to prevent clash with AR readonly? method (Rails 2.0) super.select {|column| column.name.to_s != 'readonly'} end + def attachments + TracMigrate::TracAttachment.all(:conditions => ["type = 'wiki' AND id = ?", self.id.to_s]) + end + def time; Time.at(read_attribute(:time)) end end class TracPermission < ActiveRecord::Base - set_table_name :permission + self.table_name = :permission end class TracSessionAttribute < ActiveRecord::Base - set_table_name :session_attribute + self.table_name = :session_attribute end def self.find_or_create_user(username, project_member = false) @@ -231,7 +235,7 @@ u = User.find_by_login(username) if !u # Create a new user if not found - mail = username[0,limit_for(User, 'mail')] + mail = username[0, User::MAIL_LENGTH_LIMIT] if mail_attr = TracSessionAttribute.find_by_sid_and_name(username, 'email') mail = mail_attr.value end @@ -249,7 +253,7 @@ :firstname => fn[0, limit_for(User, 'firstname')], :lastname => ln[0, limit_for(User, 'lastname')] - u.login = username[0,limit_for(User, 'login')].gsub(/[^a-z0-9_\-@\.]/i, '-') + u.login = username[0, User::LOGIN_LENGTH_LIMIT].gsub(/[^a-z0-9_\-@\.]/i, '-') u.password = 'trac' u.admin = true if TracPermission.find_by_username_and_action(username, 'admin') # finally, a default user is used if the new user is not valid @@ -483,7 +487,7 @@ end # Comments and status/resolution changes - ticket.changes.group_by(&:time).each do |time, changeset| + ticket.ticket_changes.group_by(&:time).each do |time, changeset| status_change = changeset.select {|change| change.field == 'status'}.first resolution_change = changeset.select {|change| change.field == 'resolution'}.first comment_change = changeset.select {|change| change.field == 'comment'}.first @@ -621,9 +625,9 @@ def self.set_trac_adapter(adapter) return false if adapter.blank? - raise "Unknown adapter: #{adapter}!" unless %w(sqlite sqlite3 mysql postgresql).include?(adapter) + raise "Unknown adapter: #{adapter}!" unless %w(sqlite3 mysql postgresql).include?(adapter) # If adapter is sqlite or sqlite3, make sure that trac.db exists - raise "#{trac_db_path} doesn't exist!" if %w(sqlite sqlite3).include?(adapter) && !File.exist?(trac_db_path) + raise "#{trac_db_path} doesn't exist!" if %w(sqlite3).include?(adapter) && !File.exist?(trac_db_path) @@trac_adapter = adapter rescue Exception => e puts e @@ -686,8 +690,8 @@ end def self.connection_params - if %w(sqlite sqlite3).include?(trac_adapter) - {:adapter => trac_adapter, + if trac_adapter == 'sqlite3' + {:adapter => 'sqlite3', :database => trac_db_path} else {:adapter => trac_adapter, @@ -746,8 +750,8 @@ DEFAULT_PORTS = {'mysql' => 3306, 'postgresql' => 5432} prompt('Trac directory') {|directory| TracMigrate.set_trac_directory directory.strip} - prompt('Trac database adapter (sqlite, sqlite3, mysql, postgresql)', :default => 'sqlite') {|adapter| TracMigrate.set_trac_adapter adapter} - unless %w(sqlite sqlite3).include?(TracMigrate.trac_adapter) + prompt('Trac database adapter (sqlite3, mysql2, postgresql)', :default => 'sqlite3') {|adapter| TracMigrate.set_trac_adapter adapter} + unless %w(sqlite3).include?(TracMigrate.trac_adapter) prompt('Trac database host', :default => 'localhost') {|host| TracMigrate.set_trac_db_host host} prompt('Trac database port', :default => DEFAULT_PORTS[TracMigrate.trac_adapter]) {|port| TracMigrate.set_trac_db_port port} prompt('Trac database name') {|name| TracMigrate.set_trac_db_name name}