73 lines
1.6 KiB
Ruby
73 lines
1.6 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module Gitlab
|
|
module BareRepositoryImport
|
|
class Repository
|
|
include ::Gitlab::Utils::StrongMemoize
|
|
|
|
attr_reader :group_path, :project_name, :repo_path
|
|
|
|
def initialize(root_path, repo_path)
|
|
unless root_path.ends_with?('/')
|
|
root_path = "#{root_path}/"
|
|
end
|
|
|
|
@root_path = root_path
|
|
@repo_path = repo_path
|
|
|
|
full_path =
|
|
if hashed? && !wiki?
|
|
repository.config.get('gitlab.fullpath')
|
|
else
|
|
repo_relative_path
|
|
end
|
|
|
|
# Split path into 'all/the/namespaces' and 'project_name'
|
|
@group_path, _, @project_name = full_path.to_s.rpartition('/')
|
|
end
|
|
|
|
def wiki_exists?
|
|
File.exist?(wiki_path)
|
|
end
|
|
|
|
def wiki_path
|
|
@wiki_path ||= repo_path.sub(/\.git$/, '.wiki.git')
|
|
end
|
|
|
|
def project_full_path
|
|
@project_full_path ||= "#{group_path}/#{project_name}"
|
|
end
|
|
|
|
def processable?
|
|
return false if wiki?
|
|
return false if hashed? && (group_path.blank? || project_name.blank?)
|
|
|
|
true
|
|
end
|
|
|
|
private
|
|
|
|
def wiki?
|
|
strong_memoize(:wiki) do
|
|
repo_path.end_with?('.wiki.git')
|
|
end
|
|
end
|
|
|
|
def hashed?
|
|
strong_memoize(:hashed) do
|
|
repo_relative_path.include?('@hashed')
|
|
end
|
|
end
|
|
|
|
def repo_relative_path
|
|
# Remove root path and `.git` at the end
|
|
repo_path[@root_path.size...-4]
|
|
end
|
|
|
|
def repository
|
|
@repository ||= Rugged::Repository.new(repo_path)
|
|
end
|
|
end
|
|
end
|
|
end
|