Commit a41481b8 authored by Robert Speicher's avatar Robert Speicher Committed by Robert Speicher

Merge branch 'gh-webhooks' into 'master'

Avoid that GitHub import fails when retrieving Webhooks for non GitHub admins

Closes #18729 

See merge request !4723
parent d8a668b7
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
%p %p
%i.fa.fa-warning %i.fa.fa-warning
To import GitHub pull requests, any pull request source branches that had been deleted are temporarily restored on GitHub. To prevent any connected CI services from being overloaded with dozens of irrelevant branches being created and deleted again, GitHub webhooks are temporarily disabled during the import process. To import GitHub pull requests, any pull request source branches that had been deleted are temporarily restored on GitHub. To prevent any connected CI services from being overloaded with dozens of irrelevant branches being created and deleted again, GitHub webhooks are temporarily disabled during the import process, but only if you have admin access to the GitHub repository.
%p.light %p.light
Select projects you want to import. Select projects you want to import.
......
...@@ -66,8 +66,7 @@ module Gitlab ...@@ -66,8 +66,7 @@ module Gitlab
end end
def import_pull_requests def import_pull_requests
hooks = client.hooks(repo).map { |raw| HookFormatter.new(raw) }.select(&:valid?) disable_webhooks
disable_webhooks(hooks)
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?)
...@@ -90,14 +89,14 @@ module Gitlab ...@@ -90,14 +89,14 @@ module Gitlab
raise Projects::ImportService::Error, e.message raise Projects::ImportService::Error, e.message
ensure ensure
clean_up_restored_branches(branches_removed) clean_up_restored_branches(branches_removed)
clean_up_disabled_webhooks(hooks) clean_up_disabled_webhooks
end end
def disable_webhooks(hooks) def disable_webhooks
update_webhooks(hooks, active: false) update_webhooks(hooks, active: false)
end end
def clean_up_disabled_webhooks(hooks) def clean_up_disabled_webhooks
update_webhooks(hooks, active: true) update_webhooks(hooks, active: true)
end end
...@@ -107,6 +106,20 @@ module Gitlab ...@@ -107,6 +106,20 @@ module Gitlab
end end
end end
def hooks
@hooks ||=
begin
client.hooks(repo).map { |raw| HookFormatter.new(raw) }.select(&:valid?)
# The GitHub Repository Webhooks API returns 404 for users
# without admin access to the repository when listing hooks.
# In this case we just want to return gracefully instead of
# spitting out an error and stop the import process.
rescue Octokit::NotFound
[]
end
end
def restore_branches(branches) def restore_branches(branches)
branches.each do |name, sha| branches.each do |name, sha|
client.create_ref(repo, "refs/heads/#{name}", sha) client.create_ref(repo, "refs/heads/#{name}", sha)
......
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