Merge branch 'dz-internal-api-fullpath' into 'master'
Make internal api work with full repo path and name ## What does this MR do? Make internal api work with full repo path and name ## Why was this MR needed? So we can pass full repository path on filesystem from gitlab-shell instead of extracted one. We need this for nested groups support where project is can be nested under several groups. ## What are the relevant issue numbers? https://gitlab.com/gitlab-org/gitlab-ce/issues/2772 See merge request !7148
This commit is contained in:
commit
b7d3fc15a4
3 changed files with 33 additions and 4 deletions
|
@ -11,6 +11,20 @@ class Repository
|
|||
|
||||
attr_accessor :path_with_namespace, :project
|
||||
|
||||
def self.storages
|
||||
Gitlab.config.repositories.storages
|
||||
end
|
||||
|
||||
def self.remove_storage_from_path(repo_path)
|
||||
storages.find do |_, storage_path|
|
||||
if repo_path.start_with?(storage_path)
|
||||
return repo_path.sub(storage_path, '')
|
||||
end
|
||||
end
|
||||
|
||||
repo_path
|
||||
end
|
||||
|
||||
def initialize(path_with_namespace, project)
|
||||
@path_with_namespace = path_with_namespace
|
||||
@project = project
|
||||
|
|
|
@ -17,15 +17,20 @@ module API
|
|||
#
|
||||
|
||||
helpers do
|
||||
def project_path
|
||||
@project_path ||= begin
|
||||
project_path = params[:project].sub(/\.git\z/, '')
|
||||
Repository.remove_storage_from_path(project_path)
|
||||
end
|
||||
end
|
||||
|
||||
def wiki?
|
||||
@wiki ||= params[:project].end_with?('.wiki') &&
|
||||
!Project.find_with_namespace(params[:project])
|
||||
@wiki ||= project_path.end_with?('.wiki') &&
|
||||
!Project.find_with_namespace(project_path)
|
||||
end
|
||||
|
||||
def project
|
||||
@project ||= begin
|
||||
project_path = params[:project]
|
||||
|
||||
# Check for *.wiki repositories.
|
||||
# Strip out the .wiki from the pathname before finding the
|
||||
# project. This applies the correct project permissions to
|
||||
|
|
|
@ -1472,4 +1472,14 @@ describe Repository, models: true do
|
|||
end.to raise_error(Repository::CommitError)
|
||||
end
|
||||
end
|
||||
|
||||
describe '#remove_storage_from_path' do
|
||||
let(:storage_path) { project.repository_storage_path }
|
||||
let(:project_path) { project.path_with_namespace }
|
||||
let(:full_path) { File.join(storage_path, project_path) }
|
||||
|
||||
it { expect(Repository.remove_storage_from_path(full_path)).to eq(project_path) }
|
||||
it { expect(Repository.remove_storage_from_path(project_path)).to eq(project_path) }
|
||||
it { expect(Repository.remove_storage_from_path(storage_path)).to eq('') }
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue