Migrate Gitlab::Git::Wiki#page to Gitaly
Closes gitaly#677
This commit is contained in:
parent
bd33a8290a
commit
964cbb67da
4 changed files with 113 additions and 28 deletions
|
@ -58,14 +58,13 @@ module Gitlab
|
||||||
end
|
end
|
||||||
|
|
||||||
def page(title:, version: nil, dir: nil)
|
def page(title:, version: nil, dir: nil)
|
||||||
if version
|
@repository.gitaly_migrate(:wiki_find_page) do |is_enabled|
|
||||||
version = Gitlab::Git::Commit.find(@repository, version).id
|
if is_enabled
|
||||||
|
gitaly_find_page(title: title, version: version, dir: dir)
|
||||||
|
else
|
||||||
|
gollum_find_page(title: title, version: version, dir: dir)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
gollum_page = gollum_wiki.page(title, version, dir)
|
|
||||||
return unless gollum_page
|
|
||||||
|
|
||||||
new_page(gollum_page)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def file(name, version)
|
def file(name, version)
|
||||||
|
@ -146,6 +145,17 @@ module Gitlab
|
||||||
nil
|
nil
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def gollum_find_page(title:, version: nil, dir: nil)
|
||||||
|
if version
|
||||||
|
version = Gitlab::Git::Commit.find(@repository, version).id
|
||||||
|
end
|
||||||
|
|
||||||
|
gollum_page = gollum_wiki.page(title, version, dir)
|
||||||
|
return unless gollum_page
|
||||||
|
|
||||||
|
new_page(gollum_page)
|
||||||
|
end
|
||||||
|
|
||||||
def gitaly_write_page(name, format, content, commit_details)
|
def gitaly_write_page(name, format, content, commit_details)
|
||||||
gitaly_wiki_client.write_page(name, format, content, commit_details)
|
gitaly_wiki_client.write_page(name, format, content, commit_details)
|
||||||
end
|
end
|
||||||
|
@ -153,6 +163,13 @@ module Gitlab
|
||||||
def gitaly_delete_page(page_path, commit_details)
|
def gitaly_delete_page(page_path, commit_details)
|
||||||
gitaly_wiki_client.delete_page(page_path, commit_details)
|
gitaly_wiki_client.delete_page(page_path, commit_details)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def gitaly_find_page(title:, version: nil, dir: nil)
|
||||||
|
wiki_page, version = gitaly_wiki_client.find_page(title: title, version: version, dir: dir)
|
||||||
|
return unless wiki_page
|
||||||
|
|
||||||
|
Gitlab::Git::WikiPage.new(wiki_page, version)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
25
lib/gitlab/gitaly_client/wiki_page.rb
Normal file
25
lib/gitlab/gitaly_client/wiki_page.rb
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
module Gitlab
|
||||||
|
module GitalyClient
|
||||||
|
class WikiPage
|
||||||
|
FIELDS = %i(title format url_path path name historical raw_data).freeze
|
||||||
|
|
||||||
|
attr_accessor(*FIELDS)
|
||||||
|
|
||||||
|
def initialize(params)
|
||||||
|
params = params.with_indifferent_access
|
||||||
|
|
||||||
|
FIELDS.each do |field|
|
||||||
|
instance_variable_set("@#{field}", params[field])
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def historical?
|
||||||
|
@historical
|
||||||
|
end
|
||||||
|
|
||||||
|
def format
|
||||||
|
@format.to_sym
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -47,6 +47,39 @@ module Gitlab
|
||||||
GitalyClient.call(@repository.storage, :wiki_service, :wiki_delete_page, request)
|
GitalyClient.call(@repository.storage, :wiki_service, :wiki_delete_page, request)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def find_page(title:, version: nil, dir: nil)
|
||||||
|
request = Gitaly::WikiFindPageRequest.new(
|
||||||
|
repository: @gitaly_repo,
|
||||||
|
title: GitalyClient.encode(title),
|
||||||
|
revision: GitalyClient.encode(version),
|
||||||
|
directory: GitalyClient.encode(dir)
|
||||||
|
)
|
||||||
|
|
||||||
|
response = GitalyClient.call(@repository.storage, :wiki_service, :wiki_find_page, request)
|
||||||
|
wiki_page = version = nil
|
||||||
|
|
||||||
|
response.each do |message|
|
||||||
|
page = message.page
|
||||||
|
next unless page
|
||||||
|
|
||||||
|
if wiki_page
|
||||||
|
wiki_page.raw_data << page.raw_data
|
||||||
|
else
|
||||||
|
wiki_page = GitalyClient::WikiPage.new(page.to_h)
|
||||||
|
# All gRPC strings in a response are frozen, so we get
|
||||||
|
# an unfrozen version here so appending in the else clause below doesn't blow up.
|
||||||
|
wiki_page.raw_data = wiki_page.raw_data.dup
|
||||||
|
|
||||||
|
version = Gitlab::Git::WikiPageVersion.new(
|
||||||
|
Gitlab::Git::Commit.decorate(@repository, page.version.commit),
|
||||||
|
page.version.format
|
||||||
|
)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
[wiki_page, version]
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def gitaly_commit_details(commit_details)
|
def gitaly_commit_details(commit_details)
|
||||||
|
|
|
@ -117,6 +117,7 @@ describe ProjectWiki do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "#find_page" do
|
describe "#find_page" do
|
||||||
|
shared_examples 'finding a wiki page' do
|
||||||
before do
|
before do
|
||||||
create_page("index page", "This is an awesome Gollum Wiki")
|
create_page("index page", "This is an awesome Gollum Wiki")
|
||||||
end
|
end
|
||||||
|
@ -145,6 +146,15 @@ describe ProjectWiki do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context 'when Gitaly wiki_find_page is enabled' do
|
||||||
|
it_behaves_like 'finding a wiki page'
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when Gitaly wiki_find_page is disabled', :skip_gitaly_mock do
|
||||||
|
it_behaves_like 'finding a wiki page'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
describe '#find_file' do
|
describe '#find_file' do
|
||||||
before do
|
before do
|
||||||
file = Gollum::File.new(subject.wiki)
|
file = Gollum::File.new(subject.wiki)
|
||||||
|
|
Loading…
Reference in a new issue