Skip to content
Snippets Groups Projects
Commit 8532dc0d authored by Douglas Barbosa Alexandre's avatar Douglas Barbosa Alexandre
Browse files

Import pull requests from GitHub where the source branch was removed

parent 61756ecc
No related branches found
No related tags found
No related merge requests found
Loading
@@ -3,12 +3,15 @@ module Gitlab
Loading
@@ -3,12 +3,15 @@ module Gitlab
class Importer class Importer
include Gitlab::ShellAdapter include Gitlab::ShellAdapter
   
attr_reader :project, :client attr_reader :client, :project, :repo, :repo_url
   
def initialize(project) def initialize(project)
@project = project @project = project
if import_data_credentials @repo = project.import_source
@client = Client.new(import_data_credentials[:user]) @repo_url = project.import_url
if credentials
@client = Client.new(credentials[:user])
@formatter = Gitlab::ImportFormatter.new @formatter = Gitlab::ImportFormatter.new
else else
raise Projects::ImportService::Error, "Unable to find project import data credentials for project ID: #{@project.id}" raise Projects::ImportService::Error, "Unable to find project import data credentials for project ID: #{@project.id}"
Loading
@@ -22,8 +25,8 @@ module Gitlab
Loading
@@ -22,8 +25,8 @@ module Gitlab
   
private private
   
def import_data_credentials def credentials
@import_data_credentials ||= project.import_data.credentials if project.import_data @credentials ||= project.import_data.credentials if project.import_data
end end
   
def import_labels def import_labels
Loading
@@ -68,22 +71,31 @@ module Gitlab
Loading
@@ -68,22 +71,31 @@ module Gitlab
end end
   
def import_pull_requests def import_pull_requests
client.pull_requests(project.import_source, state: :all, pull_requests = client.pull_requests(repo, state: :all, sort: :created, direction: :asc)
sort: :created, .map { |raw| PullRequestFormatter.new(project, raw) }
direction: :asc).each do |raw_data| .reject(&:cross_project?)
pull_request = PullRequestFormatter.new(project, raw_data)
source_branches_removed = pull_requests.reject(&:source_branch_exists?)
if pull_request.valid? source_branches_removed.each do |pull_request|
merge_request = MergeRequest.new(pull_request.attributes) client.create_ref(repo, "refs/heads/#{pull_request.source_branch}", pull_request.source_sha)
end
if merge_request.save
apply_labels(pull_request.number, merge_request) project.repository.fetch_ref(repo_url, '+refs/heads/*', 'refs/heads/*')
import_comments(pull_request.number, merge_request)
import_comments_on_diff(pull_request.number, merge_request) pull_requests.each do |pull_request|
end merge_request = MergeRequest.new(pull_request.attributes)
if merge_request.save
apply_labels(pull_request.number, merge_request)
import_comments(pull_request.number, merge_request)
import_comments_on_diff(pull_request.number, merge_request)
end end
end end
   
source_branches_removed.each do |pull_request|
client.delete_ref(repo, "heads/#{pull_request.source_branch}")
end
true true
rescue ActiveRecord::RecordInvalid => e rescue ActiveRecord::RecordInvalid => e
raise Projects::ImportService::Error, e.message raise Projects::ImportService::Error, e.message
Loading
Loading
Loading
@@ -7,7 +7,7 @@ module Gitlab
Loading
@@ -7,7 +7,7 @@ module Gitlab
title: raw_data.title, title: raw_data.title,
description: description, description: description,
source_project: source_project, source_project: source_project,
source_branch: source_branch.name, source_branch: source_branch,
target_project: target_project, target_project: target_project,
target_branch: target_branch.name, target_branch: target_branch.name,
state: state, state: state,
Loading
@@ -27,6 +27,22 @@ module Gitlab
Loading
@@ -27,6 +27,22 @@ module Gitlab
!cross_project? && source_branch.present? && target_branch.present? !cross_project? && source_branch.present? && target_branch.present?
end end
   
def cross_project?
source_repo.present? && target_repo.present? && source_repo.id != target_repo.id
end
def source_branch_exists?
source_project.repository.branch_names.include?(source_branch)
end
def source_branch
raw_data.head.ref
end
def source_sha
raw_data.head.sha
end
private private
   
def assigned? def assigned?
Loading
@@ -51,10 +67,6 @@ module Gitlab
Loading
@@ -51,10 +67,6 @@ module Gitlab
raw_data.body || "" raw_data.body || ""
end end
   
def cross_project?
source_repo.present? && target_repo.present? && source_repo.id != target_repo.id
end
def description def description
formatter.author_line(author) + body formatter.author_line(author) + body
end end
Loading
@@ -73,10 +85,6 @@ module Gitlab
Loading
@@ -73,10 +85,6 @@ module Gitlab
raw_data.head.repo raw_data.head.repo
end end
   
def source_branch
source_project.repository.find_branch(raw_data.head.ref)
end
def target_project def target_project
project project
end end
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment