Incorporate RepositoryService.ApplyGitattributes Gitaly RPC
This commit is contained in:
parent
0296700207
commit
c463a83405
4 changed files with 61 additions and 27 deletions
|
@ -1 +1 @@
|
|||
0.30.0
|
||||
0.31.0
|
||||
|
|
|
@ -653,33 +653,15 @@ module Gitlab
|
|||
|
||||
# Gitaly migration: https://gitlab.com/gitlab-org/gitaly/issues/328
|
||||
def copy_gitattributes(ref)
|
||||
begin
|
||||
commit = lookup(ref)
|
||||
rescue Rugged::ReferenceError
|
||||
raise InvalidRef.new("Ref #{ref} is invalid")
|
||||
end
|
||||
|
||||
# Create the paths
|
||||
info_dir_path = File.join(path, 'info')
|
||||
info_attributes_path = File.join(info_dir_path, 'attributes')
|
||||
|
||||
begin
|
||||
# Retrieve the contents of the blob
|
||||
gitattributes_content = blob_content(commit, '.gitattributes')
|
||||
rescue InvalidBlobName
|
||||
# No .gitattributes found. Should now remove any info/attributes and return
|
||||
File.delete(info_attributes_path) if File.exist?(info_attributes_path)
|
||||
return
|
||||
end
|
||||
|
||||
# Create the info directory if needed
|
||||
Dir.mkdir(info_dir_path) unless File.directory?(info_dir_path)
|
||||
|
||||
# Write the contents of the .gitattributes file to info/attributes
|
||||
# Use binary mode to prevent Rails from converting ASCII-8BIT to UTF-8
|
||||
File.open(info_attributes_path, "wb") do |file|
|
||||
file.write(gitattributes_content)
|
||||
Gitlab::GitalyClient.migrate(:apply_gitattributes) do |is_enabled|
|
||||
if is_enabled
|
||||
gitaly_copy_gitattributes(ref)
|
||||
else
|
||||
rugged_copy_gitattributes(ref)
|
||||
end
|
||||
end
|
||||
rescue GRPC::InvalidArgument
|
||||
raise InvalidRef
|
||||
end
|
||||
|
||||
# Returns the Git attributes for the given file path.
|
||||
|
@ -1012,6 +994,40 @@ module Gitlab
|
|||
|
||||
raw_output.compact
|
||||
end
|
||||
|
||||
def gitaly_copy_gitattributes(revision)
|
||||
gitaly_repository_client.apply_gitattributes(revision)
|
||||
end
|
||||
|
||||
def rugged_copy_gitattributes(ref)
|
||||
begin
|
||||
commit = lookup(ref)
|
||||
rescue Rugged::ReferenceError
|
||||
raise InvalidRef.new("Ref #{ref} is invalid")
|
||||
end
|
||||
|
||||
# Create the paths
|
||||
info_dir_path = File.join(path, 'info')
|
||||
info_attributes_path = File.join(info_dir_path, 'attributes')
|
||||
|
||||
begin
|
||||
# Retrieve the contents of the blob
|
||||
gitattributes_content = blob_content(commit, '.gitattributes')
|
||||
rescue InvalidBlobName
|
||||
# No .gitattributes found. Should now remove any info/attributes and return
|
||||
File.delete(info_attributes_path) if File.exist?(info_attributes_path)
|
||||
return
|
||||
end
|
||||
|
||||
# Create the info directory if needed
|
||||
Dir.mkdir(info_dir_path) unless File.directory?(info_dir_path)
|
||||
|
||||
# Write the contents of the .gitattributes file to info/attributes
|
||||
# Use binary mode to prevent Rails from converting ASCII-8BIT to UTF-8
|
||||
File.open(info_attributes_path, "wb") do |file|
|
||||
file.write(gitattributes_content)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -32,6 +32,11 @@ module Gitlab
|
|||
request = Gitaly::RepositorySizeRequest.new(repository: @gitaly_repo)
|
||||
GitalyClient.call(@storage, :repository_service, :repository_size, request).size
|
||||
end
|
||||
|
||||
def apply_gitattributes(revision)
|
||||
request = Gitaly::ApplyGitattributesRequest.new(repository: @gitaly_repo, revision: revision)
|
||||
GitalyClient.call(@storage, :repository_service, :apply_gitattributes, request)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -60,4 +60,17 @@ describe Gitlab::GitalyClient::RepositoryService do
|
|||
client.repository_size
|
||||
end
|
||||
end
|
||||
|
||||
describe '#apply_gitattributes' do
|
||||
let(:revision) { 'master' }
|
||||
|
||||
it 'sends an apply_gitattributes message' do
|
||||
expect_any_instance_of(Gitaly::RepositoryService::Stub)
|
||||
.to receive(:apply_gitattributes)
|
||||
.with(gitaly_request_with_path(storage_name, relative_path), kind_of(Hash))
|
||||
.and_return(double(:apply_gitattributes_response))
|
||||
|
||||
client.apply_gitattributes(revision)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue