mirror of
https://github.com/wahyd4/gitlabhq.git
synced 2026-08-15 07:36:41 +10:00
Merge branch 'gh-disable-webhooks'
This commit is contained in:
@@ -0,0 +1,23 @@
|
||||
module Gitlab
|
||||
module GithubImport
|
||||
class HookFormatter
|
||||
EVENTS = %w[* create delete pull_request push].freeze
|
||||
|
||||
attr_reader :raw
|
||||
|
||||
delegate :id, :name, :active, to: :raw
|
||||
|
||||
def initialize(raw)
|
||||
@raw = raw
|
||||
end
|
||||
|
||||
def config
|
||||
raw.config.attrs
|
||||
end
|
||||
|
||||
def valid?
|
||||
(EVENTS & raw.events).any? && active
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -109,6 +109,9 @@ module Gitlab
|
||||
end
|
||||
|
||||
def import_pull_requests
|
||||
hooks = client.hooks(repo).map { |raw| HookFormatter.new(raw) }.select(&:valid?)
|
||||
disable_webhooks(hooks)
|
||||
|
||||
pull_requests = paginate { 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?)
|
||||
|
||||
@@ -116,7 +119,7 @@ module Gitlab
|
||||
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
|
||||
|
||||
create_refs(branches_removed)
|
||||
restore_branches(branches_removed)
|
||||
|
||||
pull_requests.each do |pull_request|
|
||||
merge_request = pull_request.create!
|
||||
@@ -125,14 +128,29 @@ module Gitlab
|
||||
import_comments_on_diff(merge_request)
|
||||
end
|
||||
|
||||
delete_refs(branches_removed)
|
||||
|
||||
true
|
||||
rescue ActiveRecord::RecordInvalid => e
|
||||
raise Projects::ImportService::Error, e.message
|
||||
ensure
|
||||
clean_up_restored_branches(branches_removed)
|
||||
clean_up_disabled_webhooks(hooks)
|
||||
end
|
||||
|
||||
def create_refs(branches)
|
||||
def disable_webhooks(hooks)
|
||||
update_webhooks(hooks, active: false)
|
||||
end
|
||||
|
||||
def clean_up_disabled_webhooks(hooks)
|
||||
update_webhooks(hooks, active: true)
|
||||
end
|
||||
|
||||
def update_webhooks(hooks, options)
|
||||
hooks.each do |hook|
|
||||
client.edit_hook(repo, hook.id, hook.name, hook.config, options)
|
||||
end
|
||||
end
|
||||
|
||||
def restore_branches(branches)
|
||||
branches.each do |name, sha|
|
||||
sleep rate_limit_sleep_time if rate_limit_exceed?
|
||||
client.create_ref(repo, "refs/heads/#{name}", sha)
|
||||
@@ -141,7 +159,7 @@ module Gitlab
|
||||
project.repository.fetch_ref(repo_url, '+refs/heads/*', 'refs/heads/*')
|
||||
end
|
||||
|
||||
def delete_refs(branches)
|
||||
def clean_up_restored_branches(branches)
|
||||
branches.each do |name, _|
|
||||
sleep rate_limit_sleep_time if rate_limit_exceed?
|
||||
client.delete_ref(repo, "heads/#{name}")
|
||||
|
||||
Reference in New Issue
Block a user