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:
Stan Hu 2019-01-06 21:09:41 -08:00
parent d432d67414
commit a06b7a7d5d
3 changed files with 25 additions and 3 deletions

View File

@ -0,0 +1,5 @@
---
title: Fix Bitbucket Server import only including first 25 pull requests
merge_request: 24178
author:
type: fixed

View File

@ -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

View File

@ -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)