449 |
449 |
r.save!
|
450 |
450 |
custom_field_map['resolution'] = r
|
451 |
451 |
|
|
452 |
# Trac 'keywords' field as a Redmine custom field
|
|
453 |
r = IssueCustomField.find(:first, :conditions => { :name => "Keywords" })
|
|
454 |
r = IssueCustomField.new(:name => 'Keywords',
|
|
455 |
:field_format => 'string',
|
|
456 |
:is_filter => true) if r.nil?
|
|
457 |
r.trackers = Tracker.find(:all)
|
|
458 |
r.projects << @target_project
|
|
459 |
#r.possible_values = (r.possible_values + %w(fixed invalid wontfix duplicate worksforme)).flatten.compact.uniq
|
|
460 |
r.save!
|
|
461 |
custom_field_map['keywords'] = r
|
|
462 |
|
|
463 |
|
452 |
464 |
# Tickets
|
453 |
465 |
print "Migrating tickets"
|
454 |
466 |
TracTicket.find(:all, :order => 'id ASC').each do |ticket|
|
... | ... | |
465 |
477 |
i.status = STATUS_MAPPING[ticket.status] || DEFAULT_STATUS
|
466 |
478 |
i.tracker = TRACKER_MAPPING[ticket.ticket_type] || DEFAULT_TRACKER
|
467 |
479 |
i.custom_values << CustomValue.new(:custom_field => custom_field_map['resolution'], :value => ticket.resolution) unless ticket.resolution.blank?
|
|
480 |
i.custom_values << CustomValue.new(:custom_field => custom_field_map['keywords'], :value => ticket.keywords) unless ticket.keywords.blank?
|
468 |
481 |
i.id = ticket.id unless Issue.exists?(ticket.id)
|
469 |
482 |
next unless Time.fake(ticket.changetime) { i.save }
|
470 |
483 |
TICKET_MAP[ticket.id] = i.id
|
... | ... | |
476 |
489 |
Time.fake(ticket.changetime) { i.save }
|
477 |
490 |
end
|
478 |
491 |
|
479 |
|
# Comments and status/resolution changes
|
|
492 |
# Comments and status/resolution/keywords changes
|
480 |
493 |
ticket.changes.group_by(&:time).each do |time, changeset|
|
481 |
494 |
status_change = changeset.select {|change| change.field == 'status'}.first
|
482 |
495 |
resolution_change = changeset.select {|change| change.field == 'resolution'}.first
|
|
496 |
keywords_change = changeset.select {|change| change.field == 'keywords'}.first
|
483 |
497 |
comment_change = changeset.select {|change| change.field == 'comment'}.first
|
484 |
498 |
|
485 |
499 |
n = Journal.new :notes => (comment_change ? convert_wiki_text(encode(comment_change.newvalue)) : ''),
|
... | ... | |
501 |
515 |
:old_value => resolution_change.oldvalue,
|
502 |
516 |
:value => resolution_change.newvalue)
|
503 |
517 |
end
|
|
518 |
if keywords_change
|
|
519 |
n.details << JournalDetail.new(:property => 'cf',
|
|
520 |
:prop_key => custom_field_map['keywords'].id,
|
|
521 |
:old_value => keywords_change.oldvalue,
|
|
522 |
:value => keywords_change.newvalue)
|
|
523 |
end
|
504 |
524 |
n.save unless n.details.empty? && n.notes.blank?
|
505 |
525 |
end
|
506 |
526 |
|