Class: Gitolite::Config::Repo

Inherits:
Object
  • Object
show all
Defined in:
lib/gitolite/config/repo.rb

Overview

Represents a repo inside the gitolite configuration. The name, permissions, and git config options are all encapsulated in this class

Defined Under Namespace

Classes: InvalidPermissionError

Constant Summary collapse

ALLOWED_PERMISSIONS =
/-|C|R|RW\+?(?:C?D?|D?C?)M?/

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name) ⇒ Repo

Returns a new instance of Repo.


12
13
14
15
16
17
18
19
20
21
22
# File 'lib/gitolite/config/repo.rb', line 12

def initialize(name)
  # Store the perm hash in a lambda since we have to create a new one on every deny rule
  # The perm hash is stored as a 2D hash, with individual permissions being the first
  # degree and individual refexes being the second degree.  Both Hashes must respect order
  @perm_hash_lambda = lambda { Hash.new {|k,v| k[v] = Hash.new{|k2, v2| k2[v2] = [] }} }
  @permissions = Array.new.push(@perm_hash_lambda.call)

  @name = name
  @config = {} # git config
  @options = {} # gitolite config
end

Instance Attribute Details

#configObject

Returns the value of attribute config


10
11
12
# File 'lib/gitolite/config/repo.rb', line 10

def config
  @config
end

#descriptionObject

Returns the value of attribute description


10
11
12
# File 'lib/gitolite/config/repo.rb', line 10

def description
  @description
end

#nameObject

Returns the value of attribute name


10
11
12
# File 'lib/gitolite/config/repo.rb', line 10

def name
  @name
end

#optionsObject

Returns the value of attribute options


10
11
12
# File 'lib/gitolite/config/repo.rb', line 10

def options
  @options
end

#ownerObject

Returns the value of attribute owner


10
11
12
# File 'lib/gitolite/config/repo.rb', line 10

def owner
  @owner
end

#permissionsObject

Returns the value of attribute permissions


10
11
12
# File 'lib/gitolite/config/repo.rb', line 10

def permissions
  @permissions
end

Instance Method Details

#add_permission(perm, refex = "", *users) ⇒ Object


30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/gitolite/config/repo.rb', line 30

def add_permission(perm, refex = "", *users)
  if perm =~ ALLOWED_PERMISSIONS
    #Handle deny rules
    if perm == '-'
      @permissions.push(@perm_hash_lambda.call)
    end

    @permissions.last[perm][refex].concat users.flatten
    @permissions.last[perm][refex].uniq!
  else
    raise InvalidPermissionError, "#{perm} is not in the allowed list of permissions!"
  end
end

#clean_permissionsObject


25
26
27
# File 'lib/gitolite/config/repo.rb', line 25

def clean_permissions
  @permissions = Array.new.push(@perm_hash_lambda.call)
end

#gitweb_descriptionObject


88
89
90
91
92
93
94
95
96
# File 'lib/gitolite/config/repo.rb', line 88

def gitweb_description
  if @description.nil?
    nil
  else
    desc = "#{@name} "
    desc += "\"#{@owner}\" " unless @owner.nil?
    desc += "= \"#{@description}\""
  end
end

#set_git_config(key, value) ⇒ Object


45
46
47
# File 'lib/gitolite/config/repo.rb', line 45

def set_git_config(key, value)
  @config[key] = value
end

#set_gitolite_option(key, value) ⇒ Object


55
56
57
# File 'lib/gitolite/config/repo.rb', line 55

def set_gitolite_option(key, value)
  @options[key] = value
end

#to_sObject


65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# File 'lib/gitolite/config/repo.rb', line 65

def to_s
  repo = "repo    #{@name}\n"

  @permissions.each do |perm_hash|
    perm_hash.each do |perm, list|
      list.each do |refex, users|
        repo += "  " + perm.ljust(6) + refex.ljust(25) + "= " + users.join(' ') + "\n"
      end
    end
  end

  @config.each do |k, v|
    repo += "  config " + k + " = " + v.to_s + "\n"
  end

  @options.each do |k, v|
    repo += "  option " + k + " = " + v.to_s + "\n"
  end

  repo
end

#unset_git_config(key) ⇒ Object


50
51
52
# File 'lib/gitolite/config/repo.rb', line 50

def unset_git_config(key)
  @config.delete(key)
end

#unset_gitolite_option(key) ⇒ Object


60
61
62
# File 'lib/gitolite/config/repo.rb', line 60

def unset_gitolite_option(key)
  @options.delete(key)
end