Import GitHub Pull Requests into GitLab

parent 8de1f715
...@@ -12,7 +12,16 @@ module Gitlab ...@@ -12,7 +12,16 @@ module Gitlab
end end
def execute def execute
#Issues && Comments import_issues
import_pull_requests
true
end
private
def import_issues
# Issues && Comments
client.list_issues(project.import_source, state: :all, client.list_issues(project.import_source, state: :all,
sort: :created, sort: :created,
direction: :asc).each do |issue| direction: :asc).each do |issue|
...@@ -33,18 +42,59 @@ module Gitlab ...@@ -33,18 +42,59 @@ module Gitlab
description: body, description: body,
title: issue.title, title: issue.title,
state: issue.state == 'closed' ? 'closed' : 'opened', state: issue.state == 'closed' ? 'closed' : 'opened',
author_id: gl_user_id(project, issue.user.id) author_id: gl_author_id(project, issue.user.id)
) )
end end
end end
end end
private def import_pull_requests
client.pull_requests(project.import_source, state: :all,
sort: :created,
direction: :asc).each do |pull_request|
body = @formatter.author_line(pull_request.user.login)
body += pull_request.body || ""
source_branch = pull_request.head.ref
target_branch = pull_request.base.ref
merge_request = MergeRequest.create!(
title: pull_request.title,
description: body,
source_project: project,
source_branch: source_branch,
target_project: project,
target_branch: target_branch,
state: merge_request_state(pull_request),
author_id: gl_author_id(project, pull_request.user.id),
assignee_id: gl_user_id(pull_request.assignee.try(:id)),
created_at: pull_request.created_at,
updated_at: pull_request.updated_at
)
end
end
def merge_request_state(pull_request)
case true
when pull_request.state == 'closed' && pull_request.merged_at.present?
'merged'
when pull_request.state == 'closed'
'closed'
else
'opened'
end
end
def gl_author_id(project, github_id)
gl_user_id(github_id) || project.creator_id
end
def gl_user_id(project, github_id) def gl_user_id(github_id)
user = User.joins(:identities). if github_id
find_by("identities.extern_uid = ? AND identities.provider = 'github'", github_id.to_s) User.joins(:identities).
(user && user.id) || project.creator_id find_by("identities.extern_uid = ? AND identities.provider = 'github'", github_id.to_s).
try(:id)
end
end end
end end
end end
......
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