gitosis_easy_conf 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,187 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{gitosis_easy_conf}
8
+ s.version = "0.0.3"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Gerrit Riessen"]
12
+ s.date = %q{2011-09-01}
13
+ s.description = %q{Easy gitosis configuration}
14
+ s.email = %q{gerrit.riessen@gmail.com}
15
+ s.extra_rdoc_files = [
16
+ "LICENSE.txt",
17
+ "README.rdoc"
18
+ ]
19
+ s.files = [
20
+ ".document",
21
+ ".rvmrc",
22
+ "Gemfile",
23
+ "LICENSE.txt",
24
+ "README.rdoc",
25
+ "Rakefile",
26
+ "VERSION",
27
+ "examples/Rakefile",
28
+ "examples/gitosis.complex.conf",
29
+ "examples/gitosis.concise.conf",
30
+ "examples/gitosis.readme.conf",
31
+ "gitosis_easy_conf.gemspec",
32
+ "lib/gitosis_easy_conf.rb",
33
+ "lib/gitosis_easy_conf/config.rb",
34
+ "lib/gitosis_easy_conf/forkers.rb",
35
+ "lib/gitosis_easy_conf/groups.rb",
36
+ "lib/gitosis_easy_conf/repositories.rb",
37
+ "test/helper.rb",
38
+ "test/test_gitosis_config.rb",
39
+ "test/test_gitosis_forker.rb",
40
+ "test/test_gitosis_groups.rb",
41
+ "test/test_gitosis_repositories.rb"
42
+ ]
43
+ s.homepage = %q{https://github.com/gorenje/gitosis_easy_conf}
44
+ s.licenses = ["MIT"]
45
+ s.require_paths = ["lib"]
46
+ s.rubygems_version = %q{1.6.2}
47
+ s.summary = %q{Make writing a gitosis configuration easier}
48
+
49
+ if s.respond_to? :specification_version then
50
+ s.specification_version = 3
51
+
52
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
53
+ s.add_runtime_dependency(%q<gitosis_easy_conf>, [">= 0"])
54
+ s.add_development_dependency(%q<shoulda>, [">= 0"])
55
+ s.add_development_dependency(%q<rake>, [">= 0"])
56
+ s.add_development_dependency(%q<inifile>, [">= 0"])
57
+ s.add_development_dependency(%q<rdoc>, [">= 0"])
58
+ s.add_development_dependency(%q<rcov>, [">= 0"])
59
+ s.add_development_dependency(%q<rr>, [">= 0"])
60
+ s.add_development_dependency(%q<shoulda>, [">= 0"])
61
+ s.add_development_dependency(%q<rake>, [">= 0"])
62
+ s.add_development_dependency(%q<jeweler>, [">= 0"])
63
+ s.add_development_dependency(%q<inifile>, [">= 0"])
64
+ s.add_development_dependency(%q<rdoc>, [">= 0"])
65
+ s.add_development_dependency(%q<rcov>, [">= 0"])
66
+ s.add_development_dependency(%q<rr>, [">= 0"])
67
+ s.add_development_dependency(%q<shoulda>, [">= 0"])
68
+ s.add_development_dependency(%q<rake>, [">= 0"])
69
+ s.add_development_dependency(%q<jeweler>, [">= 0"])
70
+ s.add_development_dependency(%q<inifile>, [">= 0"])
71
+ s.add_development_dependency(%q<rdoc>, [">= 0"])
72
+ s.add_development_dependency(%q<rcov>, [">= 0"])
73
+ s.add_development_dependency(%q<rr>, [">= 0"])
74
+ s.add_development_dependency(%q<shoulda>, [">= 0"])
75
+ s.add_development_dependency(%q<rake>, [">= 0"])
76
+ s.add_development_dependency(%q<jeweler>, [">= 0"])
77
+ s.add_development_dependency(%q<inifile>, [">= 0"])
78
+ s.add_development_dependency(%q<rdoc>, [">= 0"])
79
+ s.add_development_dependency(%q<rcov>, [">= 0"])
80
+ s.add_development_dependency(%q<rr>, [">= 0"])
81
+ s.add_development_dependency(%q<shoulda>, [">= 0"])
82
+ s.add_development_dependency(%q<rake>, [">= 0"])
83
+ s.add_development_dependency(%q<jeweler>, [">= 0"])
84
+ s.add_development_dependency(%q<inifile>, [">= 0"])
85
+ s.add_development_dependency(%q<rdoc>, [">= 0"])
86
+ s.add_development_dependency(%q<rcov>, [">= 0"])
87
+ s.add_development_dependency(%q<rr>, [">= 0"])
88
+ s.add_development_dependency(%q<shoulda>, [">= 0"])
89
+ s.add_development_dependency(%q<rake>, [">= 0"])
90
+ s.add_development_dependency(%q<jeweler>, [">= 0"])
91
+ s.add_development_dependency(%q<inifile>, [">= 0"])
92
+ s.add_development_dependency(%q<rdoc>, [">= 0"])
93
+ s.add_development_dependency(%q<rcov>, [">= 0"])
94
+ s.add_development_dependency(%q<rr>, [">= 0"])
95
+ s.add_runtime_dependency(%q<inifile>, [">= 0"])
96
+ else
97
+ s.add_dependency(%q<gitosis_easy_conf>, [">= 0"])
98
+ s.add_dependency(%q<shoulda>, [">= 0"])
99
+ s.add_dependency(%q<rake>, [">= 0"])
100
+ s.add_dependency(%q<inifile>, [">= 0"])
101
+ s.add_dependency(%q<rdoc>, [">= 0"])
102
+ s.add_dependency(%q<rcov>, [">= 0"])
103
+ s.add_dependency(%q<rr>, [">= 0"])
104
+ s.add_dependency(%q<shoulda>, [">= 0"])
105
+ s.add_dependency(%q<rake>, [">= 0"])
106
+ s.add_dependency(%q<jeweler>, [">= 0"])
107
+ s.add_dependency(%q<inifile>, [">= 0"])
108
+ s.add_dependency(%q<rdoc>, [">= 0"])
109
+ s.add_dependency(%q<rcov>, [">= 0"])
110
+ s.add_dependency(%q<rr>, [">= 0"])
111
+ s.add_dependency(%q<shoulda>, [">= 0"])
112
+ s.add_dependency(%q<rake>, [">= 0"])
113
+ s.add_dependency(%q<jeweler>, [">= 0"])
114
+ s.add_dependency(%q<inifile>, [">= 0"])
115
+ s.add_dependency(%q<rdoc>, [">= 0"])
116
+ s.add_dependency(%q<rcov>, [">= 0"])
117
+ s.add_dependency(%q<rr>, [">= 0"])
118
+ s.add_dependency(%q<shoulda>, [">= 0"])
119
+ s.add_dependency(%q<rake>, [">= 0"])
120
+ s.add_dependency(%q<jeweler>, [">= 0"])
121
+ s.add_dependency(%q<inifile>, [">= 0"])
122
+ s.add_dependency(%q<rdoc>, [">= 0"])
123
+ s.add_dependency(%q<rcov>, [">= 0"])
124
+ s.add_dependency(%q<rr>, [">= 0"])
125
+ s.add_dependency(%q<shoulda>, [">= 0"])
126
+ s.add_dependency(%q<rake>, [">= 0"])
127
+ s.add_dependency(%q<jeweler>, [">= 0"])
128
+ s.add_dependency(%q<inifile>, [">= 0"])
129
+ s.add_dependency(%q<rdoc>, [">= 0"])
130
+ s.add_dependency(%q<rcov>, [">= 0"])
131
+ s.add_dependency(%q<rr>, [">= 0"])
132
+ s.add_dependency(%q<shoulda>, [">= 0"])
133
+ s.add_dependency(%q<rake>, [">= 0"])
134
+ s.add_dependency(%q<jeweler>, [">= 0"])
135
+ s.add_dependency(%q<inifile>, [">= 0"])
136
+ s.add_dependency(%q<rdoc>, [">= 0"])
137
+ s.add_dependency(%q<rcov>, [">= 0"])
138
+ s.add_dependency(%q<rr>, [">= 0"])
139
+ s.add_dependency(%q<inifile>, [">= 0"])
140
+ end
141
+ else
142
+ s.add_dependency(%q<gitosis_easy_conf>, [">= 0"])
143
+ s.add_dependency(%q<shoulda>, [">= 0"])
144
+ s.add_dependency(%q<rake>, [">= 0"])
145
+ s.add_dependency(%q<inifile>, [">= 0"])
146
+ s.add_dependency(%q<rdoc>, [">= 0"])
147
+ s.add_dependency(%q<rcov>, [">= 0"])
148
+ s.add_dependency(%q<rr>, [">= 0"])
149
+ s.add_dependency(%q<shoulda>, [">= 0"])
150
+ s.add_dependency(%q<rake>, [">= 0"])
151
+ s.add_dependency(%q<jeweler>, [">= 0"])
152
+ s.add_dependency(%q<inifile>, [">= 0"])
153
+ s.add_dependency(%q<rdoc>, [">= 0"])
154
+ s.add_dependency(%q<rcov>, [">= 0"])
155
+ s.add_dependency(%q<rr>, [">= 0"])
156
+ s.add_dependency(%q<shoulda>, [">= 0"])
157
+ s.add_dependency(%q<rake>, [">= 0"])
158
+ s.add_dependency(%q<jeweler>, [">= 0"])
159
+ s.add_dependency(%q<inifile>, [">= 0"])
160
+ s.add_dependency(%q<rdoc>, [">= 0"])
161
+ s.add_dependency(%q<rcov>, [">= 0"])
162
+ s.add_dependency(%q<rr>, [">= 0"])
163
+ s.add_dependency(%q<shoulda>, [">= 0"])
164
+ s.add_dependency(%q<rake>, [">= 0"])
165
+ s.add_dependency(%q<jeweler>, [">= 0"])
166
+ s.add_dependency(%q<inifile>, [">= 0"])
167
+ s.add_dependency(%q<rdoc>, [">= 0"])
168
+ s.add_dependency(%q<rcov>, [">= 0"])
169
+ s.add_dependency(%q<rr>, [">= 0"])
170
+ s.add_dependency(%q<shoulda>, [">= 0"])
171
+ s.add_dependency(%q<rake>, [">= 0"])
172
+ s.add_dependency(%q<jeweler>, [">= 0"])
173
+ s.add_dependency(%q<inifile>, [">= 0"])
174
+ s.add_dependency(%q<rdoc>, [">= 0"])
175
+ s.add_dependency(%q<rcov>, [">= 0"])
176
+ s.add_dependency(%q<rr>, [">= 0"])
177
+ s.add_dependency(%q<shoulda>, [">= 0"])
178
+ s.add_dependency(%q<rake>, [">= 0"])
179
+ s.add_dependency(%q<jeweler>, [">= 0"])
180
+ s.add_dependency(%q<inifile>, [">= 0"])
181
+ s.add_dependency(%q<rdoc>, [">= 0"])
182
+ s.add_dependency(%q<rcov>, [">= 0"])
183
+ s.add_dependency(%q<rr>, [">= 0"])
184
+ s.add_dependency(%q<inifile>, [">= 0"])
185
+ end
186
+ end
187
+
@@ -0,0 +1,26 @@
1
+ module Gitosis
2
+ class Config
3
+ def initialize(&block)
4
+ @configs = {}
5
+ instance_eval(&block)
6
+ end
7
+
8
+ def method_missing(method, *args, &block)
9
+ if args.length > 0 || block_given?
10
+ @configs[method] = case method
11
+ when :fork_naming_convention then
12
+ if block_given? && ![2,-1].include?(block.arity)
13
+ raise BlockArityIncorrect, "Block needs exactly two arguments"
14
+ end
15
+ block
16
+ when :filename then
17
+ args.first
18
+ else
19
+ [args, block]
20
+ end
21
+ else
22
+ @configs[method]
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,45 @@
1
+ # Define a mapping from a Gitosis user and their public key. Here the use of string and
2
+ # symbol are unimportant, i.e.
3
+ # Gitosis.forkers do
4
+ # fubar :key_one
5
+ # fubar "key_one"
6
+ # end
7
+ # are equivalent.
8
+ #
9
+ module Gitosis
10
+ class Forker
11
+ def initialize(&block)
12
+ @forkers = {}
13
+ instance_eval(&block)
14
+ end
15
+
16
+ def method_missing(method, *args, &block)
17
+ if args.length > 0
18
+
19
+ if @forkers.values.include?(args.first.to_s)
20
+ raise(SamePublicKeyForForkers, "Key '#{args.first}' used by '#{method}' "+
21
+ "and #{@forkers.invert[args.first.to_s]}'")
22
+ end
23
+
24
+ if @forkers.keys.include?(method)
25
+ raise(ForkerAlreadyDefined, "Forker '#{method}' already defined with key: " +
26
+ "#{@forkers[method]}")
27
+ end
28
+
29
+ @forkers[method] = args.first.to_s
30
+ else
31
+ raise(Gitosis::UnknownForker,
32
+ "Forker '#{method}' Not Found") unless @forkers.keys.include?(method)
33
+ @forkers[method]
34
+ end
35
+ end
36
+
37
+ def [](name)
38
+ send(name.to_sym)
39
+ end
40
+
41
+ def all
42
+ @forkers.keys
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,69 @@
1
+ # Group definition use strings and symbols to define groups with mutliple members and
2
+ # shared membership:
3
+ # Gitosis.groups do
4
+ # fubar 'public.key'
5
+ # snafu :fubar
6
+ # luke 'fubar'
7
+ # combined :luke, :snafu, :fubar
8
+ # end
9
+ #
10
+ # This means that the following have the values:
11
+ # Gitosis.groups[:fubar] ==> 'public.key'
12
+ # Gitosis.groups[:snafu] ==> 'public.key'
13
+ # Gitosis.groups[:luke] ==> 'fubar'
14
+ # Gitosis.groups[:combined] ==> 'public.key fubar'
15
+ #
16
+ # String values are public keys and symbols are references to group names.
17
+ # Duplicate key names are removed and returned is a concatenation of all keys.
18
+ #
19
+ module Gitosis
20
+ class Group
21
+
22
+ def initialize(&block)
23
+ @groups = {}
24
+ instance_eval(&block)
25
+ end
26
+
27
+ def method_missing(method, *args, &block)
28
+ if args.length > 0
29
+ @groups[method.to_sym] = args
30
+ else
31
+ raise UnknownGroup, "Unkown group '#{method}'" unless @groups[method]
32
+ @groups[method].uniq.join(" ")
33
+ end
34
+ end
35
+
36
+ def denormalize
37
+ @groups.keys.each do |key|
38
+ @groups[key] = @groups[key].collect do |member|
39
+ @_refs = []
40
+ denormalize_member(member)
41
+ end.flatten
42
+ end
43
+ self
44
+ end
45
+
46
+ def [](name)
47
+ send(name)
48
+ end
49
+
50
+ private
51
+
52
+ def denormalize_member(member)
53
+ case member
54
+ when String then member
55
+ when Symbol
56
+ if @_refs.include?(member)
57
+ raise SelfReferencingGroup, "Group '#{member}' cycle reference"
58
+ end
59
+ @_refs << member
60
+
61
+ raise UnknownGroup, "Unkown group '#{member}'" unless @groups[member]
62
+
63
+ @groups[member].collect { |a| denormalize_member(a) }
64
+ else
65
+ raise UnknownGroupType, "Group '#{member}' type not supported: #{member.class}"
66
+ end
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,88 @@
1
+ # Definition of a gitosis repository.
2
+ #
3
+ require 'inifile'
4
+
5
+ module Gitosis
6
+ EmptyConfig = {
7
+ :writable => [], :readable => [], :forks => []
8
+ }
9
+
10
+ class Repository
11
+ def initialize(&block)
12
+ @base_config = EmptyConfig
13
+
14
+ conf_file_name = Gitosis.config.filename
15
+ @no_file_found = if conf_file_name.nil? or !File.exists?(conf_file_name)
16
+ @conffile = {}
17
+ true
18
+ else
19
+ @conffile = IniFile.new(conf_file_name)
20
+ false
21
+ end
22
+ @conffile["gitosis"] = {}
23
+ @origconffile = @conffile.clone
24
+
25
+ @fork_name = Gitosis.config.fork_naming_convention || lambda do |repo,forker|
26
+ "#{forker}_#{repo}"
27
+ end
28
+
29
+ instance_eval(&block)
30
+ end
31
+
32
+ def write
33
+ @conffile.write unless @conffile.eql?(@origconffile) || @no_file_found
34
+ end
35
+
36
+ def with_base_configuration(config,&block)
37
+ @base_config = config || EmptyConfig
38
+ instance_eval(&block)
39
+ @base_config = EmptyConfig
40
+ end
41
+
42
+ def method_missing(method, *args, &block)
43
+ args = [{}] if args.first.nil?
44
+ repo_name = (args.first[:name] || method).to_sym
45
+
46
+ committers = _get_keys([@base_config,args.first].map{|h| h[:writable]})
47
+ @conffile["group #{repo_name}.writable"] = {
48
+ 'members' => committers,
49
+ 'writable' => repo_name.to_s
50
+ } unless committers == ""
51
+
52
+ readers = _get_keys([@base_config,args.first].map{|h| h[:readable]})
53
+ @conffile["group #{repo_name}.readonly"] = {
54
+ 'members' => readers,
55
+ 'readonly' => repo_name.to_s
56
+ } unless readers == ""
57
+
58
+ [@base_config, args.first].map { |h| h[:forks] }.flatten.compact.
59
+ collect { |a| a == :all ? Gitosis.forkers.all : a }.flatten.compact.each do |forker|
60
+
61
+ fork_repo_name = @fork_name.call(repo_name,forker)
62
+
63
+ @conffile["group fork.#{repo_name}.#{forker}.writable"] = {
64
+ 'members' => ::Forker[forker],
65
+ 'writable' => fork_repo_name,
66
+ }
67
+
68
+ @conffile["group fork.#{repo_name}.#{forker}.readonly"] = {
69
+ 'members' => readers,
70
+ 'readonly' => fork_repo_name,
71
+ } unless readers == ""
72
+ end
73
+ end
74
+
75
+ private
76
+
77
+ def _get_keys(ary)
78
+ ary.flatten.compact.collect do |member|
79
+ case member
80
+ when String then member
81
+ when Symbol then Gitosis.groups[member]
82
+ else
83
+ raise UnknownGroup, "Group '#{member}'"
84
+ end
85
+ end.flatten.join(' ')
86
+ end
87
+ end
88
+ end
@@ -0,0 +1,60 @@
1
+ require 'gitosis_easy_conf/repositories'
2
+ require 'gitosis_easy_conf/groups'
3
+ require 'gitosis_easy_conf/forkers'
4
+ require 'gitosis_easy_conf/config'
5
+
6
+ module Gitosis
7
+ extend self
8
+
9
+ # Exceptions
10
+ %w[
11
+ SelfReferencingGroup UnknownForker UnknownGroup
12
+ UnknownGroupType SamePublicKeyForForkers ForkerAlreadyDefined
13
+ BlockArityIncorrect
14
+ ].each do |exception_name|
15
+ const_set( exception_name, Class.new(StandardError))
16
+ end
17
+
18
+ # Configuration verbs -- config, forkers, groups (or roles) and repositories.
19
+ def config(&block)
20
+ if block_given?
21
+ if defined?(@@config)
22
+ @@config.instance_eval(&block)
23
+ else
24
+ @@config = Config.new(&block)
25
+ end
26
+ else
27
+ @@config ||= Config.new(){}
28
+ end
29
+ end
30
+
31
+ def forkers(&block)
32
+ block_given? ? @@forkers = Forker.new(&block) : (@@forkers ||= nil)
33
+ end
34
+
35
+ def groups(&block)
36
+ block_given? ? @@groups = Group.new(&block).denormalize : (@@groups ||= nil)
37
+ end
38
+ alias :roles :groups
39
+
40
+ def repositories(&block)
41
+ block_given? ? @@repository = Repository.new(&block) : @@repository
42
+ end
43
+
44
+ def setup(filename = nil, &block)
45
+ config do
46
+ filename filename
47
+ end
48
+
49
+ class_eval(&block)
50
+ repositories.write
51
+ end
52
+ end
53
+
54
+ class Forker
55
+ class << self
56
+ def [](name)
57
+ Gitosis.forkers.send(name.to_sym)
58
+ end
59
+ end
60
+ end
data/test/helper.rb ADDED
@@ -0,0 +1,40 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+ begin
4
+ Bundler.setup(:default, :development)
5
+ rescue Bundler::BundlerError => e
6
+ $stderr.puts e.message
7
+ $stderr.puts "Run `bundle install` to install missing gems"
8
+ exit e.status_code
9
+ end
10
+ require 'test/unit'
11
+ require 'shoulda'
12
+ require 'inifile'
13
+ require 'rr'
14
+
15
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
16
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
17
+ require 'gitosis_easy_conf'
18
+
19
+ class Test::Unit::TestCase
20
+ include RR::Adapters::TestUnit
21
+
22
+ # used in the repository tests, compares the complete gitosis configuration.
23
+ # assumes the existence of @results hash.
24
+ def assert_config(expected,msg)
25
+ assert_equal( (["gitosis"] + expected.keys).sort, @results.keys.sort,
26
+ msg + " (top level keys)")
27
+ assert_equal( {}, @results["gitosis"], msg + " (empty gitosis)")
28
+
29
+ expected.keys.each do |group_keys|
30
+ gmsg = msg + " [#{group_keys}]"
31
+ assert_equal(expected[group_keys].keys.sort,
32
+ @results[group_keys].keys.sort, gmsg+" (prop keys)")
33
+
34
+ exp, com = expected[group_keys], @results[group_keys]
35
+ exp.keys.each do |property_key|
36
+ assert_equal exp[property_key], com[property_key], gmsg + " [#{property_key}]"
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,99 @@
1
+ require 'helper'
2
+
3
+ class TestGitosisConfig < Test::Unit::TestCase
4
+ context "config" do
5
+
6
+ should "return a config hash if block given" do
7
+ Gitosis.config do
8
+ fubar(:one,:two) do
9
+ puts "blah"
10
+ end
11
+ end
12
+ assert_equal [:one,:two], Gitosis.config.fubar.first
13
+ assert Gitosis.config.fubar.last.is_a?(Proc)
14
+ end
15
+
16
+ should "return a filename" do
17
+ Gitosis.config do
18
+ filename
19
+ end
20
+ assert_equal nil, Gitosis.config.filename
21
+
22
+ Gitosis.config do
23
+ filename do
24
+ puts "blah"
25
+ end
26
+ end
27
+ assert_equal nil, Gitosis.config.filename
28
+
29
+ Gitosis.config do
30
+ filename("fubar","snafu") do
31
+ puts "blah"
32
+ end
33
+ end
34
+ assert_equal "fubar", Gitosis.config.filename
35
+ end
36
+
37
+ should "return a fork_name_convention" do
38
+ Gitosis.config do
39
+ fork_name_convention
40
+ end
41
+ assert_equal nil, Gitosis.config.fork_naming_convention
42
+
43
+ Gitosis.config do
44
+ fork_name_convention("one")
45
+ end
46
+ assert_equal nil, Gitosis.config.fork_naming_convention
47
+
48
+ Gitosis.config do
49
+ fork_naming_convention("fubar","snafu") do |para,para2|
50
+ "#{para}+#{para2}"
51
+ end
52
+ end
53
+ assert_equal Proc, Gitosis.config.fork_naming_convention.class
54
+ assert_equal "1+2", Gitosis.config.fork_naming_convention.call("1","2")
55
+
56
+ Gitosis.config do
57
+ fork_naming_convention do |para,para2|
58
+ "#{para}+#{para2}"
59
+ end
60
+ end
61
+ assert_equal Proc, Gitosis.config.fork_naming_convention.class
62
+ assert_equal "1+2", Gitosis.config.fork_naming_convention.call("1","2")
63
+
64
+ Gitosis.config do
65
+ fork_naming_convention do |*args|
66
+ '%s+%s' % args.map { |a| a.to_s }
67
+ end
68
+ end
69
+ assert_equal Proc, Gitosis.config.fork_naming_convention.class
70
+ assert_equal "1+2", Gitosis.config.fork_naming_convention.call("1","2")
71
+ end
72
+
73
+ should "fork_name_convention should complain if arity is not correct" do
74
+ assert_raises Gitosis::BlockArityIncorrect do
75
+ Gitosis.config do
76
+ fork_naming_convention("fubar","snafu") do
77
+ nil
78
+ end
79
+ end
80
+ end
81
+
82
+ assert_raises Gitosis::BlockArityIncorrect do
83
+ Gitosis.config do
84
+ fork_naming_convention("fubar","snafu") do |a|
85
+ nil
86
+ end
87
+ end
88
+ end
89
+
90
+ assert_raises Gitosis::BlockArityIncorrect do
91
+ Gitosis.config do
92
+ fork_naming_convention("fubar","snafu") do |a,b,c|
93
+ nil
94
+ end
95
+ end
96
+ end
97
+ end
98
+ end
99
+ end