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
path: root/lib
diff options
context:
space:
mode:
authorDouglas Barbosa Alexandre <dbalexandre@gmail.com>2015-12-24 01:02:59 +0300
committerDouglas Barbosa Alexandre <dbalexandre@gmail.com>2016-01-05 20:24:55 +0300
commit98909dd12cd27b85921962326bcaf651c092dcd5 (patch)
treed378e4f031284829c6304fcad63d07d80b47b012 /lib
parentdc72a8b30502dd28bf850c2dfdbf31b687fde5d3 (diff)
Generate separate comments when importing GitHub Issues into GitLab
Diffstat (limited to 'lib')
-rw-r--r--lib/gitlab/github_import/base_formatter.rb21
-rw-r--r--lib/gitlab/github_import/comment_formatter.rb (renamed from lib/gitlab/github_import/comment.rb)18
-rw-r--r--lib/gitlab/github_import/importer.rb59
-rw-r--r--lib/gitlab/github_import/issue_formatter.rb66
-rw-r--r--lib/gitlab/github_import/pull_request_formatter.rb (renamed from lib/gitlab/github_import/pull_request.rb)22
5 files changed, 114 insertions, 72 deletions
diff --git a/lib/gitlab/github_import/base_formatter.rb b/lib/gitlab/github_import/base_formatter.rb
new file mode 100644
index 00000000000..202263c6742
--- /dev/null
+++ b/lib/gitlab/github_import/base_formatter.rb
@@ -0,0 +1,21 @@
+module Gitlab
+ module GithubImport
+ class BaseFormatter
+ attr_reader :formatter, :project, :raw_data
+
+ def initialize(project, raw_data)
+ @project = project
+ @raw_data = raw_data
+ @formatter = Gitlab::ImportFormatter.new
+ end
+
+ private
+
+ def gl_user_id(github_id)
+ User.joins(:identities).
+ find_by("identities.extern_uid = ? AND identities.provider = 'github'", github_id.to_s).
+ try(:id)
+ end
+ end
+ end
+end
diff --git a/lib/gitlab/github_import/comment.rb b/lib/gitlab/github_import/comment_formatter.rb
index 55de78f889d..7d58e53991a 100644
--- a/lib/gitlab/github_import/comment.rb
+++ b/lib/gitlab/github_import/comment_formatter.rb
@@ -1,14 +1,6 @@
module Gitlab
module GithubImport
- class Comment
- attr_reader :project, :raw_data
-
- def initialize(project, raw_data)
- @project = project
- @raw_data = raw_data
- @formatter = Gitlab::ImportFormatter.new
- end
-
+ class CommentFormatter < BaseFormatter
def attributes
{
project: project,
@@ -46,13 +38,7 @@ module Gitlab
end
def note
- @formatter.author_line(author) + body
- end
-
- def gl_user_id(github_id)
- User.joins(:identities).
- find_by("identities.extern_uid = ? AND identities.provider = 'github'", github_id.to_s).
- try(:id)
+ formatter.author_line(author) + body
end
end
end
diff --git a/lib/gitlab/github_import/importer.rb b/lib/gitlab/github_import/importer.rb
index 7c495655012..38ca7372202 100644
--- a/lib/gitlab/github_import/importer.rb
+++ b/lib/gitlab/github_import/importer.rb
@@ -21,29 +21,17 @@ module Gitlab
private
def import_issues
- # Issues && Comments
client.list_issues(project.import_source, state: :all,
sort: :created,
- direction: :asc).each do |issue|
- if issue.pull_request.nil?
+ direction: :asc).each do |raw_data|
+ gh_issue = IssueFormatter.new(project, raw_data)
- body = @formatter.author_line(issue.user.login)
- body += issue.body || ""
+ if gh_issue.valid?
+ issue = Issue.create!(gh_issue.attributes)
- if issue.comments > 0
- body += @formatter.comments_header
-
- client.issue_comments(project.import_source, issue.number).each do |c|
- body += @formatter.comment(c.user.login, c.created_at, c.body)
- end
+ if gh_issue.has_comments?
+ import_comments(gh_issue.number, issue)
end
-
- project.issues.create!(
- description: body,
- title: issue.title,
- state: issue.state == 'closed' ? 'closed' : 'opened',
- author_id: gl_author_id(project, issue.user.id)
- )
end
end
end
@@ -52,39 +40,30 @@ module Gitlab
client.pull_requests(project.import_source, state: :all,
sort: :created,
direction: :asc).each do |raw_data|
- pull_request = PullRequest.new(project, raw_data)
+ pull_request = PullRequestFormatter.new(project, raw_data)
if pull_request.valid?
merge_request = MergeRequest.create!(pull_request.attributes)
- import_comments_on_pull_request(merge_request, raw_data)
- import_comments_on_pull_request_diff(merge_request, raw_data)
+ import_comments(pull_request.number, merge_request)
+ import_comments_on_diff(pull_request.number, merge_request)
end
end
end
- def import_comments_on_pull_request(merge_request, pull_request)
- client.issue_comments(project.import_source, pull_request.number).each do |raw_data|
- comment = Comment.new(project, raw_data)
- merge_request.notes.create!(comment.attributes)
- end
- end
-
- def import_comments_on_pull_request_diff(merge_request, pull_request)
- client.pull_request_comments(project.import_source, pull_request.number).each do |raw_data|
- comment = Comment.new(project, raw_data)
- merge_request.notes.create!(comment.attributes)
- end
+ def import_comments(issue_number, noteable)
+ comments = client.issue_comments(project.import_source, issue_number)
+ create_comments(comments, noteable)
end
- def gl_author_id(project, github_id)
- gl_user_id(github_id) || project.creator_id
+ def import_comments_on_diff(pull_request_number, merge_request)
+ comments = client.pull_request_comments(project.import_source, pull_request_number)
+ create_comments(comments, merge_request)
end
- def gl_user_id(github_id)
- if github_id
- User.joins(:identities).
- find_by("identities.extern_uid = ? AND identities.provider = 'github'", github_id.to_s).
- try(:id)
+ def create_comments(comments, noteable)
+ comments.each do |raw_data|
+ comment = CommentFormatter.new(project, raw_data)
+ noteable.notes.create!(comment.attributes)
end
end
end
diff --git a/lib/gitlab/github_import/issue_formatter.rb b/lib/gitlab/github_import/issue_formatter.rb
new file mode 100644
index 00000000000..1e3ba44f27c
--- /dev/null
+++ b/lib/gitlab/github_import/issue_formatter.rb
@@ -0,0 +1,66 @@
+module Gitlab
+ module GithubImport
+ class IssueFormatter < BaseFormatter
+ def attributes
+ {
+ project: project,
+ title: raw_data.title,
+ description: description,
+ state: state,
+ author_id: author_id,
+ assignee_id: assignee_id,
+ created_at: raw_data.created_at,
+ updated_at: updated_at
+ }
+ end
+
+ def has_comments?
+ raw_data.comments > 0
+ end
+
+ def number
+ raw_data.number
+ end
+
+ def valid?
+ raw_data.pull_request.nil?
+ end
+
+ private
+
+ def assigned?
+ raw_data.assignee.present?
+ end
+
+ def assignee_id
+ if assigned?
+ gl_user_id(raw_data.assignee.id)
+ end
+ end
+
+ def author
+ raw_data.user.login
+ end
+
+ def author_id
+ gl_user_id(raw_data.user.id) || project.creator_id
+ end
+
+ def body
+ raw_data.body || ""
+ end
+
+ def description
+ @formatter.author_line(author) + body
+ end
+
+ def state
+ raw_data.state == 'closed' ? 'closed' : 'opened'
+ end
+
+ def updated_at
+ state == 'closed' ? raw_data.closed_at : raw_data.updated_at
+ end
+ end
+ end
+end
diff --git a/lib/gitlab/github_import/pull_request.rb b/lib/gitlab/github_import/pull_request_formatter.rb
index 61e846472f2..42dc09c2ac5 100644
--- a/lib/gitlab/github_import/pull_request.rb
+++ b/lib/gitlab/github_import/pull_request_formatter.rb
@@ -1,14 +1,6 @@
module Gitlab
module GithubImport
- class PullRequest
- attr_reader :project, :raw_data
-
- def initialize(project, raw_data)
- @project = project
- @raw_data = raw_data
- @formatter = Gitlab::ImportFormatter.new
- end
-
+ class PullRequestFormatter < BaseFormatter
def attributes
{
title: raw_data.title,
@@ -25,6 +17,10 @@ module Gitlab
}
end
+ def number
+ raw_data.number
+ end
+
def valid?
source_branch.present? && target_branch.present?
end
@@ -54,7 +50,7 @@ module Gitlab
end
def description
- @formatter.author_line(author) + body
+ formatter.author_line(author) + body
end
def source_project
@@ -92,12 +88,6 @@ module Gitlab
raw_data.updated_at
end
end
-
- def gl_user_id(github_id)
- User.joins(:identities).
- find_by("identities.extern_uid = ? AND identities.provider = 'github'", github_id.to_s).
- try(:id)
- end
end
end
end