Make Gitaly wiki RPC's mandatory
This commit is contained in:
parent
aca47a5be6
commit
14000a561b
3 changed files with 160 additions and 286 deletions
|
@ -27,63 +27,38 @@ module Gitlab
|
||||||
end
|
end
|
||||||
|
|
||||||
def write_page(name, format, content, commit_details)
|
def write_page(name, format, content, commit_details)
|
||||||
@repository.gitaly_migrate(:wiki_write_page) do |is_enabled|
|
@repository.wrapped_gitaly_errors do
|
||||||
if is_enabled
|
gitaly_write_page(name, format, content, commit_details)
|
||||||
gitaly_write_page(name, format, content, commit_details)
|
|
||||||
else
|
|
||||||
gollum_write_page(name, format, content, commit_details)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def delete_page(page_path, commit_details)
|
def delete_page(page_path, commit_details)
|
||||||
@repository.gitaly_migrate(:wiki_delete_page) do |is_enabled|
|
@repository.wrapped_gitaly_errors do
|
||||||
if is_enabled
|
gitaly_delete_page(page_path, commit_details)
|
||||||
gitaly_delete_page(page_path, commit_details)
|
|
||||||
else
|
|
||||||
gollum_delete_page(page_path, commit_details)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def update_page(page_path, title, format, content, commit_details)
|
def update_page(page_path, title, format, content, commit_details)
|
||||||
@repository.gitaly_migrate(:wiki_update_page) do |is_enabled|
|
@repository.wrapped_gitaly_errors do
|
||||||
if is_enabled
|
gitaly_update_page(page_path, title, format, content, commit_details)
|
||||||
gitaly_update_page(page_path, title, format, content, commit_details)
|
|
||||||
else
|
|
||||||
gollum_update_page(page_path, title, format, content, commit_details)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def pages(limit: nil)
|
def pages(limit: nil)
|
||||||
@repository.gitaly_migrate(:wiki_get_all_pages) do |is_enabled|
|
@repository.wrapped_gitaly_errors do
|
||||||
if is_enabled
|
gitaly_get_all_pages
|
||||||
gitaly_get_all_pages
|
|
||||||
else
|
|
||||||
gollum_get_all_pages(limit: limit)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def page(title:, version: nil, dir: nil)
|
def page(title:, version: nil, dir: nil)
|
||||||
@repository.gitaly_migrate(:wiki_find_page,
|
@repository.wrapped_gitaly_errors do
|
||||||
status: Gitlab::GitalyClient::MigrationStatus::OPT_OUT) do |is_enabled|
|
gitaly_find_page(title: title, version: version, dir: dir)
|
||||||
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
|
||||||
end
|
end
|
||||||
|
|
||||||
def file(name, version)
|
def file(name, version)
|
||||||
@repository.gitaly_migrate(:wiki_find_file) do |is_enabled|
|
@repository.wrapped_gitaly_errors do
|
||||||
if is_enabled
|
gitaly_find_file(name, version)
|
||||||
gitaly_find_file(name, version)
|
|
||||||
else
|
|
||||||
gollum_find_file(name, version)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -92,24 +67,15 @@ module Gitlab
|
||||||
# :per_page - The number of items per page.
|
# :per_page - The number of items per page.
|
||||||
# :limit - Total number of items to return.
|
# :limit - Total number of items to return.
|
||||||
def page_versions(page_path, options = {})
|
def page_versions(page_path, options = {})
|
||||||
@repository.gitaly_migrate(:wiki_page_versions) do |is_enabled|
|
versions = @repository.wrapped_gitaly_errors do
|
||||||
if is_enabled
|
gitaly_wiki_client.page_versions(page_path, 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)
|
|
||||||
|
|
||||||
commits_from_page(current_page, options).map do |gitlab_git_commit|
|
|
||||||
gollum_page = gollum_wiki.page(current_page.title, gitlab_git_commit.id)
|
|
||||||
Gitlab::Git::WikiPageVersion.new(gitlab_git_commit, gollum_page&.format)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# 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]
|
||||||
end
|
end
|
||||||
|
|
||||||
def count_page_versions(page_path)
|
def count_page_versions(page_path)
|
||||||
|
@ -131,46 +97,13 @@ module Gitlab
|
||||||
def page_formatted_data(title:, dir: nil, version: nil)
|
def page_formatted_data(title:, dir: nil, version: nil)
|
||||||
version = version&.id
|
version = version&.id
|
||||||
|
|
||||||
@repository.gitaly_migrate(:wiki_page_formatted_data, status: Gitlab::GitalyClient::MigrationStatus::OPT_OUT) do |is_enabled|
|
@repository.wrapped_gitaly_errors do
|
||||||
if is_enabled
|
gitaly_wiki_client.get_formatted_data(title: title, dir: dir, version: version)
|
||||||
gitaly_wiki_client.get_formatted_data(title: title, dir: dir, version: version)
|
|
||||||
else
|
|
||||||
# We don't use #page because if wiki_find_page feature is enabled, we would
|
|
||||||
# get a page without formatted_data.
|
|
||||||
gollum_find_page(title: title, dir: dir, version: version)&.formatted_data
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def gollum_wiki
|
|
||||||
@gollum_wiki ||= Gollum::Wiki.new(@repository.path)
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
# options:
|
|
||||||
# :page - The Integer page number.
|
|
||||||
# :per_page - The number of items per page.
|
|
||||||
# :limit - Total number of items to return.
|
|
||||||
def commits_from_page(gollum_page, 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: options[:limit],
|
|
||||||
offset: options[:offset])
|
|
||||||
end
|
|
||||||
|
|
||||||
def gollum_page_by_path(page_path)
|
|
||||||
page_name = Gollum::Page.canonicalize_filename(page_path)
|
|
||||||
page_dir = File.split(page_path).first
|
|
||||||
|
|
||||||
gollum_wiki.paged(page_name, page_dir)
|
|
||||||
end
|
|
||||||
|
|
||||||
def new_page(gollum_page)
|
def new_page(gollum_page)
|
||||||
Gitlab::Git::WikiPage.new(gollum_page, new_version(gollum_page, gollum_page.version.id))
|
Gitlab::Git::WikiPage.new(gollum_page, new_version(gollum_page, gollum_page.version.id))
|
||||||
end
|
end
|
||||||
|
@ -199,65 +132,6 @@ module Gitlab
|
||||||
@gitaly_wiki_client ||= Gitlab::GitalyClient::WikiService.new(@repository)
|
@gitaly_wiki_client ||= Gitlab::GitalyClient::WikiService.new(@repository)
|
||||||
end
|
end
|
||||||
|
|
||||||
def gollum_write_page(name, format, content, commit_details)
|
|
||||||
assert_type!(format, Symbol)
|
|
||||||
assert_type!(commit_details, CommitDetails)
|
|
||||||
|
|
||||||
with_committer_with_hooks(commit_details) do |committer|
|
|
||||||
filename = File.basename(name)
|
|
||||||
dir = (tmp_dir = File.dirname(name)) == '.' ? '' : tmp_dir
|
|
||||||
|
|
||||||
gollum_wiki.write_page(filename, format, content, { committer: committer }, dir)
|
|
||||||
end
|
|
||||||
rescue Gollum::DuplicatePageError => e
|
|
||||||
raise Gitlab::Git::Wiki::DuplicatePageError, e.message
|
|
||||||
end
|
|
||||||
|
|
||||||
def gollum_delete_page(page_path, commit_details)
|
|
||||||
assert_type!(commit_details, CommitDetails)
|
|
||||||
|
|
||||||
with_committer_with_hooks(commit_details) do |committer|
|
|
||||||
gollum_wiki.delete_page(gollum_page_by_path(page_path), committer: committer)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def gollum_update_page(page_path, title, format, content, commit_details)
|
|
||||||
assert_type!(format, Symbol)
|
|
||||||
assert_type!(commit_details, CommitDetails)
|
|
||||||
|
|
||||||
with_committer_with_hooks(commit_details) do |committer|
|
|
||||||
page = gollum_page_by_path(page_path)
|
|
||||||
# Instead of performing two renames if the title has changed,
|
|
||||||
# the update_page will only update the format and content and
|
|
||||||
# the rename_page will do anything related to moving/renaming
|
|
||||||
gollum_wiki.update_page(page, page.name, format, content, committer: committer)
|
|
||||||
gollum_wiki.rename_page(page, title, committer: committer)
|
|
||||||
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 gollum_find_file(name, version)
|
|
||||||
version ||= self.class.default_ref
|
|
||||||
gollum_file = gollum_wiki.file(name, version)
|
|
||||||
return unless gollum_file
|
|
||||||
|
|
||||||
Gitlab::Git::WikiFile.new(gollum_file)
|
|
||||||
end
|
|
||||||
|
|
||||||
def gollum_get_all_pages(limit: nil)
|
|
||||||
gollum_wiki.pages(limit: limit).map { |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
|
||||||
|
|
|
@ -1,154 +1,156 @@
|
||||||
require 'spec_helper'
|
require 'spec_helper'
|
||||||
|
|
||||||
describe Gitlab::Git::CommitterWithHooks, seed_helper: true do
|
describe Gitlab::Git::CommitterWithHooks, seed_helper: true do
|
||||||
shared_examples 'calling wiki hooks' do
|
# TODO https://gitlab.com/gitlab-org/gitaly/issues/1234
|
||||||
let(:project) { create(:project) }
|
skip 'needs to be moved to gitaly-ruby test suite' do
|
||||||
let(:user) { project.owner }
|
shared_examples 'calling wiki hooks' do
|
||||||
let(:project_wiki) { ProjectWiki.new(project, user) }
|
let(:project) { create(:project) }
|
||||||
let(:wiki) { project_wiki.wiki }
|
let(:user) { project.owner }
|
||||||
let(:options) do
|
let(:project_wiki) { ProjectWiki.new(project, user) }
|
||||||
{
|
let(:wiki) { project_wiki.wiki }
|
||||||
id: user.id,
|
let(:options) do
|
||||||
username: user.username,
|
{
|
||||||
name: user.name,
|
id: user.id,
|
||||||
email: user.email,
|
username: user.username,
|
||||||
message: 'commit message'
|
name: user.name,
|
||||||
}
|
email: user.email,
|
||||||
end
|
message: 'commit message'
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
subject { described_class.new(wiki, options) }
|
subject { described_class.new(wiki, options) }
|
||||||
|
|
||||||
before do
|
|
||||||
project_wiki.create_page('home', 'test content')
|
|
||||||
end
|
|
||||||
|
|
||||||
shared_examples 'failing pre-receive hook' do
|
|
||||||
before do
|
before do
|
||||||
expect_any_instance_of(Gitlab::Git::HooksService).to receive(:run_hook).with('pre-receive').and_return([false, ''])
|
project_wiki.create_page('home', 'test content')
|
||||||
expect_any_instance_of(Gitlab::Git::HooksService).not_to receive(:run_hook).with('update')
|
|
||||||
expect_any_instance_of(Gitlab::Git::HooksService).not_to receive(:run_hook).with('post-receive')
|
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'raises exception' do
|
shared_examples 'failing pre-receive hook' do
|
||||||
expect { subject.commit }.to raise_error(Gitlab::Git::Wiki::OperationError)
|
before do
|
||||||
|
expect_any_instance_of(Gitlab::Git::HooksService).to receive(:run_hook).with('pre-receive').and_return([false, ''])
|
||||||
|
expect_any_instance_of(Gitlab::Git::HooksService).not_to receive(:run_hook).with('update')
|
||||||
|
expect_any_instance_of(Gitlab::Git::HooksService).not_to receive(:run_hook).with('post-receive')
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'raises exception' do
|
||||||
|
expect { subject.commit }.to raise_error(Gitlab::Git::Wiki::OperationError)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'does not create a new commit inside the repository' do
|
||||||
|
current_rev = find_current_rev
|
||||||
|
|
||||||
|
expect { subject.commit }.to raise_error(Gitlab::Git::Wiki::OperationError)
|
||||||
|
|
||||||
|
expect(current_rev).to eq find_current_rev
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'does not create a new commit inside the repository' do
|
shared_examples 'failing update hook' do
|
||||||
current_rev = find_current_rev
|
before do
|
||||||
|
expect_any_instance_of(Gitlab::Git::HooksService).to receive(:run_hook).with('pre-receive').and_return([true, ''])
|
||||||
|
expect_any_instance_of(Gitlab::Git::HooksService).to receive(:run_hook).with('update').and_return([false, ''])
|
||||||
|
expect_any_instance_of(Gitlab::Git::HooksService).not_to receive(:run_hook).with('post-receive')
|
||||||
|
end
|
||||||
|
|
||||||
expect { subject.commit }.to raise_error(Gitlab::Git::Wiki::OperationError)
|
it 'raises exception' do
|
||||||
|
expect { subject.commit }.to raise_error(Gitlab::Git::Wiki::OperationError)
|
||||||
|
end
|
||||||
|
|
||||||
expect(current_rev).to eq find_current_rev
|
it 'does not create a new commit inside the repository' do
|
||||||
|
current_rev = find_current_rev
|
||||||
|
|
||||||
|
expect { subject.commit }.to raise_error(Gitlab::Git::Wiki::OperationError)
|
||||||
|
|
||||||
|
expect(current_rev).to eq find_current_rev
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
shared_examples 'failing post-receive hook' do
|
||||||
|
before do
|
||||||
|
expect_any_instance_of(Gitlab::Git::HooksService).to receive(:run_hook).with('pre-receive').and_return([true, ''])
|
||||||
|
expect_any_instance_of(Gitlab::Git::HooksService).to receive(:run_hook).with('update').and_return([true, ''])
|
||||||
|
expect_any_instance_of(Gitlab::Git::HooksService).to receive(:run_hook).with('post-receive').and_return([false, ''])
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'does not raise exception' do
|
||||||
|
expect { subject.commit }.not_to raise_error
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'creates the commit' do
|
||||||
|
current_rev = find_current_rev
|
||||||
|
|
||||||
|
subject.commit
|
||||||
|
|
||||||
|
expect(current_rev).not_to eq find_current_rev
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
shared_examples 'when hooks call succceeds' do
|
||||||
|
let(:hook) { double(:hook) }
|
||||||
|
|
||||||
|
it 'calls the three hooks' do
|
||||||
|
expect(Gitlab::Git::Hook).to receive(:new).exactly(3).times.and_return(hook)
|
||||||
|
expect(hook).to receive(:trigger).exactly(3).times.and_return([true, nil])
|
||||||
|
|
||||||
|
subject.commit
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'creates the commit' do
|
||||||
|
current_rev = find_current_rev
|
||||||
|
|
||||||
|
subject.commit
|
||||||
|
|
||||||
|
expect(current_rev).not_to eq find_current_rev
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when creating a page' do
|
||||||
|
before do
|
||||||
|
project_wiki.create_page('index', 'test content')
|
||||||
|
end
|
||||||
|
|
||||||
|
it_behaves_like 'failing pre-receive hook'
|
||||||
|
it_behaves_like 'failing update hook'
|
||||||
|
it_behaves_like 'failing post-receive hook'
|
||||||
|
it_behaves_like 'when hooks call succceeds'
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when updating a page' do
|
||||||
|
before do
|
||||||
|
project_wiki.update_page(find_page('home'), content: 'some other content', format: :markdown)
|
||||||
|
end
|
||||||
|
|
||||||
|
it_behaves_like 'failing pre-receive hook'
|
||||||
|
it_behaves_like 'failing update hook'
|
||||||
|
it_behaves_like 'failing post-receive hook'
|
||||||
|
it_behaves_like 'when hooks call succceeds'
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when deleting a page' do
|
||||||
|
before do
|
||||||
|
project_wiki.delete_page(find_page('home'))
|
||||||
|
end
|
||||||
|
|
||||||
|
it_behaves_like 'failing pre-receive hook'
|
||||||
|
it_behaves_like 'failing update hook'
|
||||||
|
it_behaves_like 'failing post-receive hook'
|
||||||
|
it_behaves_like 'when hooks call succceeds'
|
||||||
|
end
|
||||||
|
|
||||||
|
def find_current_rev
|
||||||
|
wiki.gollum_wiki.repo.commits.first&.sha
|
||||||
|
end
|
||||||
|
|
||||||
|
def find_page(name)
|
||||||
|
wiki.page(title: name)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
shared_examples 'failing update hook' do
|
context 'when Gitaly is enabled' do
|
||||||
before do
|
it_behaves_like 'calling wiki hooks'
|
||||||
expect_any_instance_of(Gitlab::Git::HooksService).to receive(:run_hook).with('pre-receive').and_return([true, ''])
|
|
||||||
expect_any_instance_of(Gitlab::Git::HooksService).to receive(:run_hook).with('update').and_return([false, ''])
|
|
||||||
expect_any_instance_of(Gitlab::Git::HooksService).not_to receive(:run_hook).with('post-receive')
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'raises exception' do
|
|
||||||
expect { subject.commit }.to raise_error(Gitlab::Git::Wiki::OperationError)
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'does not create a new commit inside the repository' do
|
|
||||||
current_rev = find_current_rev
|
|
||||||
|
|
||||||
expect { subject.commit }.to raise_error(Gitlab::Git::Wiki::OperationError)
|
|
||||||
|
|
||||||
expect(current_rev).to eq find_current_rev
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
shared_examples 'failing post-receive hook' do
|
context 'when Gitaly is disabled', :disable_gitaly do
|
||||||
before do
|
it_behaves_like 'calling wiki hooks'
|
||||||
expect_any_instance_of(Gitlab::Git::HooksService).to receive(:run_hook).with('pre-receive').and_return([true, ''])
|
|
||||||
expect_any_instance_of(Gitlab::Git::HooksService).to receive(:run_hook).with('update').and_return([true, ''])
|
|
||||||
expect_any_instance_of(Gitlab::Git::HooksService).to receive(:run_hook).with('post-receive').and_return([false, ''])
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'does not raise exception' do
|
|
||||||
expect { subject.commit }.not_to raise_error
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'creates the commit' do
|
|
||||||
current_rev = find_current_rev
|
|
||||||
|
|
||||||
subject.commit
|
|
||||||
|
|
||||||
expect(current_rev).not_to eq find_current_rev
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
shared_examples 'when hooks call succceeds' do
|
|
||||||
let(:hook) { double(:hook) }
|
|
||||||
|
|
||||||
it 'calls the three hooks' do
|
|
||||||
expect(Gitlab::Git::Hook).to receive(:new).exactly(3).times.and_return(hook)
|
|
||||||
expect(hook).to receive(:trigger).exactly(3).times.and_return([true, nil])
|
|
||||||
|
|
||||||
subject.commit
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'creates the commit' do
|
|
||||||
current_rev = find_current_rev
|
|
||||||
|
|
||||||
subject.commit
|
|
||||||
|
|
||||||
expect(current_rev).not_to eq find_current_rev
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'when creating a page' do
|
|
||||||
before do
|
|
||||||
project_wiki.create_page('index', 'test content')
|
|
||||||
end
|
|
||||||
|
|
||||||
it_behaves_like 'failing pre-receive hook'
|
|
||||||
it_behaves_like 'failing update hook'
|
|
||||||
it_behaves_like 'failing post-receive hook'
|
|
||||||
it_behaves_like 'when hooks call succceeds'
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'when updating a page' do
|
|
||||||
before do
|
|
||||||
project_wiki.update_page(find_page('home'), content: 'some other content', format: :markdown)
|
|
||||||
end
|
|
||||||
|
|
||||||
it_behaves_like 'failing pre-receive hook'
|
|
||||||
it_behaves_like 'failing update hook'
|
|
||||||
it_behaves_like 'failing post-receive hook'
|
|
||||||
it_behaves_like 'when hooks call succceeds'
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'when deleting a page' do
|
|
||||||
before do
|
|
||||||
project_wiki.delete_page(find_page('home'))
|
|
||||||
end
|
|
||||||
|
|
||||||
it_behaves_like 'failing pre-receive hook'
|
|
||||||
it_behaves_like 'failing update hook'
|
|
||||||
it_behaves_like 'failing post-receive hook'
|
|
||||||
it_behaves_like 'when hooks call succceeds'
|
|
||||||
end
|
|
||||||
|
|
||||||
def find_current_rev
|
|
||||||
wiki.gollum_wiki.repo.commits.first&.sha
|
|
||||||
end
|
|
||||||
|
|
||||||
def find_page(name)
|
|
||||||
wiki.page(title: name)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# TODO: Uncomment once Gitaly updates the ruby vendor code
|
|
||||||
# context 'when Gitaly is enabled' do
|
|
||||||
# it_behaves_like 'calling wiki hooks'
|
|
||||||
# end
|
|
||||||
|
|
||||||
context 'when Gitaly is disabled', :skip_gitaly_mock do
|
|
||||||
it_behaves_like 'calling wiki hooks'
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -6,9 +6,7 @@ describe Gitlab::Git::Wiki do
|
||||||
let(:project_wiki) { ProjectWiki.new(project, user) }
|
let(:project_wiki) { ProjectWiki.new(project, user) }
|
||||||
subject { project_wiki.wiki }
|
subject { project_wiki.wiki }
|
||||||
|
|
||||||
# Remove skip_gitaly_mock flag when gitaly_find_page when
|
describe '#page' do
|
||||||
# https://gitlab.com/gitlab-org/gitlab-ce/issues/42039 is solved
|
|
||||||
describe '#page', :skip_gitaly_mock do
|
|
||||||
before do
|
before do
|
||||||
create_page('page1', 'content')
|
create_page('page1', 'content')
|
||||||
create_page('foo/page1', 'content foo/page1')
|
create_page('foo/page1', 'content foo/page1')
|
||||||
|
@ -25,7 +23,7 @@ describe Gitlab::Git::Wiki do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe '#delete_page', :skip_gitaly_mock do
|
describe '#delete_page' do
|
||||||
after do
|
after do
|
||||||
destroy_page('page1')
|
destroy_page('page1')
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue