Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 30 additions & 0 deletions app/models/redmine_merge.rb
Original file line number Diff line number Diff line change
@@ -1,31 +1,53 @@
class RedmineMerge
def self.migrate
puts 'Migrating users...'
SourceUser.migrate
puts 'Migrating custom fields...'
SourceCustomField.migrate
puts 'Migrating trackers...'
SourceTracker.migrate
puts 'Migrating issue status...'
SourceIssueStatus.migrate
puts 'Migrating issue priorities...'
SourceEnumeration.migrate_issue_priorities
puts 'Migrating time entry activities...'
SourceEnumeration.migrate_time_entry_activities
puts 'Migrating document categories...'
SourceEnumeration.migrate_document_categories

# Project-specific data
puts 'Migrating projects...'
SourceProject.migrate
puts 'Migrating versions...'
SourceVersion.migrate
puts 'Migrating news...'
SourceNews.migrate
puts 'Migrating issue categories...'
SourceIssueCategory.migrate
puts 'Migrating issues...'
SourceIssue.migrate
puts 'Migrating issue relations...'
SourceIssueRelation.migrate
puts 'Migrating journals...'
SourceJournal.migrate
puts 'Migrating journal details...'
SourceJournalDetail.migrate
puts 'Migrating time entries...'
SourceTimeEntry.migrate
puts 'Migrating documents...'
SourceDocument.migrate
puts 'Migrating wikis...'
SourceWiki.migrate
puts 'Migrating wiki pages...'
SourceWikiPage.migrate
puts 'Migrating wiki contents...'
SourceWikiContent.migrate
puts 'Migrating attachments...'
SourceAttachment.migrate
end

class Mapper
Users = {}
Projects = {}
Issues = {}
Journals = {}
Expand All @@ -34,6 +56,14 @@ class Mapper
Documents = {}
Versions = {}

def self.add_user(source_id, new_id)
Users[source_id] = new_id
end

def self.get_new_user_id(source_id)
Users[source_id]
end

def self.add_project(source_id, new_id)
Projects[source_id] = new_id
end
Expand Down
2 changes: 1 addition & 1 deletion app/models/source_attachment.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ def self.migrate
all.each do |source_attachment|

Attachment.create!(source_attachment.attributes) do |a|
a.author = User.find_by_login(source_attachment.author.login)
a.author = User.find(RedmineMerge::Mapper.get_new_user_id(source_attachment.author.id))
a.container = case source_attachment.container_type
when "Issue"
Issue.find RedmineMerge::Mapper.get_new_issue_id(source_attachment.container_id)
Expand Down
19 changes: 16 additions & 3 deletions app/models/source_issue.rb
Original file line number Diff line number Diff line change
Expand Up @@ -9,18 +9,31 @@ class SourceIssue < ActiveRecord::Base
belongs_to :project, :class_name => 'SourceProject', :foreign_key => 'project_id'
belongs_to :priority, :class_name => 'SourceEnumeration', :foreign_key => 'priority_id'
belongs_to :category, :class_name => 'SourceIssueCategory', :foreign_key => 'category_id'
belongs_to :fixed_version, :class_name => 'SourceVersion', :foreign_key => 'fixed_version_id'

def self.migrate
all.each do |source_issue|

puts "- Migrating issue ##{source_issue.id}: #{source_issue.subject}"
issue = Issue.create!(source_issue.attributes) do |i|
i.project = Project.find_by_name(source_issue.project.name)
i.author = User.find_by_login(source_issue.author.login)
i.assigned_to = User.find_by_login(source_issue.assigned_to.login) if source_issue.assigned_to
puts "-- Set project #{i.project.name}"
i.author = User.find(RedmineMerge::Mapper.get_new_user_id(source_issue.author.id))
puts "-- Set author #{i.author}"
i.assigned_to = User.find(RedmineMerge::Mapper.get_new_user_id(source_issue.assigned_to.id)) if source_issue.assigned_to
puts "-- Set assignee #{i.assigned_to}"
i.status = IssueStatus.find_by_name(source_issue.status.name)
puts "-- Set issue status #{i.status}"
i.tracker = Tracker.find_by_name(source_issue.tracker.name)
puts "-- Set tracker #{i.tracker}"
i.priority = IssuePriority.find_by_name(source_issue.priority.name)
puts "-- Set issue priority #{i.priority}"
i.category = IssueCategory.find_by_name(source_issue.category.name) if source_issue.category
puts "-- Set category #{i.category}"
if source_issue.fixed_version and version = Version.find(RedmineMerge::Mapper.get_new_version_id(source_issue.fixed_version.id))
i.instance_variable_set :@assignable_versions, [version]
i.fixed_version = version
puts "-- Set fixed version #{i.fixed_version}"
end
end

RedmineMerge::Mapper.add_issue(source_issue.id, issue.id)
Expand Down
1 change: 1 addition & 0 deletions app/models/source_journal.rb
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ def self.migrate

journal = Journal.create!(source_journals.attributes) do |j|
j.issue = Issue.find_by_subject(source_journals.issue.subject)
j.user = User.find(RedmineMerge::Mapper.get_new_user_id(source_journals.user_id))
end

RedmineMerge::Mapper.add_journal(source_journals.id, journal.id)
Expand Down
2 changes: 1 addition & 1 deletion app/models/source_journal_detail.rb
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ def self.migrate
JournalDetail.create!(source_journal_detail.attributes) do |jd|
jd.journal = Journal.find(RedmineMerge::Mapper.get_new_journal_id(source_journal_detail.journal_id))

# Need to remap propery keys to their new ids
# Need to remap property keys to their new ids
if source_journal_detail.prop_key.include?('_id')
property_name = source_journal_detail.prop_key.to_s.gsub(/\_id$/, "").to_sym
association = Issue.reflect_on_all_associations.detect {|a| a.name == property_name }
Expand Down
2 changes: 1 addition & 1 deletion app/models/source_news.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ def self.migrate
all.each do |source_news|
News.create!(source_news.attributes) do |n|
n.project = Project.find(RedmineMerge::Mapper.get_new_project_id(source_news.project_id))
n.author = User.find_by_login(source_news.author.login)
n.author = User.find(RedmineMerge::Mapper.get_new_user_id(source_news.author.id))
end
end
end
Expand Down
38 changes: 21 additions & 17 deletions app/models/source_project.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,27 +7,31 @@ class SourceProject < ActiveRecord::Base

def self.migrate
all(:order => 'lft ASC').each do |source_project|
next if Project.find_by_name(source_project.name)
next if Project.find_by_identifier(source_project.identifier)

project = Project.create!(source_project.attributes) do |p|
p.status = source_project.status
if source_project.enabled_modules
p.enabled_module_names = source_project.enabled_modules.collect(&:name)
end
puts "- Migrating source project #{source_project.name}..."
if project = (Project.find_by_name(source_project.name) || Project.find_by_identifier(source_project.identifier))
puts "-- Found"
else
project = Project.create!(source_project.attributes) do |p|
p.status = source_project.status
if source_project.enabled_modules
p.enabled_module_names = source_project.enabled_modules.collect(&:name)
end

if source_project.trackers
source_project.trackers.each do |source_tracker|
merged_tracker = Tracker.find_by_name(source_tracker.name)
p.trackers << merged_tracker if merged_tracker
if source_project.trackers
source_project.trackers.each do |source_tracker|
merged_tracker = Tracker.find_by_name(source_tracker.name)
p.trackers << merged_tracker if merged_tracker and not p.trackers.include?(merged_tracker)
end
end
end

# Parent/child projects
if source_project.parent_id
project.set_parent!(Project.find_by_id(RedmineMerge::Mapper.get_new_project_id(source_project.parent_id)))
end
puts "-- Not found, created"
end

# Parent/child projects
if source_project.parent_id
project.set_parent!(Project.find_by_id(RedmineMerge::Mapper.get_new_project_id(source_project.parent_id)))
end
puts "-- Added to map"
RedmineMerge::Mapper.add_project(source_project.id, project.id)
end
end
Expand Down
2 changes: 1 addition & 1 deletion app/models/source_time_entry.rb
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ class SourceTimeEntry < ActiveRecord::Base
def self.migrate
all.each do |source_time_entry|
TimeEntry.create!(source_time_entry.attributes) do |te|
te.user = User.find_by_login(source_time_entry.user.login)
te.user = User.find(RedmineMerge::Mapper.get_new_user_id(source_time_entry.user.id))
te.project = Project.find_by_name(source_time_entry.project.name)
te.activity = TimeEntryActivity.find_by_name(source_time_entry.activity.name)

Expand Down
23 changes: 15 additions & 8 deletions app/models/source_user.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,22 @@ class SourceUser < ActiveRecord::Base

def self.migrate
all.each do |source_user|
next if User.find_by_mail(source_user.mail)
next if User.find_by_login(source_user.login)
next if source_user.type == "AnonymousUser"

User.create!(source_user.attributes) do |u|
u.login = source_user.login
u.admin = source_user.admin
u.hashed_password = source_user.hashed_password
puts "- Migrating user #{source_user}..."
if source_user.type == "AnonymousUser"
user = User.anonymous
puts "-- Found"
elsif user = (User.find_by_mail(source_user.mail) || User.find_by_login(source_user.login))
puts "-- Found"
else
user = User.create!(source_user.attributes) do |u|
u.login = source_user.login
u.admin = source_user.admin
u.hashed_password = source_user.hashed_password
end
puts "-- Not found, created"
end
puts "-- Added to map"
RedmineMerge::Mapper.add_user(source_user.id, user.id)
end
end
end
2 changes: 1 addition & 1 deletion app/models/source_wiki.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ class SourceWiki < ActiveRecord::Base

def self.migrate
all.each do |source_wiki|

puts "- Migrating source wiki ID: #{source_wiki.id}..."
project = Project.find(RedmineMerge::Mapper.get_new_project_id(source_wiki.project_id))

wiki = Wiki.create!(source_wiki.attributes) do |w|
Expand Down
2 changes: 1 addition & 1 deletion app/models/source_wiki_content.rb
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ def self.migrate

WikiContent.create!(source_wiki_content.attributes) do |wc|
wc.page = WikiPage.find(RedmineMerge::Mapper.get_new_wiki_page_id(source_wiki_content.page_id))
wc.author = User.find_by_login(source_wiki_content.author.login)
wc.author = User.find(RedmineMerge::Mapper.get_new_user_id(source_wiki_content.author.id))
end
end
end
Expand Down
1 change: 1 addition & 0 deletions lib/tasks/merge_redmine.rake
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ namespace :redmine do

desc 'Merge two Redmine databases'
task :merge_redmine => :environment do
Thread.current[:planio_account] = ENV['planio_account']
RedmineMerge.migrate
end
end