Fix Bitbucket Server import only including first 25 pull requests
The change to paginate repos in https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/22825 caused the paginator to stop after 25 pull requests because the limit was set to 25 if none was defined. To fix this, we should only stop if the limit has actually been set and use the limit parameter to determine the maximum number of items to process per page. Closes https://gitlab.com/gitlab-org/gitlab-ce/issues/55914
This commit is contained in:
parent
d432d67414
commit
a06b7a7d5d
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: Fix Bitbucket Server import only including first 25 pull requests
|
||||
merge_request: 24178
|
||||
author:
|
||||
type: fixed
|
|
@ -12,7 +12,7 @@ module BitbucketServer
|
|||
@url = url
|
||||
@page = nil
|
||||
@page_offset = page_offset
|
||||
@limit = limit || PAGE_LENGTH
|
||||
@limit = limit
|
||||
@total = 0
|
||||
end
|
||||
|
||||
|
@ -34,6 +34,8 @@ module BitbucketServer
|
|||
attr_reader :connection, :page, :url, :type, :limit
|
||||
|
||||
def over_limit?
|
||||
return false unless @limit
|
||||
|
||||
@limit.positive? && @total >= @limit
|
||||
end
|
||||
|
||||
|
@ -42,11 +44,15 @@ module BitbucketServer
|
|||
end
|
||||
|
||||
def starting_offset
|
||||
[0, page_offset - 1].max * limit
|
||||
[0, page_offset - 1].max * max_per_page
|
||||
end
|
||||
|
||||
def max_per_page
|
||||
limit || PAGE_LENGTH
|
||||
end
|
||||
|
||||
def fetch_next_page
|
||||
parsed_response = connection.get(@url, start: next_offset, limit: @limit)
|
||||
parsed_response = connection.get(@url, start: next_offset, limit: max_per_page)
|
||||
Page.new(parsed_response, type)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -30,6 +30,17 @@ describe BitbucketServer::Paginator do
|
|||
expect { limited.items }.to raise_error(StopIteration)
|
||||
end
|
||||
|
||||
it 'does not stop if limit is unspecified' do
|
||||
stub_const("BitbucketServer::Paginator::PAGE_LENGTH", 1)
|
||||
paginator = described_class.new(connection, 'http://more-data', :pull_request, page_offset: 0, limit: nil)
|
||||
allow(paginator).to receive(:fetch_next_page).and_return(first_page, last_page)
|
||||
|
||||
expect(paginator.has_next_page?).to be_truthy
|
||||
expect(paginator.items).to match(['item_1'])
|
||||
expect(paginator.has_next_page?).to be_truthy
|
||||
expect(paginator.items).to match(['item_2'])
|
||||
end
|
||||
|
||||
it 'calls the connection with different offsets' do
|
||||
expect(connection).to receive(:get).with('http://more-data', start: 0, limit: BitbucketServer::Paginator::PAGE_LENGTH).and_return(page_attrs)
|
||||
|
||||
|
|
Loading…
Reference in New Issue