Trac importer now migrates status changes.
git-svn-id: http://redmine.rubyforge.org/svn/trunk@693 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
parent
a2439f3b34
commit
72b5cd3889
@ -85,7 +85,8 @@ namespace :redmine do
|
|||||||
set_table_name :ticket
|
set_table_name :ticket
|
||||||
set_inheritance_column :none
|
set_inheritance_column :none
|
||||||
|
|
||||||
has_many :comments, :class_name => "TracTicketChange", :foreign_key => :ticket, :conditions => "field = 'comment'"
|
# ticket changes: only migrate status changes and comments
|
||||||
|
has_many :changes, :class_name => "TracTicketChange", :foreign_key => :ticket, :conditions => "field = 'comment' OR field='status'"
|
||||||
has_many :attachments, :class_name => "TracAttachment", :foreign_key => :id, :conditions => "type = 'ticket'"
|
has_many :attachments, :class_name => "TracAttachment", :foreign_key => :id, :conditions => "type = 'ticket'"
|
||||||
has_many :customs, :class_name => "TracTicketCustom", :foreign_key => :ticket
|
has_many :customs, :class_name => "TracTicketCustom", :foreign_key => :ticket
|
||||||
|
|
||||||
@ -202,9 +203,7 @@ namespace :redmine do
|
|||||||
migrated_components = 0
|
migrated_components = 0
|
||||||
migrated_milestones = 0
|
migrated_milestones = 0
|
||||||
migrated_tickets = 0
|
migrated_tickets = 0
|
||||||
migrated_ticket_comments = 0
|
|
||||||
migrated_custom_values = 0
|
migrated_custom_values = 0
|
||||||
trac_ticket_comments = 0
|
|
||||||
migrated_ticket_attachments = 0
|
migrated_ticket_attachments = 0
|
||||||
migrated_wiki_edits = 0
|
migrated_wiki_edits = 0
|
||||||
|
|
||||||
@ -238,15 +237,15 @@ namespace :redmine do
|
|||||||
|
|
||||||
# Custom fields
|
# Custom fields
|
||||||
# TODO: read trac.ini instead
|
# TODO: read trac.ini instead
|
||||||
print "Custom fields"
|
print "Migrating custom fields"
|
||||||
custom_field_map = {}
|
custom_field_map = {}
|
||||||
TracTicketCustom.find_by_sql("SELECT DISTINCT name FROM #{TracTicketCustom.table_name}").each do |field|
|
TracTicketCustom.find_by_sql("SELECT DISTINCT name FROM #{TracTicketCustom.table_name}").each do |field|
|
||||||
print '.'
|
print '.'
|
||||||
f = IssueCustomField.new :name => encode(field.name[0, limit_for(IssueCustomField, 'name')]),
|
f = IssueCustomField.new :name => encode(field.name[0, limit_for(IssueCustomField, 'name')]).humanize,
|
||||||
:field_format => 'string',
|
:field_format => 'string'
|
||||||
:is_for_all => true
|
|
||||||
next unless f.save
|
next unless f.save
|
||||||
f.trackers = Tracker.find(:all)
|
f.trackers = Tracker.find(:all)
|
||||||
|
f.projects << @target_project
|
||||||
custom_field_map[field.name] = f
|
custom_field_map[field.name] = f
|
||||||
end
|
end
|
||||||
puts
|
puts
|
||||||
@ -270,21 +269,30 @@ namespace :redmine do
|
|||||||
migrated_tickets += 1
|
migrated_tickets += 1
|
||||||
|
|
||||||
# Owner
|
# Owner
|
||||||
unless ticket.owner.blank?
|
unless ticket.owner.blank?
|
||||||
i.assigned_to = find_or_create_user(ticket.owner, true)
|
i.assigned_to = find_or_create_user(ticket.owner, true)
|
||||||
i.save
|
i.save
|
||||||
end
|
end
|
||||||
|
|
||||||
# Comments
|
# Comments and status changes
|
||||||
# TODO: migrate status changes history
|
ticket.changes.group_by(&:time).each do |time, changeset|
|
||||||
ticket.comments.each do |comment|
|
status_change = changeset.select {|change| change.field == 'status'}.first
|
||||||
next if comment.newvalue.blank?
|
comment_change = changeset.select {|change| change.field == 'comment'}.first
|
||||||
trac_ticket_comments += 1
|
|
||||||
n = Journal.new :notes => convert_wiki_text(encode(comment.newvalue)),
|
n = Journal.new :notes => (comment_change ? convert_wiki_text(encode(comment_change.newvalue)) : ''),
|
||||||
:created_on => comment.time
|
:created_on => time
|
||||||
n.user = find_or_create_user(comment.author)
|
n.user = find_or_create_user(changeset.first.author)
|
||||||
n.journalized = i
|
n.journalized = i
|
||||||
migrated_ticket_comments += 1 if n.save
|
if status_change &&
|
||||||
|
STATUS_MAPPING[status_change.oldvalue] &&
|
||||||
|
STATUS_MAPPING[status_change.newvalue] &&
|
||||||
|
(STATUS_MAPPING[status_change.oldvalue] != STATUS_MAPPING[status_change.newvalue])
|
||||||
|
n.details << JournalDetail.new(:property => 'attr',
|
||||||
|
:prop_key => 'status_id',
|
||||||
|
:old_value => STATUS_MAPPING[status_change.oldvalue].id,
|
||||||
|
:value => STATUS_MAPPING[status_change.newvalue].id)
|
||||||
|
end
|
||||||
|
n.save
|
||||||
end
|
end
|
||||||
|
|
||||||
# Attachments
|
# Attachments
|
||||||
@ -337,7 +345,6 @@ namespace :redmine do
|
|||||||
puts "Components: #{migrated_components}/#{TracComponent.count}"
|
puts "Components: #{migrated_components}/#{TracComponent.count}"
|
||||||
puts "Milestones: #{migrated_milestones}/#{TracMilestone.count}"
|
puts "Milestones: #{migrated_milestones}/#{TracMilestone.count}"
|
||||||
puts "Tickets: #{migrated_tickets}/#{TracTicket.count}"
|
puts "Tickets: #{migrated_tickets}/#{TracTicket.count}"
|
||||||
puts "Ticket comments: #{migrated_ticket_comments}/#{trac_ticket_comments}"
|
|
||||||
puts "Ticket files: #{migrated_ticket_attachments}/" + TracAttachment.count("type = 'ticket'").to_s
|
puts "Ticket files: #{migrated_ticket_attachments}/" + TracAttachment.count("type = 'ticket'").to_s
|
||||||
puts "Custom values: #{migrated_custom_values}/#{TracTicketCustom.count}"
|
puts "Custom values: #{migrated_custom_values}/#{TracTicketCustom.count}"
|
||||||
puts "Wiki edits: #{migrated_wiki_edits}/#{TracWikiPage.count}"
|
puts "Wiki edits: #{migrated_wiki_edits}/#{TracWikiPage.count}"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user