class Gitolite::Repo
Constants
- GIOLITE_ALL_GROUP
- RepoConfTemplate
We check if there are users in addition to tenant with line, (repo_conf.rights_hash.values.flatten.size > 1) In case no, we do not give permission to tenant even
Attributes
commit_messages[RW]
logger[RW]
repo_dir_path[R]
repo_name[RW]
rights_hash[RW]
user_groups[RW]
Public Class Methods
get_repo_type(repo_name)
click to toggle source
# File lib/gitolite/repo.rb, line 51 def get_repo_type(repo_name) repo_name.match(/\-\-cm\-\-/) ? 'component' : 'service' end
new(repo_name, configuration_, logger_, gitolite_path, gitolite_branch = 'master')
click to toggle source
# File lib/gitolite/repo.rb, line 57 def initialize(repo_name, configuration_, logger_, gitolite_path, gitolite_branch = 'master') @rights_hash = { 'R' => [], 'W' => [], 'RW' => [], 'RW+' => []} @repo_name = repo_name @user_groups = [] @commit_messages = [] @repo_conf_file_path = configuration_.repo_path(repo_name) @repo_dir_path = configuration_.bare_repo_path(repo_name) @gitolite_admin_repo ||= Git::FileAccess.new(gitolite_path, gitolite_branch) @logger = logger_ if exists? load_repo() end end
Public Instance Methods
add_all_with_rights(access_rights)
click to toggle source
# File lib/gitolite/repo.rb, line 119 def add_all_with_rights(access_rights) add_username_with_rights(GIOLITE_ALL_GROUP, access_rights) end
add_user_group_with_rights(group_name, access_rights)
click to toggle source
# File lib/gitolite/repo.rb, line 115 def add_user_group_with_rights(group_name, access_rights) add_username_with_rights("@#{group_name}", access_rights) end
add_username_with_rights(username, access_rights)
click to toggle source
# File lib/gitolite/repo.rb, line 95 def add_username_with_rights(username, access_rights) # if we get nil that means that we have to delete user from its permission stack if access_rights.nil? return remove_username(username) end # Only make changes if this is new user/group unless @rights_hash[access_rights.upcase].include?(username) remove_username(username) @rights_hash[access_rights.upcase] << username @commit_messages << "Added access rights ('#{access_rights}') for user/group '#{username}', in repo '#{@repo_name}'" # add to user groups if user group is added if username.match(/^@/) @user_groups << username end end end
any_changes?()
click to toggle source
# File lib/gitolite/repo.rb, line 131 def any_changes? !@commit_messages.empty? end
branches()
click to toggle source
# File lib/gitolite/repo.rb, line 123 def branches Git::FileAccess.new(@repo_dir_path).branches() end
commit_changes(override_commit_message = nil)
click to toggle source
# File lib/gitolite/repo.rb, line 135 def commit_changes(override_commit_message = nil) unless @commit_messages.empty? content = configuration_content() validate_gitolite_conf_file(content) commit_msg = override_commit_message || @commit_messages.join(', ') @gitolite_admin_repo.add_file(@repo_conf_file_path,content) @gitolite_admin_repo.commit(commit_msg) @logger.info(commit_msg) else @logger.info("There has been no changes on repo '#{@repo_name}' skipping gitolite commit.") end end
exists?()
click to toggle source
# File lib/gitolite/repo.rb, line 127 def exists? !@gitolite_admin_repo.file_content(@repo_conf_file_path).nil? end
file_content(path, branch=Git::Adapter::DEFAULT_BRANCH)
click to toggle source
# File lib/gitolite/repo.rb, line 151 def file_content(path, branch=Git::Adapter::DEFAULT_BRANCH) Git::FileAccess.new(@repo_dir_path, branch).file_content(path) end
file_content_and_size(path, branch=Git::Adapter::DEFAULT_BRANCH)
click to toggle source
# File lib/gitolite/repo.rb, line 155 def file_content_and_size(path, branch=Git::Adapter::DEFAULT_BRANCH) Git::FileAccess.new(@repo_dir_path, branch).file_content_and_size(path) end
file_list(depth=nil, branch=Git::Adapter::DEFAULT_BRANCH)
click to toggle source
# File lib/gitolite/repo.rb, line 159 def file_list(depth=nil, branch=Git::Adapter::DEFAULT_BRANCH) Git::FileAccess.new(@repo_dir_path, branch).ls_r(depth) end
remove_group(group_name)
click to toggle source
# File lib/gitolite/repo.rb, line 91 def remove_group(group_name) remove_username("@#{group_name}") end
remove_username(username)
click to toggle source
# File lib/gitolite/repo.rb, line 82 def remove_username(username) @rights_hash.each do |k,v| if v.include?(username) v.delete(username) @commit_messages << "Removed access rights ('#{k}') for user/group '#{username}'" end end end
rights_for_username(username)
click to toggle source
# File lib/gitolite/repo.rb, line 72 def rights_for_username(username) @rights_hash.each do |k,v| if v.include?(username) return k end end return nil end
Private Instance Methods
configuration_content()
click to toggle source
# File lib/gitolite/repo.rb, line 165 def configuration_content() RepoConfTemplate.result(:repo_conf => self) end
load_repo()
click to toggle source
# File lib/gitolite/repo.rb, line 169 def load_repo() raw_content = @gitolite_admin_repo.file_content(@repo_conf_file_path) unless raw_content raise ::Error::NotFound, "Configuration file for repo (#{repo_name}) does not exist" end raw_content.each_line do |l| l.chomp!() if l =~ /^[ ]*repo[ ]+([^ ]+)/ unless $1 == repo_name raise Error::GitoliteParsing, "Parsing error: expected repo to be (${repo_name} in (#{l})" end elsif l =~ /[ ]*([^ ]+)[ ]*=[ ]*(.+)$/ access_rights = $1 users = $2 users.scan(/[^ ]+/) do |user| unless access_rights.match(/R|W|RW|RW+/) raise Error::GitoliteParsing, "Unexpected access rights while parsing file '#{access_rights}'" end @rights_hash[access_rights.to_s] << user unless @rights_hash[access_rights.to_s].include?(user) # add to user groups if present if user.match(/^@/) @user_groups << user end end elsif l.strip.empty? || l.strip().match(/^include/) #no op else raise ::Error::GitoliteParsing, "Parsing repo error: (#{l})" end end end