Commit e30bfb80 authored by Ahmad Sherif's avatar Ahmad Sherif

Import all GitHub comments after importing issues and PRs

parent dbcbbf26
...@@ -24,6 +24,7 @@ module Gitlab ...@@ -24,6 +24,7 @@ module Gitlab
import_milestones import_milestones
import_issues import_issues
import_pull_requests import_pull_requests
import_comments
import_wiki import_wiki
import_releases import_releases
handle_errors handle_errors
...@@ -80,7 +81,6 @@ module Gitlab ...@@ -80,7 +81,6 @@ module Gitlab
begin begin
issue = gh_issue.create! issue = gh_issue.create!
apply_labels(issue, raw) apply_labels(issue, raw)
import_comments(issue) if gh_issue.has_comments?
rescue => e rescue => e
errors << { type: :issue, url: Gitlab::UrlSanitizer.sanitize(raw.url), errors: e.message } errors << { type: :issue, url: Gitlab::UrlSanitizer.sanitize(raw.url), errors: e.message }
end end
...@@ -101,8 +101,6 @@ module Gitlab ...@@ -101,8 +101,6 @@ module Gitlab
merge_request = pull_request.create! merge_request = pull_request.create!
apply_labels(merge_request, raw) apply_labels(merge_request, raw)
import_comments(merge_request)
import_comments_on_diff(merge_request)
rescue => e rescue => e
errors << { type: :pull_request, url: Gitlab::UrlSanitizer.sanitize(pull_request.url), errors: e.message } errors << { type: :pull_request, url: Gitlab::UrlSanitizer.sanitize(pull_request.url), errors: e.message }
ensure ensure
...@@ -143,21 +141,26 @@ module Gitlab ...@@ -143,21 +141,26 @@ module Gitlab
end end
end end
def import_comments(issuable) def import_comments
comments = client.issue_comments(repo, issuable.iid, per_page: 100) client.issues_comments(repo, per_page: 100) do |comments|
create_comments(issuable, comments) create_comments(comments, :issue)
end end
def import_comments_on_diff(merge_request) client.pull_requests_comments(repo, per_page: 100) do |comments|
comments = client.pull_request_comments(repo, merge_request.iid, per_page: 100) create_comments(comments, :pull_request)
create_comments(merge_request, comments) end
end end
def create_comments(issuable, comments) def create_comments(comments, issuable_type)
ActiveRecord::Base.no_touching do ActiveRecord::Base.no_touching do
comments.each do |raw| comments.each do |raw|
begin begin
comment = CommentFormatter.new(project, raw) comment = CommentFormatter.new(project, raw)
issuable_class = issuable_type == :issue ? Issue : MergeRequest
iid = raw.send("#{issuable_type}_url").split('/').last # GH doesn't return parent ID directly
issuable = issuable_class.find_by_iid(iid)
next unless issuable
issuable.notes.create!(comment.attributes) issuable.notes.create!(comment.attributes)
rescue => e rescue => e
errors << { type: :comment, url: Gitlab::UrlSanitizer.sanitize(raw.url), errors: e.message } errors << { type: :comment, url: Gitlab::UrlSanitizer.sanitize(raw.url), errors: e.message }
......
...@@ -132,6 +132,8 @@ describe Gitlab::GithubImport::Importer, lib: true do ...@@ -132,6 +132,8 @@ describe Gitlab::GithubImport::Importer, lib: true do
allow_any_instance_of(Octokit::Client).to receive(:milestones).and_return([milestone, milestone]) allow_any_instance_of(Octokit::Client).to receive(:milestones).and_return([milestone, milestone])
allow_any_instance_of(Octokit::Client).to receive(:issues).and_return([issue1, issue2]) allow_any_instance_of(Octokit::Client).to receive(:issues).and_return([issue1, issue2])
allow_any_instance_of(Octokit::Client).to receive(:pull_requests).and_return([pull_request, pull_request]) allow_any_instance_of(Octokit::Client).to receive(:pull_requests).and_return([pull_request, pull_request])
allow_any_instance_of(Octokit::Client).to receive(:issues_comments).and_return([])
allow_any_instance_of(Octokit::Client).to receive(:pull_requests_comments).and_return([])
allow_any_instance_of(Octokit::Client).to receive(:last_response).and_return(double(rels: { next: nil })) allow_any_instance_of(Octokit::Client).to receive(:last_response).and_return(double(rels: { next: nil }))
allow_any_instance_of(Octokit::Client).to receive(:releases).and_return([release1, release2]) allow_any_instance_of(Octokit::Client).to receive(:releases).and_return([release1, release2])
allow_any_instance_of(Gitlab::Shell).to receive(:import_repository).and_raise(Gitlab::Shell::Error) allow_any_instance_of(Gitlab::Shell).to receive(:import_repository).and_raise(Gitlab::Shell::Error)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment