Commit 4af1c77b authored by Rémy Coutable's avatar Rémy Coutable

Merge branch 'sh-fix-issue-55914' into 'master'

Fix Bitbucket Server import only including first 25 pull requests

Closes #55914

See merge request gitlab-org/gitlab-ce!24178
parents e1dc0b09 a06b7a7d
---
title: Fix Bitbucket Server import only including first 25 pull requests
merge_request: 24178
author:
type: fixed
...@@ -12,7 +12,7 @@ module BitbucketServer ...@@ -12,7 +12,7 @@ module BitbucketServer
@url = url @url = url
@page = nil @page = nil
@page_offset = page_offset @page_offset = page_offset
@limit = limit || PAGE_LENGTH @limit = limit
@total = 0 @total = 0
end end
...@@ -34,6 +34,8 @@ module BitbucketServer ...@@ -34,6 +34,8 @@ module BitbucketServer
attr_reader :connection, :page, :url, :type, :limit attr_reader :connection, :page, :url, :type, :limit
def over_limit? def over_limit?
return false unless @limit
@limit.positive? && @total >= @limit @limit.positive? && @total >= @limit
end end
...@@ -42,11 +44,15 @@ module BitbucketServer ...@@ -42,11 +44,15 @@ module BitbucketServer
end end
def starting_offset 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 end
def fetch_next_page 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) Page.new(parsed_response, type)
end end
end end
......
...@@ -30,6 +30,17 @@ describe BitbucketServer::Paginator do ...@@ -30,6 +30,17 @@ describe BitbucketServer::Paginator do
expect { limited.items }.to raise_error(StopIteration) expect { limited.items }.to raise_error(StopIteration)
end 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 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) expect(connection).to receive(:get).with('http://more-data', start: 0, limit: BitbucketServer::Paginator::PAGE_LENGTH).and_return(page_attrs)
......
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