94 lines
3.2 KiB
Ruby
94 lines
3.2 KiB
Ruby
module Gitolitable
|
|
module Paths
|
|
extend ActiveSupport::Concern
|
|
|
|
|
|
# This is the repository path from Redmine point of view.
|
|
# It is used to build HTTP(s) urls (including GoLang url).
|
|
# It doesn't contain references to internal directories like *gitolite_global_storage_dir* or *gitolite_redmine_storage_dir*
|
|
# to stay abstract from the real repository location.
|
|
# In this case, the real repository path is deduced from the path given thanks to the *find_by_path* method.
|
|
#
|
|
# Example : blabla/test-blabla/uuuuuuuuuuu/oooooo
|
|
#
|
|
# Call File.expand_path to add then remove heading /
|
|
#
|
|
def redmine_repository_path
|
|
File.expand_path(File.join('./', get_full_parent_path, git_cache_id), '/')[1..-1]
|
|
end
|
|
|
|
|
|
# This is the Gitolite repository identifier as it should appear in Gitolite config file.
|
|
# Example : redmine/blabla/test-blabla/uuuuuuuuuuu/oooooo
|
|
# (with 'redmine' a subdir of the Gitolite storage directory)
|
|
#
|
|
# Call File.expand_path to add then remove heading /
|
|
#
|
|
def gitolite_repository_name
|
|
File.expand_path(File.join('./', RedmineGitHosting::Config.gitolite_redmine_storage_dir, get_full_parent_path, git_cache_id), '/')[1..-1]
|
|
end
|
|
|
|
|
|
# The Gitolite repository identifier with the .git extension.
|
|
# Example : redmine/blabla/test-blabla/uuuuuuuuuuu/oooooo.git
|
|
#
|
|
def gitolite_repository_name_with_extension
|
|
"#{gitolite_repository_name}.git"
|
|
end
|
|
|
|
|
|
# This is the relative path to the Gitolite repository.
|
|
# Example : repositories/redmine/blabla/test-blabla/uuuuuuuuuuu/oooooo.git
|
|
# (with 'repositories' the Gitolite storage directory).
|
|
#
|
|
def gitolite_repository_path
|
|
File.join(RedmineGitHosting::Config.gitolite_global_storage_dir, gitolite_repository_name_with_extension)
|
|
end
|
|
|
|
|
|
# This is the full absolute path to the Gitolite repository.
|
|
# Example : /home/git/repositories/redmine/blabla/test-blabla/uuuuuuuuuuu/oooooo.git
|
|
#
|
|
def gitolite_full_repository_path
|
|
File.join(RedmineGitHosting::Config.gitolite_home_dir, gitolite_repository_path)
|
|
end
|
|
|
|
|
|
# A syntaxic sugar used to move repository from a location to an other
|
|
# Example : repositories/blabla/test-blabla/uuuuuuuuuuu/oooooo
|
|
#
|
|
def new_repository_name
|
|
gitolite_repository_name
|
|
end
|
|
|
|
|
|
# Used to move repository from a location to an other.
|
|
# At this point repository url still points to the old location but
|
|
# it contains the Gitolite storage directory in its path and the '.git' extension.
|
|
# Strip them to get the old repository name.
|
|
# Example :
|
|
# before : repositories/redmine/blabla/test-blabla/uuuuuuuuuuu/oooooo.git
|
|
# after : redmine/blabla/test-blabla/uuuuuuuuuuu/oooooo
|
|
#
|
|
def old_repository_name
|
|
url.gsub(RedmineGitHosting::Config.gitolite_global_storage_dir, '').gsub('.git', '')
|
|
end
|
|
|
|
|
|
private
|
|
|
|
|
|
def get_full_parent_path
|
|
return '' if !RedmineGitHosting::Config.hierarchical_organisation?
|
|
parent_parts = []
|
|
p = project
|
|
while p.parent
|
|
parent_id = p.parent.identifier.to_s
|
|
parent_parts.unshift(parent_id)
|
|
p = p.parent
|
|
end
|
|
parent_parts.join('/')
|
|
end
|
|
|
|
end
|
|
end
|