summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDouwe Maan <douwe@gitlab.com>2017-11-09 08:37:41 +0000
committerOswaldo Ferreira <oswaldo@gitlab.com>2017-11-10 19:26:55 +0000
commit355c59a35287b182dd02e4647d52411c22d81b6c (patch)
tree33199469feaabfd7f4eab20271ae4420a0069548
parent98baa929de998869095660474da0a89345d70993 (diff)
downloadgitlab-ce-355c59a35287b182dd02e4647d52411c22d81b6c.tar.gz
Merge branch 'github-rake-task-rate-limiting' into 'master'
Add GitHub enterprise support to the GitHub Rake task and better handle rate limiting being disabled See merge request gitlab-org/gitlab-ce!15284 (cherry picked from commit 760b2c75ef9d2c6acb655860dceae4c04cd8e5a7) 48cb1c50 Restore GH enterprise support in the Rake task f37fe2ed Support importing GH projects without rate limits
-rw-r--r--lib/gitlab/github_import/client.rb6
-rw-r--r--lib/tasks/import.rake6
-rw-r--r--spec/lib/gitlab/github_import/client_spec.rb27
3 files changed, 36 insertions, 3 deletions
diff --git a/lib/gitlab/github_import/client.rb b/lib/gitlab/github_import/client.rb
index c1c338487a7..5da9befa08e 100644
--- a/lib/gitlab/github_import/client.rb
+++ b/lib/gitlab/github_import/client.rb
@@ -129,6 +129,8 @@ module Gitlab
# whether we are running in parallel mode or not. For more information see
# `#rate_or_wait_for_rate_limit`.
def with_rate_limit
+ return yield unless rate_limiting_enabled?
+
request_count_counter.increment
raise_or_wait_for_rate_limit unless requests_remaining?
@@ -170,6 +172,10 @@ module Gitlab
octokit.rate_limit.resets_in + 5
end
+ def rate_limiting_enabled?
+ @rate_limiting_enabled ||= api_endpoint.include?('.github.com')
+ end
+
def api_endpoint
custom_api_endpoint || default_api_endpoint
end
diff --git a/lib/tasks/import.rake b/lib/tasks/import.rake
index 943cbe6d80c..aafbe52e5f8 100644
--- a/lib/tasks/import.rake
+++ b/lib/tasks/import.rake
@@ -101,8 +101,8 @@ end
class GithubRepos
def initialize(token, current_user, github_repo)
- @client = Octokit::Client
- .new(access_token: token, auto_paginate: true, per_page: 100)
+ @client = Gitlab::GithubImport::Client.new(token)
+ @client.octokit.auto_paginate = true
@current_user = current_user
@github_repo = github_repo
@@ -130,7 +130,7 @@ class GithubRepos
end
def repos
- @client.list_repositories
+ @client.octokit.list_repositories
end
end
diff --git a/spec/lib/gitlab/github_import/client_spec.rb b/spec/lib/gitlab/github_import/client_spec.rb
index 9cbd9bcc14e..5b2642d9473 100644
--- a/spec/lib/gitlab/github_import/client_spec.rb
+++ b/spec/lib/gitlab/github_import/client_spec.rb
@@ -185,6 +185,17 @@ describe Gitlab::GithubImport::Client do
client.with_rate_limit { }
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
describe '#requests_remaining?' do
@@ -362,4 +373,20 @@ describe Gitlab::GithubImport::Client do
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