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.
- data/Gemfile.lock +30 -20
- data/README.markdown +179 -0
- data/gitolite.gemspec +6 -5
- data/lib/gitolite.rb +1 -0
- data/lib/gitolite/config.rb +34 -3
- data/lib/gitolite/config/repo.rb +1 -3
- data/lib/gitolite/gitolite_admin.rb +45 -5
- data/lib/gitolite/ssh_key.rb +16 -2
- data/lib/gitolite/version.rb +1 -1
- data/spec/config_spec.rb +64 -0
- data/spec/repo_spec.rb +87 -0
- data/spec/ssh_key_spec.rb +94 -34
- metadata +114 -116
- data/README.rdoc +0 -144
data/lib/gitolite/ssh_key.rb
CHANGED
@@ -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 =
|
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?
|
data/lib/gitolite/version.rb
CHANGED
data/spec/config_spec.rb
CHANGED
@@ -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
|
data/spec/repo_spec.rb
CHANGED
@@ -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"
|
data/spec/ssh_key_spec.rb
CHANGED
@@ -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
|
-
|
5
|
-
prerelease:
|
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
|
-
|
20
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
25
|
none: false
|
42
|
-
requirements:
|
26
|
+
requirements:
|
43
27
|
- - ~>
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
57
|
none: false
|
74
|
-
requirements:
|
58
|
+
requirements:
|
75
59
|
- - ~>
|
76
|
-
- !ruby/object:Gem::Version
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
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
|
-
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
73
|
none: false
|
90
|
-
requirements:
|
74
|
+
requirements:
|
91
75
|
- - ~>
|
92
|
-
- !ruby/object:Gem::Version
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
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
|
-
|
101
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
117
|
-
|
118
|
-
|
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.
|
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
|
-
|
176
|
-
|
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
|
-
|
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.
|
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
|
197
|
-
|
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
|