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

Remove SHA suffix for removed branches name when importing PR from GH

parent 1e736fb5
No related branches found
No related tags found
No related merge requests found
Loading
@@ -8,7 +8,7 @@ module Gitlab
Loading
@@ -8,7 +8,7 @@ module Gitlab
end end
   
def name def name
@name ||= exists? ? ref : "#{ref}-#{short_id}" ref
end end
   
def valid? def valid?
Loading
Loading
Loading
@@ -12,7 +12,6 @@ module Gitlab
Loading
@@ -12,7 +12,6 @@ module Gitlab
   
if credentials if credentials
@client = Client.new(credentials[:user]) @client = Client.new(credentials[:user])
@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}"
end end
Loading
@@ -69,43 +68,42 @@ module Gitlab
Loading
@@ -69,43 +68,42 @@ module Gitlab
pull_requests = client.pull_requests(repo, state: :all, sort: :created, direction: :asc, per_page: 100) pull_requests = client.pull_requests(repo, state: :all, sort: :created, direction: :asc, per_page: 100)
pull_requests = pull_requests.map { |raw| PullRequestFormatter.new(project, raw) }.select(&:valid?) pull_requests = pull_requests.map { |raw| PullRequestFormatter.new(project, raw) }.select(&:valid?)
   
source_branches_removed = pull_requests.reject(&:source_branch_exists?).map { |pr| [pr.source_branch_name, pr.number] }
target_branches_removed = pull_requests.reject(&:target_branch_exists?).map { |pr| [pr.target_branch_name, pr.target_branch_sha] }
branches_removed = source_branches_removed | target_branches_removed
restore_source_branches(source_branches_removed)
restore_target_branches(target_branches_removed)
pull_requests.each do |pull_request| pull_requests.each do |pull_request|
merge_request = pull_request.create! begin
apply_labels(merge_request) restore_source_branch(pull_request) unless pull_request.source_branch_exists?
import_comments(merge_request) restore_target_branch(pull_request) unless pull_request.target_branch_exists?
import_comments_on_diff(merge_request)
merge_request = pull_request.create!
apply_labels(merge_request)
import_comments(merge_request)
import_comments_on_diff(merge_request)
rescue ActiveRecord::RecordInvalid => e
raise Projects::ImportService::Error, e.message
ensure
clean_up_restored_branches(pull_request)
end
end end
   
true true
rescue ActiveRecord::RecordInvalid => e
raise Projects::ImportService::Error, e.message
ensure
clean_up_restored_branches(branches_removed)
end end
   
def restore_source_branches(branches) def restore_source_branch(pull_request)
branches.each do |name, number| project.repository.fetch_ref(repo_url, "pull/#{pull_request.number}/head", pull_request.source_branch_name)
project.repository.fetch_ref(repo_url, "pull/#{number}/head", name)
end
end end
   
def restore_target_branches(branches) def restore_target_branch(pull_request)
branches.each do |name, sha| project.repository.create_branch(pull_request.target_branch_name, pull_request.target_branch_sha)
project.repository.create_branch(name, sha)
end
end end
   
def clean_up_restored_branches(branches) def remove_branch(name)
branches.each do |name, _| project.repository.delete_branch(name)
project.repository.delete_branch(name) rescue Rugged::ReferenceError rescue Rugged::ReferenceError
end nil
end
def clean_up_restored_branches(pull_request)
remove_branch(pull_request.source_branch_name) unless pull_request.source_branch_exists?
remove_branch(pull_request.target_branch_name) unless pull_request.target_branch_exists?
   
project.repository.after_remove_branch project.repository.after_remove_branch
end end
Loading
Loading
Loading
@@ -33,17 +33,11 @@ describe Gitlab::GithubImport::BranchFormatter, lib: true do
Loading
@@ -33,17 +33,11 @@ describe Gitlab::GithubImport::BranchFormatter, lib: true do
end end
   
describe '#name' do describe '#name' do
it 'returns raw ref when branch exists' do it 'returns raw ref' do
branch = described_class.new(project, double(raw)) branch = described_class.new(project, double(raw))
   
expect(branch.name).to eq 'feature' expect(branch.name).to eq 'feature'
end end
it 'returns formatted ref when branch does not exist' do
branch = described_class.new(project, double(raw.merge(ref: 'removed-branch', sha: '2e5d3239642f9161dcbbc4b70a211a68e5e45e2b')))
expect(branch.name).to eq 'removed-branch-2e5d3239'
end
end end
   
describe '#repo' do describe '#repo' do
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