gitosis_easy_conf 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
data/.document ADDED
@@ -0,0 +1,5 @@
1
+ lib/**/*.rb
2
+ bin/*
3
+ -
4
+ features/**/*.feature
5
+ LICENSE.txt
data/.rvmrc ADDED
@@ -0,0 +1 @@
1
+ rvm use --create ruby-1.9.2-p180@gitosiseasyconf
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source "http://rubygems.org"
2
+
3
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2011 Gerrit Riessen
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,72 @@
1
+ = gitosis_easy_conf
2
+
3
+ == Work in Progress
4
+
5
+ This is still work in progress and the author makes no guarantee that it
6
+ will ever be completed.
7
+
8
+ == Description
9
+
10
+ Because we're using Redmine and Gitosis and are aiming to have a workflow similar to
11
+ github, i.e. fork, commit, push, pull-request, we need a repo for each developer for
12
+ every project. I.e. 2 rails apps, 3 developers would mean that we have 8 repos.
13
+ Having 8 repos, each with their own permissions and naming gets confusing using a gitosis
14
+ config, hence this gem.
15
+
16
+ Scenario:
17
+
18
+ Four developers and 3 rails applications. Two developers (dev1 & dev2) are owners can can
19
+ push commits to the master repositories, the other two developers can't deploy and commit
20
+ to the master repositories. There are also two servers to which all the applications can
21
+ be deployed to.
22
+
23
+ The following config.rb is an example:
24
+
25
+ Gitosis.config do
26
+ fork_naming_convention do |repo, forker|
27
+ "#{forker}_#{repo}"
28
+ end
29
+ filename "gitosis.readme.conf"
30
+ end
31
+
32
+ Gitosis.forkers do
33
+ developer1 'dev.one'
34
+ developer2 'dev.two'
35
+ developer3 'dev.three'
36
+ developer4 'dev.four'
37
+ end
38
+
39
+ Gitosis.groups do
40
+ admins Forker[:developer1], Forker[:developer2]
41
+ developers Forker[:developer3], Forker[:developer4]
42
+ deployers 'app1.deploy', 'app2.deploy'
43
+ all_developers :admins, :developers
44
+ end
45
+
46
+ Gitosis.repositories do
47
+ with_base_configuration( :writable => :admins,
48
+ :readable => [:all_developers, :deployers],
49
+ :forks => :all ) do
50
+ rails_app_one
51
+ rails_app_two
52
+ rails_app_three
53
+ end
54
+ end
55
+
56
+ The result of this configuration can be found in the examples directory.
57
+
58
+ == Contributing to gitosis_easy_conf
59
+
60
+ * Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet
61
+ * Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it
62
+ * Fork the project
63
+ * Start a feature/bugfix branch
64
+ * Commit and push until you are happy with your contribution
65
+ * Make sure to add tests for it. This is important so I don't break it in a future version unintentionally.
66
+ * Please try not to mess with the Rakefile, version, or history. If you want to have your own version, or is otherwise necessary, that is fine, but please isolate to its own commit so I can cherry-pick around it.
67
+
68
+ == Copyright
69
+
70
+ Copyright (c) 2011 Gerrit Riessen. See LICENSE.txt for
71
+ further details.
72
+
data/Rakefile ADDED
@@ -0,0 +1,62 @@
1
+ # encoding: utf-8
2
+
3
+ require 'rubygems'
4
+ require 'bundler'
5
+ begin
6
+ Bundler.setup(:default, :development)
7
+ rescue Bundler::BundlerError => e
8
+ $stderr.puts e.message
9
+ $stderr.puts "Run `bundle install` to install missing gems"
10
+ exit e.status_code
11
+ end
12
+
13
+ require 'jeweler'
14
+ Jeweler::Tasks.new do |gem|
15
+ # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
16
+ gem.name = "gitosis_easy_conf"
17
+ gem.homepage = "https://github.com/gorenje/gitosis_easy_conf"
18
+ gem.license = "MIT"
19
+ gem.summary = %Q{Make writing a gitosis configuration easier}
20
+ gem.description = %Q{Easy gitosis configuration}
21
+ gem.email = "gerrit.riessen@gmail.com"
22
+ gem.authors = ["Gerrit Riessen"]
23
+
24
+ gem.add_development_dependency "shoulda", ">= 0"
25
+ gem.add_development_dependency "rake", ">= 0"
26
+ gem.add_development_dependency "jeweler", ">= 0"
27
+ gem.add_development_dependency "inifile", ">= 0"
28
+ gem.add_development_dependency "rdoc", ">= 0"
29
+ gem.add_development_dependency "rcov", ">= 0"
30
+ gem.add_development_dependency "rr", ">= 0"
31
+
32
+ gem.add_runtime_dependency "inifile", ">= 0"
33
+ # dependencies defined in Gemfile
34
+ end
35
+ Jeweler::RubygemsDotOrgTasks.new
36
+
37
+ require 'rake/testtask'
38
+ Rake::TestTask.new(:test) do |test|
39
+ test.libs << 'lib' << 'test'
40
+ test.pattern = 'test/**/test_*.rb'
41
+ test.verbose = true
42
+ end
43
+
44
+ require 'rcov/rcovtask'
45
+ Rcov::RcovTask.new do |test|
46
+ test.libs << 'test'
47
+ test.pattern = 'test/**/test_*.rb'
48
+ test.verbose = true
49
+ test.rcov_opts << '--exclude "gems/*"'
50
+ end
51
+
52
+ task :default => :test
53
+
54
+ require 'rdoc/task'
55
+ Rake::RDocTask.new do |rdoc|
56
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
57
+
58
+ rdoc.rdoc_dir = 'rdoc'
59
+ rdoc.title = "gitosis_easy_conf #{version}"
60
+ rdoc.rdoc_files.include('README*')
61
+ rdoc.rdoc_files.include('lib/**/*.rb')
62
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.0.3
data/examples/Rakefile ADDED
@@ -0,0 +1,179 @@
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
+
11
+ require 'inifile'
12
+
13
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
14
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
15
+ require 'gitosis_easy_conf'
16
+
17
+ namespace :gitosis_easy_conf do
18
+ namespace :examples do
19
+
20
+ desc <<-EOF
21
+ Concise example.
22
+ EOF
23
+ task :concise do
24
+ Gitosis.setup("gitosis.concise.conf") do
25
+ config do
26
+ fork_naming_convention do |repo,forker|
27
+ "#{repo}_been_forked_by_#{forker}"
28
+ end
29
+ end
30
+
31
+ forkers do
32
+ dev1 "dev.one"
33
+ dev2 "dev.two"
34
+ end
35
+
36
+ repositories do
37
+ test_one :writable => Forker[:dev1], :forks => :dev2, :readable => Forker[:dev2]
38
+ end
39
+ end
40
+ end
41
+
42
+ desc <<-EOF
43
+ From the readme.
44
+
45
+ Four developers, three rails application and two servers to which the applications
46
+ are deployed. Developers One and Two are committers and can push to master repositories,
47
+ developers Three and Four each have their own forks of all three rails application.
48
+ EOF
49
+ task :readme do
50
+ Gitosis.config do
51
+ fork_naming_convention do |repo, forker|
52
+ "#{forker}_#{repo}"
53
+ end
54
+ filename "gitosis.readme.conf"
55
+ end
56
+
57
+ Gitosis.forkers do
58
+ developer1 'dev.one'
59
+ developer2 'dev.two'
60
+ developer3 'dev.three'
61
+ developer4 'dev.four'
62
+ end
63
+
64
+ Gitosis.groups do
65
+ admins Forker[:developer1], Forker[:developer2]
66
+ developers Forker[:developer3], Forker[:developer4]
67
+ deployers 'app1.deploy', 'app2.deploy'
68
+ all_developers :admins, :developers
69
+ end
70
+
71
+ Gitosis.repositories do
72
+ with_base_configuration( :writable => :admins,
73
+ :readable => [:all_developers, :deployers],
74
+ :forks => :all ) do
75
+ rails_app_one
76
+ rails_app_two
77
+ rails_app_three
78
+ end
79
+ end
80
+ end
81
+
82
+ desc <<-EOF
83
+ Complex example.
84
+
85
+ Following setup:
86
+ - 3 application repos: blog_app, www_app, api_app
87
+ - 1 repo for common db configuration: db_config
88
+ - 1 repo with common gem used across all rails apps: common_gem
89
+ - 2 admin repos: chef, gitosis-admin
90
+
91
+ Team consists of a cto, lead developer, 4 developers and one unix admin. What we
92
+ want is that each developer has a fork of the rails applications on which they
93
+ are working but only the cto and lead developer can commit to the master repositories
94
+ of the rails applicatoins. The cto does not have a fork repo but the leader developer
95
+ as a fork of all three rails applications.
96
+
97
+ The four developers can fork and access the common_gem and can commit to the master
98
+ repositoty of the common_gem.
99
+
100
+ Only the cto and lead developer can commit to the db_config repo. Also only the deployers
101
+ can read the db_config repo (the deployers are the deploy users on the servers and
102
+ not physical people). The developers can't read nor write to db_config. (db_config
103
+ contains the production configuration for databases and API keys.)
104
+
105
+ The unix admin, cto and lead developer can commit to the chef and gitosis-admin repos.
106
+ The developers can read them but don't have a fork of either.
107
+
108
+ We'll end up with the following 17 repositories:
109
+ blog_app
110
+ dev_fours_fork_of_blog_app
111
+ dev_threes_fork_of_blog_app
112
+ dev_lead_devs_fork_of_blog_app
113
+ www_app
114
+ dev_fours_fork_of_www_app
115
+ dev_twos_fork_of_www_app
116
+ dev_lead_devs_fork_of_www_app
117
+ api_app
118
+ dev_ones_fork_of_api_app
119
+ dev_threes_fork_of_api_app
120
+ dev_twos_fork_of_api_app
121
+ dev_lead_devs_fork_of_api_app
122
+ common_gem
123
+ chef
124
+ gitosis-admin
125
+ db_config
126
+ EOF
127
+ task :complex do
128
+ Gitosis.config do
129
+ filename "gitosis.complex.conf"
130
+ fork_naming_convention do |repo, forker|
131
+ "#{forker}s_fork_of_#{repo}"
132
+ end
133
+ end
134
+
135
+ Gitosis.forkers do
136
+ dev_cto 'dev_cto.key'
137
+ dev_lead_dev 'dev_lead_dev.key'
138
+
139
+ dev_one 'dev_one.key'
140
+ dev_two 'dev_two.key'
141
+ dev_three 'dev_three.key'
142
+ dev_four 'dev_four.key'
143
+ end
144
+
145
+ Gitosis.roles do
146
+ committers Forker[:dev_cto], Forker[:dev_lead_dev]
147
+ admins 'unix.admin', :committers
148
+
149
+ blog_developers Forker[:dev_four], Forker[:dev_three]
150
+ www_developers Forker[:dev_four], Forker[:dev_two]
151
+ api_developers Forker[:dev_one], Forker[:dev_three], Forker[:dev_two]
152
+
153
+ all_developers :blog_developers, :committers, :www_developers, :api_developers
154
+ deployers 'app1.deploy', 'app2.deploy', 'app3.deploy'
155
+ end
156
+
157
+ Gitosis.repositories do
158
+ # rails applications (blog, www and api) and common gem.
159
+ with_base_configuration(:writable => :committers,
160
+ :readable => [:all_developers, :deployers]) do
161
+ blog_app :forks => [:dev_four, :dev_three, :dev_lead_dev]
162
+ www_app :forks => [:dev_four, :dev_two, :dev_lead_dev]
163
+ api_app :forks => [:dev_one, :dev_three, :dev_two, :dev_lead_dev]
164
+ common_gem :writable => :all_developers
165
+ end
166
+
167
+ # chef and gitosis-admin. Note there are no forks these repos, only master.
168
+ with_base_configuration(:writable => :admins,
169
+ :readable => :all_developers) do
170
+ chef
171
+ gitosis_admin :name => 'gitosis-admin'
172
+ end
173
+
174
+ # production database configuration
175
+ db_config :writable => :committers, :readable => :deployers
176
+ end
177
+ end
178
+ end
179
+ end
@@ -0,0 +1,138 @@
1
+ [gitosis]
2
+
3
+ [group blog_app.writable]
4
+ members = dev_cto.key dev_lead_dev.key
5
+ writable = blog_app
6
+
7
+ [group blog_app.readonly]
8
+ members = dev_four.key dev_three.key dev_cto.key dev_lead_dev.key dev_two.key dev_one.key app1.deploy app2.deploy app3.deploy
9
+ readonly = blog_app
10
+
11
+ [group fork.blog_app.dev_four.writable]
12
+ members = dev_four.key
13
+ writable = dev_fours_fork_of_blog_app
14
+
15
+ [group fork.blog_app.dev_four.readonly]
16
+ members = dev_four.key dev_three.key dev_cto.key dev_lead_dev.key dev_two.key dev_one.key app1.deploy app2.deploy app3.deploy
17
+ readonly = dev_fours_fork_of_blog_app
18
+
19
+ [group fork.blog_app.dev_three.writable]
20
+ members = dev_three.key
21
+ writable = dev_threes_fork_of_blog_app
22
+
23
+ [group fork.blog_app.dev_three.readonly]
24
+ members = dev_four.key dev_three.key dev_cto.key dev_lead_dev.key dev_two.key dev_one.key app1.deploy app2.deploy app3.deploy
25
+ readonly = dev_threes_fork_of_blog_app
26
+
27
+ [group fork.blog_app.dev_lead_dev.writable]
28
+ members = dev_lead_dev.key
29
+ writable = dev_lead_devs_fork_of_blog_app
30
+
31
+ [group fork.blog_app.dev_lead_dev.readonly]
32
+ members = dev_four.key dev_three.key dev_cto.key dev_lead_dev.key dev_two.key dev_one.key app1.deploy app2.deploy app3.deploy
33
+ readonly = dev_lead_devs_fork_of_blog_app
34
+
35
+ [group www_app.writable]
36
+ members = dev_cto.key dev_lead_dev.key
37
+ writable = www_app
38
+
39
+ [group www_app.readonly]
40
+ members = dev_four.key dev_three.key dev_cto.key dev_lead_dev.key dev_two.key dev_one.key app1.deploy app2.deploy app3.deploy
41
+ readonly = www_app
42
+
43
+ [group fork.www_app.dev_four.writable]
44
+ members = dev_four.key
45
+ writable = dev_fours_fork_of_www_app
46
+
47
+ [group fork.www_app.dev_four.readonly]
48
+ members = dev_four.key dev_three.key dev_cto.key dev_lead_dev.key dev_two.key dev_one.key app1.deploy app2.deploy app3.deploy
49
+ readonly = dev_fours_fork_of_www_app
50
+
51
+ [group fork.www_app.dev_two.writable]
52
+ members = dev_two.key
53
+ writable = dev_twos_fork_of_www_app
54
+
55
+ [group fork.www_app.dev_two.readonly]
56
+ members = dev_four.key dev_three.key dev_cto.key dev_lead_dev.key dev_two.key dev_one.key app1.deploy app2.deploy app3.deploy
57
+ readonly = dev_twos_fork_of_www_app
58
+
59
+ [group fork.www_app.dev_lead_dev.writable]
60
+ members = dev_lead_dev.key
61
+ writable = dev_lead_devs_fork_of_www_app
62
+
63
+ [group fork.www_app.dev_lead_dev.readonly]
64
+ members = dev_four.key dev_three.key dev_cto.key dev_lead_dev.key dev_two.key dev_one.key app1.deploy app2.deploy app3.deploy
65
+ readonly = dev_lead_devs_fork_of_www_app
66
+
67
+ [group api_app.writable]
68
+ members = dev_cto.key dev_lead_dev.key
69
+ writable = api_app
70
+
71
+ [group api_app.readonly]
72
+ members = dev_four.key dev_three.key dev_cto.key dev_lead_dev.key dev_two.key dev_one.key app1.deploy app2.deploy app3.deploy
73
+ readonly = api_app
74
+
75
+ [group fork.api_app.dev_one.writable]
76
+ members = dev_one.key
77
+ writable = dev_ones_fork_of_api_app
78
+
79
+ [group fork.api_app.dev_one.readonly]
80
+ members = dev_four.key dev_three.key dev_cto.key dev_lead_dev.key dev_two.key dev_one.key app1.deploy app2.deploy app3.deploy
81
+ readonly = dev_ones_fork_of_api_app
82
+
83
+ [group fork.api_app.dev_three.writable]
84
+ members = dev_three.key
85
+ writable = dev_threes_fork_of_api_app
86
+
87
+ [group fork.api_app.dev_three.readonly]
88
+ members = dev_four.key dev_three.key dev_cto.key dev_lead_dev.key dev_two.key dev_one.key app1.deploy app2.deploy app3.deploy
89
+ readonly = dev_threes_fork_of_api_app
90
+
91
+ [group fork.api_app.dev_two.writable]
92
+ members = dev_two.key
93
+ writable = dev_twos_fork_of_api_app
94
+
95
+ [group fork.api_app.dev_two.readonly]
96
+ members = dev_four.key dev_three.key dev_cto.key dev_lead_dev.key dev_two.key dev_one.key app1.deploy app2.deploy app3.deploy
97
+ readonly = dev_twos_fork_of_api_app
98
+
99
+ [group fork.api_app.dev_lead_dev.writable]
100
+ members = dev_lead_dev.key
101
+ writable = dev_lead_devs_fork_of_api_app
102
+
103
+ [group fork.api_app.dev_lead_dev.readonly]
104
+ members = dev_four.key dev_three.key dev_cto.key dev_lead_dev.key dev_two.key dev_one.key app1.deploy app2.deploy app3.deploy
105
+ readonly = dev_lead_devs_fork_of_api_app
106
+
107
+ [group common_gem.writable]
108
+ members = dev_cto.key dev_lead_dev.key dev_four.key dev_three.key dev_cto.key dev_lead_dev.key dev_two.key dev_one.key
109
+ writable = common_gem
110
+
111
+ [group common_gem.readonly]
112
+ members = dev_four.key dev_three.key dev_cto.key dev_lead_dev.key dev_two.key dev_one.key app1.deploy app2.deploy app3.deploy
113
+ readonly = common_gem
114
+
115
+ [group chef.writable]
116
+ members = unix.admin dev_cto.key dev_lead_dev.key
117
+ writable = chef
118
+
119
+ [group chef.readonly]
120
+ members = dev_four.key dev_three.key dev_cto.key dev_lead_dev.key dev_two.key dev_one.key
121
+ readonly = chef
122
+
123
+ [group gitosis-admin.writable]
124
+ members = unix.admin dev_cto.key dev_lead_dev.key
125
+ writable = gitosis-admin
126
+
127
+ [group gitosis-admin.readonly]
128
+ members = dev_four.key dev_three.key dev_cto.key dev_lead_dev.key dev_two.key dev_one.key
129
+ readonly = gitosis-admin
130
+
131
+ [group db_config.writable]
132
+ members = dev_cto.key dev_lead_dev.key
133
+ writable = db_config
134
+
135
+ [group db_config.readonly]
136
+ members = app1.deploy app2.deploy app3.deploy
137
+ readonly = db_config
138
+
@@ -0,0 +1,18 @@
1
+ [gitosis]
2
+
3
+ [group test_one.writable]
4
+ members = dev.one
5
+ writable = test_one
6
+
7
+ [group test_one.readonly]
8
+ members = dev.two
9
+ readonly = test_one
10
+
11
+ [group fork.test_one.dev2.writable]
12
+ members = dev.two
13
+ writable = test_one_been_forked_by_dev2
14
+
15
+ [group fork.test_one.dev2.readonly]
16
+ members = dev.two
17
+ readonly = test_one_been_forked_by_dev2
18
+
@@ -0,0 +1,122 @@
1
+ [gitosis]
2
+
3
+ [group rails_app_one.writable]
4
+ members = dev.one dev.two
5
+ writable = rails_app_one
6
+
7
+ [group rails_app_one.readonly]
8
+ members = dev.one dev.two dev.three dev.four app1.deploy app2.deploy
9
+ readonly = rails_app_one
10
+
11
+ [group fork.rails_app_one.developer1.writable]
12
+ members = dev.one
13
+ writable = developer1_rails_app_one
14
+
15
+ [group fork.rails_app_one.developer1.readonly]
16
+ members = dev.one dev.two dev.three dev.four app1.deploy app2.deploy
17
+ readonly = developer1_rails_app_one
18
+
19
+ [group fork.rails_app_one.developer2.writable]
20
+ members = dev.two
21
+ writable = developer2_rails_app_one
22
+
23
+ [group fork.rails_app_one.developer2.readonly]
24
+ members = dev.one dev.two dev.three dev.four app1.deploy app2.deploy
25
+ readonly = developer2_rails_app_one
26
+
27
+ [group fork.rails_app_one.developer3.writable]
28
+ members = dev.three
29
+ writable = developer3_rails_app_one
30
+
31
+ [group fork.rails_app_one.developer3.readonly]
32
+ members = dev.one dev.two dev.three dev.four app1.deploy app2.deploy
33
+ readonly = developer3_rails_app_one
34
+
35
+ [group fork.rails_app_one.developer4.writable]
36
+ members = dev.four
37
+ writable = developer4_rails_app_one
38
+
39
+ [group fork.rails_app_one.developer4.readonly]
40
+ members = dev.one dev.two dev.three dev.four app1.deploy app2.deploy
41
+ readonly = developer4_rails_app_one
42
+
43
+ [group rails_app_two.writable]
44
+ members = dev.one dev.two
45
+ writable = rails_app_two
46
+
47
+ [group rails_app_two.readonly]
48
+ members = dev.one dev.two dev.three dev.four app1.deploy app2.deploy
49
+ readonly = rails_app_two
50
+
51
+ [group fork.rails_app_two.developer1.writable]
52
+ members = dev.one
53
+ writable = developer1_rails_app_two
54
+
55
+ [group fork.rails_app_two.developer1.readonly]
56
+ members = dev.one dev.two dev.three dev.four app1.deploy app2.deploy
57
+ readonly = developer1_rails_app_two
58
+
59
+ [group fork.rails_app_two.developer2.writable]
60
+ members = dev.two
61
+ writable = developer2_rails_app_two
62
+
63
+ [group fork.rails_app_two.developer2.readonly]
64
+ members = dev.one dev.two dev.three dev.four app1.deploy app2.deploy
65
+ readonly = developer2_rails_app_two
66
+
67
+ [group fork.rails_app_two.developer3.writable]
68
+ members = dev.three
69
+ writable = developer3_rails_app_two
70
+
71
+ [group fork.rails_app_two.developer3.readonly]
72
+ members = dev.one dev.two dev.three dev.four app1.deploy app2.deploy
73
+ readonly = developer3_rails_app_two
74
+
75
+ [group fork.rails_app_two.developer4.writable]
76
+ members = dev.four
77
+ writable = developer4_rails_app_two
78
+
79
+ [group fork.rails_app_two.developer4.readonly]
80
+ members = dev.one dev.two dev.three dev.four app1.deploy app2.deploy
81
+ readonly = developer4_rails_app_two
82
+
83
+ [group rails_app_three.writable]
84
+ members = dev.one dev.two
85
+ writable = rails_app_three
86
+
87
+ [group rails_app_three.readonly]
88
+ members = dev.one dev.two dev.three dev.four app1.deploy app2.deploy
89
+ readonly = rails_app_three
90
+
91
+ [group fork.rails_app_three.developer1.writable]
92
+ members = dev.one
93
+ writable = developer1_rails_app_three
94
+
95
+ [group fork.rails_app_three.developer1.readonly]
96
+ members = dev.one dev.two dev.three dev.four app1.deploy app2.deploy
97
+ readonly = developer1_rails_app_three
98
+
99
+ [group fork.rails_app_three.developer2.writable]
100
+ members = dev.two
101
+ writable = developer2_rails_app_three
102
+
103
+ [group fork.rails_app_three.developer2.readonly]
104
+ members = dev.one dev.two dev.three dev.four app1.deploy app2.deploy
105
+ readonly = developer2_rails_app_three
106
+
107
+ [group fork.rails_app_three.developer3.writable]
108
+ members = dev.three
109
+ writable = developer3_rails_app_three
110
+
111
+ [group fork.rails_app_three.developer3.readonly]
112
+ members = dev.one dev.two dev.three dev.four app1.deploy app2.deploy
113
+ readonly = developer3_rails_app_three
114
+
115
+ [group fork.rails_app_three.developer4.writable]
116
+ members = dev.four
117
+ writable = developer4_rails_app_three
118
+
119
+ [group fork.rails_app_three.developer4.readonly]
120
+ members = dev.one dev.two dev.three dev.four app1.deploy app2.deploy
121
+ readonly = developer4_rails_app_three
122
+