summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZeger-Jan van de Weg <git@zjvandeweg.nl>2018-01-16 11:12:08 +0100
committerZeger-Jan van de Weg <git@zjvandeweg.nl>2018-01-22 14:56:28 +0100
commita29f0c28fd07ba14f0d0e5fb9c878a2eb117e388 (patch)
tree525e55775c657cb01aab5aa1ec63d60105f72977
parentbd96f2d6e351229b888bf4f41f39a082d2ac16cd (diff)
downloadgitlab-ce-a29f0c28fd07ba14f0d0e5fb9c878a2eb117e388.tar.gz
Allow pagination for WikiVersions on Gitaly request
-rw-r--r--Gemfile.lock4
-rw-r--r--lib/gitlab/git/wiki.rb32
-rw-r--r--lib/gitlab/gitaly_client/wiki_service.rb26
3 files changed, 19 insertions, 43 deletions
diff --git a/Gemfile.lock b/Gemfile.lock
index 284e1e7654d..d69c532b309 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -285,7 +285,7 @@ GEM
po_to_json (>= 1.0.0)
rails (>= 3.2.0)
gherkin-ruby (0.3.2)
- gitaly-proto (0.73.0)
+ gitaly-proto (0.74.0)
google-protobuf (~> 3.1)
grpc (~> 1.0)
github-linguist (4.7.6)
@@ -1056,7 +1056,7 @@ DEPENDENCIES
gettext (~> 3.2.2)
gettext_i18n_rails (~> 1.8.0)
gettext_i18n_rails_js (~> 1.2.0)
- gitaly-proto (~> 0.73.0)
+ gitaly-proto (~> 0.74.0)
github-linguist (~> 4.7.0)
gitlab-flowdock-git-hook (~> 1.0.1)
gitlab-markup (~> 1.6.2)
diff --git a/lib/gitlab/git/wiki.rb b/lib/gitlab/git/wiki.rb
index 305bc9b66b0..4ed78daa443 100644
--- a/lib/gitlab/git/wiki.rb
+++ b/lib/gitlab/git/wiki.rb
@@ -93,15 +93,15 @@ module Gitlab
# :per_page - The number of items per page.
# :limit - Total number of items to return.
def page_versions(page_path, options = {})
- puts '-' * 80
- puts options
- puts '-' * 80
- puts
-
- byebug
@repository.gitaly_migrate(:wiki_page_versions) do |is_enabled|
if is_enabled
- gitaly_wiki_client.page_versions(page_path, pagination_params(options))
+ versions = gitaly_wiki_client.page_versions(page_path, options)
+
+ # Gitaly uses gollum-lib to get the versions. Gollum defaults to 20
+ # per page, but also fetches 20 if `limit` or `per_page` < 20.
+ # Slicing returns an array with the expected number of items.
+ slice_bound = options[:limit] || options[:per_page] || Gollum::Page.per_page
+ versions[0..slice_bound]
else
current_page = gollum_page_by_path(page_path)
@@ -136,21 +136,15 @@ module Gitlab
# :per_page - The number of items per page.
# :limit - Total number of items to return.
def commits_from_page(gollum_page, options = {})
- pagination_options = pagination_params(options)
+ unless options[:limit]
+ options[:offset] = ([1, options.delete(:page).to_i].max - 1) * Gollum::Page.per_page
+ options[:limit] = (options.delete(:per_page) || Gollum::Page.per_page).to_i
+ end
@repository.log(ref: gollum_page.last_version.id,
path: gollum_page.path,
- limit: pagination_options[:limit],
- offset: pagination_options[:offset])
- end
-
- def pagination_params(options)
- return options if options[:limit]
-
- options = options.dup
- options[:offset] = ([1, options.delete(:page).to_i].max - 1) * Gollum::Page.per_page
- options[:limit] = (options.delete(:per_page) || Gollum::Page.per_page).to_i
- options
+ limit: options[:limit],
+ offset: options[:offset])
end
def gollum_wiki
diff --git a/lib/gitlab/gitaly_client/wiki_service.rb b/lib/gitlab/gitaly_client/wiki_service.rb
index fa7e416504d..a98c3c0b160 100644
--- a/lib/gitlab/gitaly_client/wiki_service.rb
+++ b/lib/gitlab/gitaly_client/wiki_service.rb
@@ -108,38 +108,20 @@ module Gitlab
def page_versions(page_path, options)
request = Gitaly::WikiGetPageVersionsRequest.new(
repository: @gitaly_repo,
- page_path: encode_binary(page_path)
+ page_path: encode_binary(page_path),
+ page: options[:page] || 1,
+ per_page: options[:per_page] || Gollum::Page.per_page
)
- min_index = options[:offset].to_i
- max_index = min_index + options[:limit].to_i
- byebug
-
stream = GitalyClient.call(@repository.storage, :wiki_service, :wiki_get_page_versions, request)
- version_index = 0
versions = []
-
- # Allow limit and offset to be send to Gitaly: TODO
stream.each do |message|
- puts 'ยง' * 80
- puts version_index
-
message.versions.each do |version|
- case version_index
- when min_index...max_index
- versions << new_wiki_page_version(version)
- when max_index..Float::INFINITY
- return versions
- end
-
- version_index += 1
- puts version_index
+ versions << new_wiki_page_version(version)
end
end
- # when we're requesting page 99 but the stream doesn't go that far, whatever
- # is fetched thus far
versions
end