Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDouwe Maan <douwe@gitlab.com>2015-04-17 15:55:51 +0300
committerDouwe Maan <douwe@gitlab.com>2015-04-17 15:55:51 +0300
commit38982136ecba817817552e7d2f58955213b51d6a (patch)
tree4850f182caa085156b5ffa9f58563a0f7ae11307 /lib/gitlab/google_code_import
parent7d98c8842d6bc9b14fb410f028db7ab651961b42 (diff)
Decrease memory use and increase performance of Google Code importer.
Diffstat (limited to 'lib/gitlab/google_code_import')
-rw-r--r--lib/gitlab/google_code_import/importer.rb85
1 files changed, 38 insertions, 47 deletions
diff --git a/lib/gitlab/google_code_import/importer.rb b/lib/gitlab/google_code_import/importer.rb
index 4db6047e6c7..b5e82563ff1 100644
--- a/lib/gitlab/google_code_import/importer.rb
+++ b/lib/gitlab/google_code_import/importer.rb
@@ -62,24 +62,7 @@ module Gitlab
def import_issues
return unless repo.issues
- last_id = 0
-
- deleted_issues = []
-
- repo.issues.each do |raw_issue|
- while raw_issue["id"] > last_id + 1
- last_id += 1
-
- issue = project.issues.create!(
- title: "Deleted issue",
- description: "*This issue has been deleted*",
- author_id: project.creator_id,
- state: "closed"
- )
- deleted_issues << issue
- end
- last_id = raw_issue["id"]
-
+ while raw_issue = repo.issues.shift
author = user_map[raw_issue["author"]["name"]]
date = DateTime.parse(raw_issue["published"]).to_formatted_s(:long)
@@ -116,7 +99,8 @@ module Gitlab
end
end
- issue = project.issues.create!(
+ issue = Issue.create!(
+ project_id: project.id,
title: raw_issue["title"],
description: body,
author_id: project.creator_id,
@@ -125,39 +109,46 @@ module Gitlab
)
issue.add_labels_by_names(labels)
+ if issue.iid != raw_issue["id"]
+ issue.update_attribute(:iid, raw_issue["id"])
+ end
+
import_issue_comments(issue, comments)
end
-
- deleted_issues.each(&:destroy!)
end
def import_issue_comments(issue, comments)
- comments.each do |raw_comment|
- next if raw_comment.has_key?("deletedBy")
-
- content = format_content(raw_comment["content"])
- updates = format_updates(raw_comment["updates"])
- attachments = format_attachments(issue.iid, raw_comment["id"], raw_comment["attachments"])
-
- next if content.blank? && updates.blank? && attachments.blank?
-
- author = user_map[raw_comment["author"]["name"]]
- date = DateTime.parse(raw_comment["published"]).to_formatted_s(:long)
-
- body = format_issue_comment_body(
- raw_comment["id"],
- author,
- date,
- content,
- updates,
- attachments
- )
+ Note.transaction do
+ while raw_comment = comments.shift
+ next if raw_comment.has_key?("deletedBy")
+
+ content = format_content(raw_comment["content"])
+ updates = format_updates(raw_comment["updates"])
+ attachments = format_attachments(issue.iid, raw_comment["id"], raw_comment["attachments"])
+
+ next if content.blank? && updates.blank? && attachments.blank?
+
+ author = user_map[raw_comment["author"]["name"]]
+ date = DateTime.parse(raw_comment["published"]).to_formatted_s(:long)
+
+ body = format_issue_comment_body(
+ raw_comment["id"],
+ author,
+ date,
+ content,
+ updates,
+ attachments
+ )
- issue.notes.create!(
- project_id: project.id,
- author_id: project.creator_id,
- note: body
- )
+ # Needs to match order of `comment_columns` below.
+ Note.create!(
+ project_id: project.id,
+ noteable_type: "Issue",
+ noteable_id: issue.id,
+ author_id: project.creator_id,
+ note: body
+ )
+ end
end
end
@@ -236,7 +227,7 @@ module Gitlab
def create_label(name)
color = nice_label_color(name)
- project.labels.create!(name: name, color: color)
+ Label.create!(project_id: project.id, name: name, color: color)
end
def format_content(raw_content)