Class: Gitolite::Config

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

Defined Under Namespace

Classes: Group, GroupDependencyError, InvalidPermissionError, ParseError, Repo

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(config) ⇒ Config

Returns a new instance of Config.



18
19
20
21
22
23
# File 'lib/gitolite/config.rb', line 18

def initialize(config)
  @repos = {}
  @groups = {}
  @filename = File.basename(config)
  process_config(config)
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(meth, *args, &block) ⇒ Object (private)



230
231
232
233
234
235
236
237
238
239
240
241
242
243
# File 'lib/gitolite/config.rb', line 230

def method_missing(meth, *args, &block)
  if meth.to_s =~ /normalize_(\w+)_name/
    # Could use Object.const_get to figure out the constant here
    # but for only two cases, this is more readable
    case $1
      when "repo"
        normalize_name(args[0], Gitolite::Config::Repo)
      when "group"
        normalize_name(args[0], Gitolite::Config::Group)
    end
  else
    super
  end
end

Instance Attribute Details

#filenameObject

Returns the value of attribute filename.



7
8
9
# File 'lib/gitolite/config.rb', line 7

def filename
  @filename
end

#groupsObject

Returns the value of attribute groups.



7
8
9
# File 'lib/gitolite/config.rb', line 7

def groups
  @groups
end

#reposObject

Returns the value of attribute repos.



7
8
9
# File 'lib/gitolite/config.rb', line 7

def repos
  @repos
end

Class Method Details

.init(filename = "gitolite.conf") ⇒ Object



9
10
11
12
13
14
15
# File 'lib/gitolite/config.rb', line 9

def self.init(filename = "gitolite.conf")
  file = Tempfile.new(filename)
  conf = self.new(file.path)
  conf.filename = filename #kill suffix added by Tempfile
  file.close(unlink_now = true)
  conf
end

Instance Method Details

#add_group(group, overwrite = false) ⇒ Object

Raises:

  • (ArgumentError)


51
52
53
54
# File 'lib/gitolite/config.rb', line 51

def add_group(group, overwrite = false)
  raise ArgumentError, "Group must be of type Gitolite::Config::Group!" unless group.instance_of? Gitolite::Config::Group
  @groups[group.name] = group
end

#add_repo(repo, overwrite = false) ⇒ Object

TODO: merge repo unless overwrite = true

Raises:

  • (ArgumentError)


27
28
29
30
# File 'lib/gitolite/config.rb', line 27

def add_repo(repo, overwrite = false)
  raise ArgumentError, "Repo must be of type Gitolite::Config::Repo!" unless repo.instance_of? Gitolite::Config::Repo
  @repos[repo.name] = repo
end

#get_group(group) ⇒ Object



69
70
71
72
# File 'lib/gitolite/config.rb', line 69

def get_group(group)
  name = normalize_group_name(group)
  @groups[name]
end

#get_repo(repo) ⇒ Object



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

def get_repo(repo)
  name = normalize_repo_name(repo)
  @repos[name]
end

#has_group?(group) ⇒ Boolean

Returns:

  • (Boolean)


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

def has_group?(group)
  name = normalize_group_name(group)
  @groups.has_key?(name)
end

#has_repo?(repo) ⇒ Boolean

Returns:

  • (Boolean)


39
40
41
42
# File 'lib/gitolite/config.rb', line 39

def has_repo?(repo)
  name = normalize_repo_name(repo)
  @repos.has_key?(name)
end

#rm_group(group) ⇒ Object



57
58
59
60
# File 'lib/gitolite/config.rb', line 57

def rm_group(group)
  name = normalize_group_name(group)
  @groups.delete(name)
end

#rm_repo(repo) ⇒ Object



33
34
35
36
# File 'lib/gitolite/config.rb', line 33

def rm_repo(repo)
  name = normalize_repo_name(repo)
  @repos.delete(name)
end

#to_file(path = ".", filename = @filename) ⇒ Object

Raises:

  • (ArgumentError)


75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# File 'lib/gitolite/config.rb', line 75

def to_file(path=".", filename=@filename)
  raise ArgumentError, "Path contains a filename or does not exist" unless File.directory?(path)

  new_conf = File.join(path, filename)
  File.open(new_conf, "w") do |f|
    f.sync = true

    # Output groups
    dep_order = build_groups_depgraph
    dep_order.each {|group| f.write group.to_s }

    gitweb_descs = []
    @repos.sort.each do |k, v|
      f.write "\n"
      f.write v.to_s

      gwd = v.gitweb_description
      gitweb_descs.push(gwd) unless gwd.nil?
    end

    f.write "\n"
    f.write gitweb_descs.join("\n")
  end

  new_conf
end