Commit f37fe2ed authored by Yorick Peterse's avatar Yorick Peterse

Support importing GH projects without rate limits

GitHub Enterprise disables rate limiting for the API, resulting in HTTP
404 errors when requesting rate limiting details. This changes
Gitlab::GithubImport::Client so it can deal with rate limiting being
disabled.
parent 48cb1c50
...@@ -129,6 +129,8 @@ module Gitlab ...@@ -129,6 +129,8 @@ module Gitlab
# whether we are running in parallel mode or not. For more information see # whether we are running in parallel mode or not. For more information see
# `#rate_or_wait_for_rate_limit`. # `#rate_or_wait_for_rate_limit`.
def with_rate_limit def with_rate_limit
return yield unless rate_limiting_enabled?
request_count_counter.increment request_count_counter.increment
raise_or_wait_for_rate_limit unless requests_remaining? raise_or_wait_for_rate_limit unless requests_remaining?
...@@ -170,6 +172,10 @@ module Gitlab ...@@ -170,6 +172,10 @@ module Gitlab
octokit.rate_limit.resets_in + 5 octokit.rate_limit.resets_in + 5
end end
def rate_limiting_enabled?
@rate_limiting_enabled ||= api_endpoint.include?('.github.com')
end
def api_endpoint def api_endpoint
custom_api_endpoint || default_api_endpoint custom_api_endpoint || default_api_endpoint
end end
......
...@@ -185,6 +185,17 @@ describe Gitlab::GithubImport::Client do ...@@ -185,6 +185,17 @@ describe Gitlab::GithubImport::Client do
client.with_rate_limit { } client.with_rate_limit { }
end end
it 'ignores rate limiting when disabled' do
expect(client)
.to receive(:rate_limiting_enabled?)
.and_return(false)
expect(client)
.not_to receive(:requests_remaining?)
expect(client.with_rate_limit { 10 }).to eq(10)
end
end end
describe '#requests_remaining?' do describe '#requests_remaining?' do
...@@ -362,4 +373,20 @@ describe Gitlab::GithubImport::Client do ...@@ -362,4 +373,20 @@ describe Gitlab::GithubImport::Client do
end end
end end
end end
describe '#rate_limiting_enabled?' do
let(:client) { described_class.new('foo') }
it 'returns true when using GitHub.com' do
expect(client.rate_limiting_enabled?).to eq(true)
end
it 'returns false for GitHub enterprise installations' do
expect(client)
.to receive(:api_endpoint)
.and_return('https://github.kittens.com/')
expect(client.rate_limiting_enabled?).to eq(false)
end
end
end end
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