Commit 28bbb4cb authored by Kim "BKC" Carlbäcker's avatar Kim "BKC" Carlbäcker

Migrate Gitlab::Git::Repository#write_config to Gitaly

- Add tests for Repository#write_config
parent 08e01343
...@@ -6,6 +6,7 @@ module Gitlab ...@@ -6,6 +6,7 @@ module Gitlab
CommandError = Class.new(StandardError) CommandError = Class.new(StandardError)
CommitError = Class.new(StandardError) CommitError = Class.new(StandardError)
OSError = Class.new(StandardError)
class << self class << self
include Gitlab::EncodingHelper include Gitlab::EncodingHelper
......
...@@ -1311,7 +1311,15 @@ module Gitlab ...@@ -1311,7 +1311,15 @@ module Gitlab
# rubocop:enable Metrics/ParameterLists # rubocop:enable Metrics/ParameterLists
def write_config(full_path:) def write_config(full_path:)
rugged.config['gitlab.fullpath'] = full_path if full_path.present? return unless full_path.present?
gitaly_migrate(:write_config) do |is_enabled|
if is_enabled
gitaly_repository_client.write_config(full_path: full_path)
else
rugged_write_config(full_path: full_path)
end
end
end end
def gitaly_repository def gitaly_repository
...@@ -1451,6 +1459,10 @@ module Gitlab ...@@ -1451,6 +1459,10 @@ module Gitlab
end end
end end
def rugged_write_config(full_path:)
rugged.config['gitlab.fullpath'] = full_path
end
def shell_write_ref(ref_path, ref, old_ref) def shell_write_ref(ref_path, ref, old_ref)
raise ArgumentError, "invalid ref_path #{ref_path.inspect}" if ref_path.include?(' ') raise ArgumentError, "invalid ref_path #{ref_path.inspect}" if ref_path.include?(' ')
raise ArgumentError, "invalid ref #{ref.inspect}" if ref.include?("\x00") raise ArgumentError, "invalid ref #{ref.inspect}" if ref.include?("\x00")
......
...@@ -219,6 +219,19 @@ module Gitlab ...@@ -219,6 +219,19 @@ module Gitlab
true true
end end
def write_config(full_path:)
request = Gitaly::WriteConfigRequest.new(repository: @gitaly_repo, full_path: full_path)
response = GitalyClient.call(
@storage,
:repository_service,
:write_config,
request,
timeout: GitalyClient.fast_timeout
)
raise Gitlab::Git::OSError.new(response.error) unless response.error.empty?
end
end end
end end
end end
...@@ -1790,6 +1790,44 @@ describe Gitlab::Git::Repository, seed_helper: true do ...@@ -1790,6 +1790,44 @@ describe Gitlab::Git::Repository, seed_helper: true do
end end
end end
describe '#write_config' do
before do
repository.rugged.config["gitlab.fullpath"] = repository.path
end
shared_examples 'writing repo config' do
context 'is given a path' do
it 'writes it to disk' do
repository.write_config(full_path: "not-the/real-path.git")
config = File.read(File.join(repository.path, "config"))
expect(config).to include("[gitlab]")
expect(config).to include("fullpath = not-the/real-path.git")
end
end
context 'it is given an empty path' do
it 'does not write it to disk' do
repository.write_config(full_path: "")
config = File.read(File.join(repository.path, "config"))
expect(config).to include("[gitlab]")
expect(config).to include("fullpath = #{repository.path}")
end
end
end
context "when gitaly_write_config is enabled" do
it_behaves_like "writing repo config"
end
context "when gitaly_write_config is disabled", :disable_gitaly do
it_behaves_like "writing repo config"
end
end
describe '#merge' do describe '#merge' do
let(:repository) do let(:repository) do
Gitlab::Git::Repository.new('default', TEST_MUTABLE_REPO_PATH, '') Gitlab::Git::Repository.new('default', TEST_MUTABLE_REPO_PATH, '')
......
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