gitolite 0.0.3.alpha → 1.0.0

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.
@@ -21,7 +21,6 @@ module Gitolite
21
21
  end
22
22
 
23
23
  def self.from_file(key)
24
-
25
24
  raise "#{key} does not exist!" unless File.exists?(key)
26
25
 
27
26
  #Get our owner and location
@@ -29,8 +28,23 @@ module Gitolite
29
28
  owner = $1
30
29
  location = $2 || ""
31
30
 
31
+ # Use string key constructor
32
+ self.from_string(File.read(key), owner, location)
33
+ end
34
+
35
+ # Construct a SSHKey from a string
36
+ def self.from_string(key_string, owner, location = "")
37
+ if owner.nil?
38
+ raise ArgumentError, "owner was nil, you must specify an owner"
39
+ end
40
+
32
41
  #Get parts of the key
33
- type, blob, email = File.read(key).split
42
+ type, blob, email = key_string.split
43
+
44
+ # We need at least a type or blob
45
+ if type.nil? || blob.nil?
46
+ raise ArgumentError, "'#{key_string}' is not a valid SSH key string"
47
+ end
34
48
 
35
49
  #If the key didn't have an email, just use the owner
36
50
  if email.nil?
@@ -1,3 +1,3 @@
1
1
  module Gitolite
2
- VERSION = "0.0.3.alpha"
2
+ VERSION = "1.0.0"
3
3
  end
@@ -1,3 +1,4 @@
1
+ require 'plexus'
1
2
  require 'gitolite/config'
2
3
  require 'spec_helper'
3
4
 
@@ -317,6 +318,69 @@ describe Gitolite::Config do
317
318
  c = Gitolite::Config.init
318
319
  lambda{ c.to_file('/home/test.rb') }.should raise_error(ArgumentError)
319
320
  end
321
+
322
+ it 'should resolve group dependencies such that all groups are defined before they are used' do
323
+ c = Gitolite::Config.init
324
+ c.filename = "test_deptree.conf"
325
+
326
+ # Build some groups out of order
327
+ g = Gitolite::Config::Group.new "groupa"
328
+ g.add_users "bob", "@groupb"
329
+ c.add_group(g)
330
+
331
+ g = Gitolite::Config::Group.new "groupb"
332
+ g.add_users "joe", "sam", "susan", "andrew"
333
+ c.add_group(g)
334
+
335
+ g = Gitolite::Config::Group.new "groupc"
336
+ g.add_users "jane", "@groupb", "brandon"
337
+ c.add_group(g)
338
+
339
+ g = Gitolite::Config::Group.new "groupd"
340
+ g.add_users "larry", "@groupc"
341
+ c.add_group(g)
342
+
343
+ # Write the config to a file
344
+ file = c.to_file('/tmp')
345
+
346
+ # Read the conf and make sure our order is correct
347
+ f = File.read(file)
348
+ lines = f.lines.map {|l| l.strip}
349
+
350
+ # Compare the file lines. Spacing is important here since we are doing a direct comparision
351
+ lines[0].should == "@groupb = andrew joe sam susan"
352
+ lines[1].should == "@groupc = @groupb brandon jane"
353
+ lines[2].should == "@groupd = @groupc larry"
354
+ lines[3].should == "@groupa = @groupb bob"
355
+
356
+ # Cleanup
357
+ File.unlink(file)
358
+ end
359
+
360
+ it 'should raise a GroupDependencyError if there is a cyclic dependency' do
361
+ c = Gitolite::Config.init
362
+ c.filename = "test_deptree.conf"
363
+
364
+ # Build some groups out of order
365
+ g = Gitolite::Config::Group.new "groupa"
366
+ g.add_users "bob", "@groupb"
367
+ c.add_group(g)
368
+
369
+ g = Gitolite::Config::Group.new "groupb"
370
+ g.add_users "joe", "sam", "susan", "@groupc"
371
+ c.add_group(g)
372
+
373
+ g = Gitolite::Config::Group.new "groupc"
374
+ g.add_users "jane", "@groupa", "brandon"
375
+ c.add_group(g)
376
+
377
+ g = Gitolite::Config::Group.new "groupd"
378
+ g.add_users "larry", "@groupc"
379
+ c.add_group(g)
380
+
381
+ # Attempt to write the config file
382
+ lambda{ c.to_file('/tmp')}.should raise_error(Gitolite::Config::GroupDependencyError)
383
+ end
320
384
  end
321
385
 
322
386
  describe "#cleanup_config_line" do
@@ -1,3 +1,4 @@
1
+ require 'hashery'
1
2
  require 'gitolite/config/repo'
2
3
  require 'spec_helper'
3
4
 
@@ -57,6 +58,92 @@ describe Gitolite::Config::Repo do
57
58
  end
58
59
  end
59
60
 
61
+ describe "permissions" do
62
+ before(:each) do
63
+ @repo = Gitolite::Config::Repo.new("CoolRepo")
64
+ end
65
+
66
+ it 'should allow adding the permission C' do
67
+ @repo.add_permission("C", "", "bob")
68
+ end
69
+
70
+ it 'should allow adding the permission -' do
71
+ @repo.add_permission("-", "", "bob")
72
+ end
73
+
74
+ it 'should allow adding the permission R' do
75
+ @repo.add_permission("R", "", "bob")
76
+ end
77
+
78
+ it 'should allow adding the permission RM' do
79
+ @repo.add_permission("RM", "", "bob")
80
+ end
81
+
82
+ it 'should allow adding the permission RW' do
83
+ @repo.add_permission("RW", "", "bob")
84
+ end
85
+
86
+ it 'should allow adding the permission RWM' do
87
+ @repo.add_permission("RWM", "", "bob")
88
+ end
89
+
90
+ it 'should allow adding the permission RW+' do
91
+ @repo.add_permission("RW+", "", "bob")
92
+ end
93
+
94
+ it 'should allow adding the permission RW+M' do
95
+ @repo.add_permission("RW+M", "", "bob")
96
+ end
97
+
98
+ it 'should allow adding the permission RWC' do
99
+ @repo.add_permission("RWC", "", "bob")
100
+ end
101
+
102
+ it 'should allow adding the permission RWCM' do
103
+ @repo.add_permission("RWCM", "", "bob")
104
+ end
105
+
106
+ it 'should allow adding the permission RW+C' do
107
+ @repo.add_permission("RW+C", "", "bob")
108
+ end
109
+
110
+ it 'should allow adding the permission RW+CM' do
111
+ @repo.add_permission("RW+CM", "", "bob")
112
+ end
113
+
114
+ it 'should allow adding the permission RWD' do
115
+ @repo.add_permission("RWD", "", "bob")
116
+ end
117
+
118
+ it 'should allow adding the permission RWDM' do
119
+ @repo.add_permission("RWDM", "", "bob")
120
+ end
121
+
122
+ it 'should allow adding the permission RW+D' do
123
+ @repo.add_permission("RW+D", "", "bob")
124
+ end
125
+
126
+ it 'should allow adding the permission RW+DM' do
127
+ @repo.add_permission("RW+DM", "", "bob")
128
+ end
129
+
130
+ it 'should allow adding the permission RWCD' do
131
+ @repo.add_permission("RWCD", "", "bob")
132
+ end
133
+
134
+ it 'should allow adding the permission RWCDM' do
135
+ @repo.add_permission("RWCDM", "", "bob")
136
+ end
137
+
138
+ it 'should allow adding the permission RW+CD' do
139
+ @repo.add_permission("RW+CD", "", "bob")
140
+ end
141
+
142
+ it 'should allow adding the permission RW+CDM' do
143
+ @repo.add_permission("RW+CDM", "", "bob")
144
+ end
145
+ end
146
+
60
147
  describe 'git config options' do
61
148
  it 'should allow setting a git configuration option' do
62
149
  email = "bob@zilla.com"
@@ -4,7 +4,67 @@ include Gitolite
4
4
 
5
5
  describe Gitolite::SSHKey do
6
6
  key_dir = File.join(File.dirname(__FILE__),'keys')
7
-
7
+
8
+ describe "#from_string" do
9
+ it 'should construct an SSH key from a string' do
10
+ key = File.join(key_dir, 'bob.pub')
11
+ key_string = File.read(key)
12
+ s = SSHKey.from_string(key_string, "bob")
13
+
14
+ s.owner.should == 'bob'
15
+ s.location.should == ""
16
+ s.blob.should == key_string.split[1]
17
+ end
18
+
19
+ it 'should raise an ArgumentError when an owner isnt specified' do
20
+ key_string = "not_a_real_key"
21
+ lambda { SSHKey.from_string(key_string) }.should raise_error
22
+ end
23
+
24
+ it 'should have a location when one is specified' do
25
+ key = File.join(key_dir, 'bob.pub')
26
+ key_string = File.read(key)
27
+ s = SSHKey.from_string(key_string, "bob", "kansas")
28
+
29
+ s.owner.should == 'bob'
30
+ s.location.should == "kansas"
31
+ s.blob.should == key_string.split[1]
32
+ end
33
+
34
+ it 'should raise an ArgumentError when owner is nil' do
35
+ lambda { SSHKey.from_string("bad_string", nil) }.should raise_error
36
+ end
37
+
38
+ it 'should raise an ArgumentError when we get an invalid SSHKey string' do
39
+ lambda { SSHKey.from_string("bad_string", "bob") }.should raise_error
40
+ end
41
+ end
42
+
43
+ describe "#from_file" do
44
+ it 'should load a key from a file' do
45
+ key = File.join(key_dir, 'bob.pub')
46
+ s = SSHKey.from_file(key)
47
+ key_string = File.read(key).split
48
+
49
+ s.owner.should == "bob"
50
+ s.blob.should == key_string[1]
51
+ end
52
+
53
+ it 'should load a key with a location from a file' do
54
+ key = File.join(key_dir, 'bob@desktop.pub')
55
+ s = SSHKey.from_file(key)
56
+ s.owner.should == 'bob'
57
+ s.location.should == 'desktop'
58
+ end
59
+
60
+ it 'should load a key with owner and location from a file' do
61
+ key = File.join(key_dir, 'joe-bob@god-zilla.com@desktop.pub')
62
+ s = SSHKey.from_file(key)
63
+ s.owner.should == 'joe-bob@god-zilla.com'
64
+ s.location.should == 'desktop'
65
+ end
66
+ end
67
+
8
68
  describe '#owner' do
9
69
  it 'owner should be bob for bob.pub' do
10
70
  key = File.join(key_dir, 'bob.pub')
@@ -136,92 +196,92 @@ describe Gitolite::SSHKey do
136
196
  s.owner.should == s.email
137
197
  end
138
198
  end
139
-
199
+
140
200
  describe '#new' do
141
201
  it 'should create a valid ssh key' do
142
202
  type = "ssh-rsa"
143
203
  blob = Forgery::Basic.text(:at_least => 372, :at_most => 372)
144
204
  email = Forgery::Internet.email_address
145
-
205
+
146
206
  s = SSHKey.new(type, blob, email)
147
-
207
+
148
208
  s.to_s.should == [type, blob, email].join(' ')
149
209
  s.owner.should == email
150
210
  end
151
-
211
+
152
212
  it 'should create a valid ssh key while specifying an owner' do
153
213
  type = "ssh-rsa"
154
214
  blob = Forgery::Basic.text(:at_least => 372, :at_most => 372)
155
215
  email = Forgery::Internet.email_address
156
216
  owner = Forgery::Name.first_name
157
-
217
+
158
218
  s = SSHKey.new(type, blob, email, owner)
159
-
219
+
160
220
  s.to_s.should == [type, blob, email].join(' ')
161
221
  s.owner.should == owner
162
222
  end
163
-
223
+
164
224
  it 'should create a valid ssh key while specifying an owner and location' do
165
225
  type = "ssh-rsa"
166
226
  blob = Forgery::Basic.text(:at_least => 372, :at_most => 372)
167
227
  email = Forgery::Internet.email_address
168
228
  owner = Forgery::Name.first_name
169
229
  location = Forgery::Name.location
170
-
230
+
171
231
  s = SSHKey.new(type, blob, email, owner, location)
172
-
232
+
173
233
  s.to_s.should == [type, blob, email].join(' ')
174
234
  s.owner.should == owner
175
235
  s.location.should == location
176
236
  end
177
237
  end
178
-
238
+
179
239
  describe '#filename' do
180
240
  it 'should create a filename that is the <email>.pub' do
181
241
  type = "ssh-rsa"
182
242
  blob = Forgery::Basic.text(:at_least => 372, :at_most => 372)
183
243
  email = Forgery::Internet.email_address
184
-
244
+
185
245
  s = SSHKey.new(type, blob, email)
186
-
246
+
187
247
  s.filename.should == "#{email}.pub"
188
248
  end
189
-
249
+
190
250
  it 'should create a filename that is the <owner>.pub' do
191
251
  type = "ssh-rsa"
192
252
  blob = Forgery::Basic.text(:at_least => 372, :at_most => 372)
193
253
  email = Forgery::Internet.email_address
194
254
  owner = Forgery::Name.first_name
195
-
255
+
196
256
  s = SSHKey.new(type, blob, email, owner)
197
-
257
+
198
258
  s.filename.should == "#{owner}.pub"
199
259
  end
200
-
260
+
201
261
  it 'should create a filename that is the <email>@<location>.pub' do
202
262
  type = "ssh-rsa"
203
263
  blob = Forgery::Basic.text(:at_least => 372, :at_most => 372)
204
264
  email = Forgery::Internet.email_address
205
265
  location = Forgery::Basic.text(:at_least => 8, :at_most => 15)
206
-
266
+
207
267
  s = SSHKey.new(type, blob, email, nil, location)
208
-
268
+
209
269
  s.filename.should == "#{email}@#{location}.pub"
210
270
  end
211
-
271
+
212
272
  it 'should create a filename that is the <owner>@<location>.pub' do
213
273
  type = "ssh-rsa"
214
274
  blob = Forgery::Basic.text(:at_least => 372, :at_most => 372)
215
275
  email = Forgery::Internet.email_address
216
276
  owner = Forgery::Name.first_name
217
277
  location = Forgery::Basic.text(:at_least => 8, :at_most => 15)
218
-
278
+
219
279
  s = SSHKey.new(type, blob, email, owner, location)
220
-
280
+
221
281
  s.filename.should == "#{owner}@#{location}.pub"
222
282
  end
223
283
  end
224
-
284
+
225
285
  describe '#to_file' do
226
286
  it 'should write a "valid" SSH public key to the file system' do
227
287
  type = "ssh-rsa"
@@ -229,40 +289,40 @@ describe Gitolite::SSHKey do
229
289
  email = Forgery::Internet.email_address
230
290
  owner = Forgery::Name.first_name
231
291
  location = Forgery::Basic.text(:at_least => 8, :at_most => 15)
232
-
292
+
233
293
  s = SSHKey.new(type, blob, email, owner, location)
234
-
294
+
235
295
  tmpdir = Dir.tmpdir
236
296
  s.to_file(tmpdir)
237
-
297
+
238
298
  s.to_s.should == File.read(File.join(tmpdir, s.filename))
239
299
  end
240
-
300
+
241
301
  it 'should return the filename written' do
242
302
  type = "ssh-rsa"
243
303
  blob = Forgery::Basic.text(:at_least => 372, :at_most => 372)
244
304
  email = Forgery::Internet.email_address
245
305
  owner = Forgery::Name.first_name
246
306
  location = Forgery::Basic.text(:at_least => 8, :at_most => 15)
247
-
307
+
248
308
  s = SSHKey.new(type, blob, email, owner, location)
249
-
309
+
250
310
  tmpdir = Dir.tmpdir
251
-
252
-
311
+
312
+
253
313
  s.to_file(tmpdir).should == File.join(tmpdir, s.filename)
254
314
  end
255
315
  end
256
-
316
+
257
317
  describe '==' do
258
318
  it 'should have two keys equalling one another' do
259
319
  type = "ssh-rsa"
260
320
  blob = Forgery::Basic.text(:at_least => 372, :at_most => 372)
261
321
  email = Forgery::Internet.email_address
262
-
322
+
263
323
  s1 = SSHKey.new(type, blob, email)
264
324
  s2 = SSHKey.new(type, blob, email)
265
-
325
+
266
326
  s1.should == s2
267
327
  end
268
328
  end
metadata CHANGED
@@ -1,135 +1,143 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: gitolite
3
- version: !ruby/object:Gem::Version
4
- hash: -1851332174
5
- prerelease: 6
6
- segments:
7
- - 0
8
- - 0
9
- - 3
10
- - alpha
11
- version: 0.0.3.alpha
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ prerelease:
12
6
  platform: ruby
13
- authors:
7
+ authors:
14
8
  - Stafford Brunk
15
9
  autorequire:
16
10
  bindir: bin
17
11
  cert_chain: []
18
-
19
- date: 2011-10-23 00:00:00 Z
20
- dependencies:
21
- - !ruby/object:Gem::Dependency
12
+ date: 2012-04-30 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
22
15
  name: rspec
23
- prerelease: false
24
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
25
17
  none: false
26
- requirements:
18
+ requirements:
27
19
  - - ~>
28
- - !ruby/object:Gem::Version
29
- hash: 23
30
- segments:
31
- - 2
32
- - 6
33
- - 0
34
- version: 2.6.0
20
+ - !ruby/object:Gem::Version
21
+ version: 2.9.0
35
22
  type: :development
36
- version_requirements: *id001
37
- - !ruby/object:Gem::Dependency
38
- name: forgery
39
23
  prerelease: false
40
- requirement: &id002 !ruby/object:Gem::Requirement
24
+ version_requirements: !ruby/object:Gem::Requirement
41
25
  none: false
42
- requirements:
26
+ requirements:
43
27
  - - ~>
44
- - !ruby/object:Gem::Version
45
- hash: 11
46
- segments:
47
- - 0
48
- - 5
49
- - 0
28
+ - !ruby/object:Gem::Version
29
+ version: 2.9.0
30
+ - !ruby/object:Gem::Dependency
31
+ name: forgery
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
50
37
  version: 0.5.0
51
38
  type: :development
52
- version_requirements: *id002
53
- - !ruby/object:Gem::Dependency
54
- name: rdoc
55
39
  prerelease: false
56
- requirement: &id003 !ruby/object:Gem::Requirement
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 0.5.0
46
+ - !ruby/object:Gem::Dependency
47
+ name: rdoc
48
+ requirement: !ruby/object:Gem::Requirement
57
49
  none: false
58
- requirements:
50
+ requirements:
59
51
  - - ~>
60
- - !ruby/object:Gem::Version
61
- hash: 43
62
- segments:
63
- - 3
64
- - 9
65
- - 4
66
- version: 3.9.4
52
+ - !ruby/object:Gem::Version
53
+ version: '3.12'
67
54
  type: :development
68
- version_requirements: *id003
69
- - !ruby/object:Gem::Dependency
70
- name: rcov
71
55
  prerelease: false
72
- requirement: &id004 !ruby/object:Gem::Requirement
56
+ version_requirements: !ruby/object:Gem::Requirement
73
57
  none: false
74
- requirements:
58
+ requirements:
75
59
  - - ~>
76
- - !ruby/object:Gem::Version
77
- hash: 45
78
- segments:
79
- - 0
80
- - 9
81
- - 11
82
- version: 0.9.11
60
+ - !ruby/object:Gem::Version
61
+ version: '3.12'
62
+ - !ruby/object:Gem::Dependency
63
+ name: simplecov
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ~>
68
+ - !ruby/object:Gem::Version
69
+ version: 0.6.2
83
70
  type: :development
84
- version_requirements: *id004
85
- - !ruby/object:Gem::Dependency
86
- name: grit
87
71
  prerelease: false
88
- requirement: &id005 !ruby/object:Gem::Requirement
72
+ version_requirements: !ruby/object:Gem::Requirement
89
73
  none: false
90
- requirements:
74
+ requirements:
91
75
  - - ~>
92
- - !ruby/object:Gem::Version
93
- hash: 29
94
- segments:
95
- - 2
96
- - 4
97
- - 1
98
- version: 2.4.1
76
+ - !ruby/object:Gem::Version
77
+ version: 0.6.2
78
+ - !ruby/object:Gem::Dependency
79
+ name: grit
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ~>
84
+ - !ruby/object:Gem::Version
85
+ version: 2.5.0
99
86
  type: :runtime
100
- version_requirements: *id005
101
- - !ruby/object:Gem::Dependency
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ~>
92
+ - !ruby/object:Gem::Version
93
+ version: 2.5.0
94
+ - !ruby/object:Gem::Dependency
102
95
  name: hashery
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ~>
100
+ - !ruby/object:Gem::Version
101
+ version: 1.5.0
102
+ type: :runtime
103
103
  prerelease: false
104
- requirement: &id006 !ruby/object:Gem::Requirement
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ~>
108
+ - !ruby/object:Gem::Version
109
+ version: 1.5.0
110
+ - !ruby/object:Gem::Dependency
111
+ name: plexus
112
+ requirement: !ruby/object:Gem::Requirement
105
113
  none: false
106
- requirements:
114
+ requirements:
107
115
  - - ~>
108
- - !ruby/object:Gem::Version
109
- hash: 7
110
- segments:
111
- - 1
112
- - 4
113
- - 0
114
- version: 1.4.0
116
+ - !ruby/object:Gem::Version
117
+ version: 0.5.10
115
118
  type: :runtime
116
- version_requirements: *id006
117
- description: This gem is designed to provide a Ruby interface to the gitolite git backend system. This gem aims to provide all management functionality that is available via the gitolite-admin repository (like SSH keys, repository permissions, etc)
118
- email:
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ~>
124
+ - !ruby/object:Gem::Version
125
+ version: 0.5.10
126
+ description: This gem is designed to provide a Ruby interface to the gitolite git
127
+ backend system. This gem aims to provide all management functionality that is available
128
+ via the gitolite-admin repository (like SSH keys, repository permissions, etc)
129
+ email:
119
130
  - wingrunr21@gmail.com
120
131
  executables: []
121
-
122
132
  extensions: []
123
-
124
133
  extra_rdoc_files: []
125
-
126
- files:
134
+ files:
127
135
  - .gemtest
128
136
  - .gitignore
129
137
  - Gemfile
130
138
  - Gemfile.lock
131
139
  - LICENSE
132
- - README.rdoc
140
+ - README.markdown
133
141
  - Rakefile
134
142
  - gitolite.gemspec
135
143
  - lib/gitolite.rb
@@ -161,40 +169,30 @@ files:
161
169
  - spec/ssh_key_spec.rb
162
170
  homepage: https://www.github.com/wingrunr21/gitolite
163
171
  licenses: []
164
-
165
172
  post_install_message:
166
173
  rdoc_options: []
167
-
168
- require_paths:
174
+ require_paths:
169
175
  - lib
170
- required_ruby_version: !ruby/object:Gem::Requirement
176
+ required_ruby_version: !ruby/object:Gem::Requirement
171
177
  none: false
172
- requirements:
173
- - - ">="
174
- - !ruby/object:Gem::Version
175
- hash: 3
176
- segments:
177
- - 0
178
- version: "0"
179
- required_rubygems_version: !ruby/object:Gem::Requirement
178
+ requirements:
179
+ - - ! '>='
180
+ - !ruby/object:Gem::Version
181
+ version: '0'
182
+ required_rubygems_version: !ruby/object:Gem::Requirement
180
183
  none: false
181
- requirements:
182
- - - ">"
183
- - !ruby/object:Gem::Version
184
- hash: 25
185
- segments:
186
- - 1
187
- - 3
188
- - 1
189
- version: 1.3.1
184
+ requirements:
185
+ - - ! '>='
186
+ - !ruby/object:Gem::Version
187
+ version: '0'
190
188
  requirements: []
191
-
192
189
  rubyforge_project: gitolite
193
- rubygems_version: 1.8.10
190
+ rubygems_version: 1.8.21
194
191
  signing_key:
195
192
  specification_version: 3
196
- summary: A Ruby gem for manipulating the gitolite git backend via the gitolite-admin repository.
197
- test_files:
193
+ summary: A Ruby gem for manipulating the gitolite git backend via the gitolite-admin
194
+ repository.
195
+ test_files:
198
196
  - spec/concurrency_spec.rb
199
197
  - spec/config_spec.rb
200
198
  - spec/configs/complicated.conf