2015-02-17 15:59:50 +00:00
|
|
|
module Gitlab
|
|
|
|
module BitbucketImport
|
2016-03-28 14:35:03 +00:00
|
|
|
class Importer
|
|
|
|
attr_reader :project, :client
|
|
|
|
|
|
|
|
def initialize(project)
|
|
|
|
@project = project
|
2016-08-22 19:13:56 +00:00
|
|
|
@client = Bitbucket::Client.new(project.import_data.credentials)
|
2016-03-28 14:35:03 +00:00
|
|
|
@formatter = Gitlab::ImportFormatter.new
|
|
|
|
end
|
2015-02-17 15:59:50 +00:00
|
|
|
|
|
|
|
def execute
|
2016-08-22 19:13:56 +00:00
|
|
|
import_issues
|
2016-08-22 19:15:39 +00:00
|
|
|
import_pull_requests
|
2015-02-17 15:59:50 +00:00
|
|
|
|
2016-01-21 18:53:34 +00:00
|
|
|
true
|
|
|
|
end
|
2015-02-17 15:59:50 +00:00
|
|
|
|
2016-01-21 18:53:34 +00:00
|
|
|
private
|
|
|
|
|
2016-09-08 00:44:58 +00:00
|
|
|
def gitlab_user_id(project, bitbucket_id)
|
2016-01-21 18:53:34 +00:00
|
|
|
if bitbucket_id
|
|
|
|
user = User.joins(:identities).find_by("identities.extern_uid = ? AND identities.provider = 'bitbucket'", bitbucket_id.to_s)
|
|
|
|
(user && user.id) || project.creator_id
|
|
|
|
else
|
|
|
|
project.creator_id
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2016-08-22 19:13:56 +00:00
|
|
|
def repo
|
|
|
|
@repo ||= client.repo(project.import_source)
|
2016-01-21 18:53:34 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
def import_issues
|
2016-08-22 19:13:56 +00:00
|
|
|
return unless repo.has_issues?
|
|
|
|
|
|
|
|
client.issues(repo).each do |issue|
|
|
|
|
description = @formatter.author_line(issue.author)
|
|
|
|
description += issue.description
|
|
|
|
|
|
|
|
issue = project.issues.create(
|
|
|
|
iid: issue.iid,
|
|
|
|
title: issue.title,
|
|
|
|
description: description,
|
|
|
|
state: issue.state,
|
2016-11-12 00:33:28 +00:00
|
|
|
author_id: gitlab_user_id(project, issue.author),
|
2016-08-22 19:13:56 +00:00
|
|
|
created_at: issue.created_at,
|
|
|
|
updated_at: issue.updated_at
|
|
|
|
)
|
2015-09-01 00:03:09 +00:00
|
|
|
|
2016-08-22 19:13:56 +00:00
|
|
|
if issue.persisted?
|
|
|
|
client.issue_comments(repo, issue.iid).each do |comment|
|
|
|
|
note = @formatter.author_line(comment.author)
|
|
|
|
note += comment.note
|
|
|
|
|
|
|
|
issue.notes.create!(
|
|
|
|
project: project,
|
|
|
|
note: note,
|
2016-11-12 00:33:28 +00:00
|
|
|
author_id: gitlab_user_id(project, comment.author),
|
2016-08-22 19:13:56 +00:00
|
|
|
created_at: comment.created_at,
|
|
|
|
updated_at: comment.updated_at
|
|
|
|
)
|
2015-09-01 00:03:09 +00:00
|
|
|
end
|
2015-02-17 15:59:50 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
project.issues.create!(
|
2015-08-07 07:06:20 +00:00
|
|
|
description: body,
|
2015-02-17 15:59:50 +00:00
|
|
|
title: issue["title"],
|
2016-02-22 23:59:13 +00:00
|
|
|
state: %w(resolved invalid duplicate wontfix closed).include?(issue["status"]) ? 'closed' : 'opened',
|
2016-09-08 00:44:58 +00:00
|
|
|
author_id: gitlab_user_id(project, reporter)
|
2015-02-17 15:59:50 +00:00
|
|
|
)
|
|
|
|
end
|
2016-08-22 19:13:56 +00:00
|
|
|
rescue ActiveRecord::RecordInvalid
|
|
|
|
nil
|
2015-02-17 15:59:50 +00:00
|
|
|
end
|
2016-08-22 19:15:39 +00:00
|
|
|
|
|
|
|
def import_pull_requests
|
|
|
|
pull_requests = client.pull_requests(repo)
|
|
|
|
|
|
|
|
pull_requests.each do |pull_request|
|
|
|
|
begin
|
|
|
|
description = @formatter.author_line(pull_request.author)
|
|
|
|
description += pull_request.description
|
|
|
|
|
|
|
|
project.merge_requests.create(
|
|
|
|
iid: pull_request.iid,
|
|
|
|
title: pull_request.title,
|
|
|
|
description: description,
|
|
|
|
source_project: project,
|
|
|
|
source_branch: pull_request.source_branch_name,
|
|
|
|
source_branch_sha: pull_request.source_branch_sha,
|
|
|
|
target_project: project,
|
|
|
|
target_branch: pull_request.target_branch_name,
|
|
|
|
target_branch_sha: pull_request.target_branch_sha,
|
|
|
|
state: pull_request.state,
|
2016-11-12 00:33:28 +00:00
|
|
|
author_id: gitlab_user_id(project, pull_request.author),
|
2016-08-22 19:15:39 +00:00
|
|
|
assignee_id: nil,
|
|
|
|
created_at: pull_request.created_at,
|
|
|
|
updated_at: pull_request.updated_at
|
|
|
|
)
|
|
|
|
rescue ActiveRecord::RecordInvalid
|
|
|
|
nil
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
2015-02-17 15:59:50 +00:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|