Class: Gitolite::UserGroup

Inherits:
Object
  • Object
show all
Includes:
Utils
Defined in:
lib/gitolite/user_group.rb

Constant Summary collapse

GROUP_CONFIG_PATH =
'conf/group-defs'
UserGroupTemplate =

we need this to make sure that group is there but dummy name is needed to pass gitolite check DUMMY_USERNAME = ‘r8_dummy_group_user’

Erubis::Eruby.new <<-eos
  @<%=user_group.name%> = <%= user_group.members.empty? ? 'r8_dummy_group_user' : user_group.members.join(' ') %>
eos

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Utils

#gitolite_friendly, #is_subset?, #raise_gitolite_error, #validate_gitolite_conf_file

Constructor Details

#initialize(group_name, logger_, gitolite_path, gitolite_branch = "master") ⇒ UserGroup

Returns a new instance of UserGroup.



33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/gitolite/user_group.rb', line 33

def initialize(group_name, logger_, gitolite_path, gitolite_branch = "master")
  @name    = group_name
  @members = []
  @commit_messages = []
  @group_file_path = File.join(GROUP_CONFIG_PATH, "#{@name}.conf")
  @gitolite_admin_repo ||= Git::FileAccess.new(gitolite_path, gitolite_branch)
  @logger = logger_

  if exists?
    load_group()
  end
end

Instance Attribute Details

#loggerObject

Returns the value of attribute logger.



31
32
33
# File 'lib/gitolite/user_group.rb', line 31

def logger
  @logger
end

#membersObject

Returns the value of attribute members.



31
32
33
# File 'lib/gitolite/user_group.rb', line 31

def members
  @members
end

#nameObject

Returns the value of attribute name.



31
32
33
# File 'lib/gitolite/user_group.rb', line 31

def name
  @name
end

Instance Method Details

#add_git_usernames(array_of_usernames) ⇒ Object



72
73
74
75
76
77
78
# File 'lib/gitolite/user_group.rb', line 72

def add_git_usernames(array_of_usernames)
  unless is_subset?(@members, array_of_usernames)
    @members.concat(array_of_usernames)
    @members.uniq!
    @commit_messages << "Added users (#{array_of_usernames.join(', ')}) to group '#{@name}'"
  end
end

#any_changes?Boolean

Returns:

  • (Boolean)


68
69
70
# File 'lib/gitolite/user_group.rb', line 68

def any_changes?
  !@commit_messages.empty?
end

#commit_changes(override_commit_message = nil) ⇒ Object



93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
# File 'lib/gitolite/user_group.rb', line 93

def commit_changes(override_commit_message = nil)
  # we check if there were changes
  unless @commit_messages.empty?
    content = file_content()

    commit_msg = override_commit_message || @commit_messages.join(', ')

    @gitolite_admin_repo.add_file(@group_file_path,content)
    @gitolite_admin_repo.commit(commit_msg)
    
    @logger.info(commit_msg)
  else
    @logger.info("There has been no changes on group '#{@name}' skipping gitolite commit.")
  end
end

#exists?Boolean

Returns:

  • (Boolean)


64
65
66
# File 'lib/gitolite/user_group.rb', line 64

def exists?
  !@gitolite_admin_repo.file_content(@group_file_path).nil?
end

#file_contentObject



110
111
112
# File 'lib/gitolite/user_group.rb', line 110

def file_content()
  UserGroupTemplate.result(:user_group => self)
end

#load_groupObject



46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/gitolite/user_group.rb', line 46

def load_group()
  raw_content = @gitolite_admin_repo.file_content(@group_file_path)

  unless raw_content
    raise Gitolite::NotFound, "Configuration file for user group (#{@name}) does not exist"
  end

  raw_content.each_line do |l|
    l.chomp!()
    if l =~ /.*=(.+)$/
      raw_members = $1
      @members = raw_members.chomp().split(' ')
    else
      raise ::Error::GitoliteParsing, "Parsing groups error: (#{l})"
    end
  end
end

#remove_git_usernames(array_of_usernames) ⇒ Object



86
87
88
89
90
91
# File 'lib/gitolite/user_group.rb', line 86

def remove_git_usernames(array_of_usernames)
  if is_subset?(@members, array_of_usernames)
    @members = @members - array_of_usernames
    @commit_messages << "Removed users (#{array_of_usernames.join(', ')}) from group '#{@name}'"  
  end
end

#set_git_usernames(array_of_usernames) ⇒ Object



80
81
82
83
84
# File 'lib/gitolite/user_group.rb', line 80

def set_git_usernames(array_of_usernames)
  # we clean current member since we are setting all gitusernames (not adding)
  @members = []
  add_git_usernames(array_of_usernames)
end