gem-dependent 0.2.4 → 0.2.5
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.
- checksums.yaml +7 -0
- checksums.yaml.gz.sig +1 -0
- data.tar.gz.sig +0 -0
- data/lib/rubygems/commands/dependent_command.rb +5 -1
- data/lib/rubygems/dependent.rb +4 -3
- data/lib/rubygems/dependent/parallel.rb +284 -191
- data/lib/rubygems/dependent/version.rb +1 -1
- metadata +28 -42
- metadata.gz.sig +1 -4
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: afc8028826702e46dc846ddaa1b6b5161449caf9
|
4
|
+
data.tar.gz: fee1b6005723a95e52eefcec2955179bf168273d
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 2d4363c02e41b93aa50e4e98a8762ca4b9818320666daae587c3a9833e6483343dc0e0efc836dea71c0f5896ba3944f824e828dbe005200ef364ea119d1e00f2
|
7
|
+
data.tar.gz: 4df19254cc6abd8db0f0000d5e6600966d07c0fb543ac3f2db7f72d85731870d2710699eabbf1503ff8e58cb3d26033db7920e516791382b17feff3dc3d74cd6
|
checksums.yaml.gz.sig
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
�|���?���#�3�뛶���ދ��W�
|
data.tar.gz.sig
CHANGED
Binary file
|
@@ -16,13 +16,17 @@ class Gem::Commands::DependentCommand < Gem::Command
|
|
16
16
|
options[:fetch_limit] = n
|
17
17
|
end
|
18
18
|
|
19
|
-
add_option('--parallel N', Integer, 'Make N requests in parallel') do |n, _|
|
19
|
+
add_option('--parallel N', Integer, 'Make N requests in parallel (default 15)') do |n, _|
|
20
20
|
options[:parallel] = n
|
21
21
|
end
|
22
22
|
|
23
23
|
add_option('--all-versions', 'Check against all versions of gems') do
|
24
24
|
options[:all_versions] = true
|
25
25
|
end
|
26
|
+
|
27
|
+
add_option('--type dependent_type', 'Only look for dependents matching the listed type(s) (default is runtime and development)') do |n, _|
|
28
|
+
options[:type] = n.to_s.split(',').map(&:to_sym)
|
29
|
+
end
|
26
30
|
end
|
27
31
|
|
28
32
|
def arguments
|
data/lib/rubygems/dependent.rb
CHANGED
@@ -23,7 +23,7 @@ module Gem
|
|
23
23
|
end
|
24
24
|
$stderr.print "\n" if options[:progress]
|
25
25
|
|
26
|
-
select_dependent(gems_and_dependencies, gem)
|
26
|
+
select_dependent(gems_and_dependencies, gem, options)
|
27
27
|
end
|
28
28
|
|
29
29
|
private
|
@@ -56,9 +56,10 @@ module Gem
|
|
56
56
|
end
|
57
57
|
end
|
58
58
|
|
59
|
-
def self.select_dependent(gems_and_dependencies, gem)
|
59
|
+
def self.select_dependent(gems_and_dependencies, gem, options={})
|
60
|
+
accepted_types = (options[:type] || [:development, :runtime])
|
60
61
|
gems_and_dependencies.map do |name, version, dependencies|
|
61
|
-
matching_dependencies = dependencies.select{|d| d.name == gem } rescue []
|
62
|
+
matching_dependencies = dependencies.select{|d| d.name == gem && accepted_types.include?(d.type) } rescue []
|
62
63
|
next if matching_dependencies.empty?
|
63
64
|
[name, version, matching_dependencies]
|
64
65
|
end.compact
|
@@ -9,264 +9,357 @@ require 'rbconfig'
|
|
9
9
|
module Gem;end
|
10
10
|
class Gem::Dependent;end
|
11
11
|
class Gem::Dependent::Parallel
|
12
|
-
VERSION =
|
12
|
+
VERSION = "0.8.0"
|
13
13
|
|
14
|
-
|
15
|
-
|
14
|
+
class DeadWorker < Exception
|
15
|
+
end
|
16
16
|
|
17
|
-
|
18
|
-
|
17
|
+
class Break < Exception
|
18
|
+
end
|
19
19
|
|
20
|
-
|
21
|
-
|
22
|
-
|
20
|
+
class ExceptionWrapper
|
21
|
+
attr_reader :exception
|
22
|
+
def initialize(exception)
|
23
|
+
dumpable = Marshal.dump(exception) rescue nil
|
24
|
+
unless dumpable
|
25
|
+
exception = RuntimeError.new("Undumpable Exception -- #{exception.inspect}")
|
23
26
|
end
|
27
|
+
|
28
|
+
@exception = exception
|
24
29
|
end
|
30
|
+
end
|
25
31
|
|
26
|
-
|
32
|
+
class Worker
|
33
|
+
attr_reader :pid, :read, :write
|
34
|
+
def initialize(read, write, pid)
|
35
|
+
@read, @write, @pid = read, write, pid
|
36
|
+
end
|
27
37
|
|
28
|
-
|
29
|
-
|
38
|
+
def close_pipes
|
39
|
+
read.close
|
40
|
+
write.close
|
41
|
+
end
|
30
42
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
43
|
+
def wait
|
44
|
+
Process.wait(pid)
|
45
|
+
rescue Interrupt
|
46
|
+
# process died
|
47
|
+
end
|
36
48
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
49
|
+
def work(index)
|
50
|
+
begin
|
51
|
+
Marshal.dump(index, write)
|
52
|
+
rescue Errno::EPIPE
|
53
|
+
raise DeadWorker
|
54
|
+
end
|
41
55
|
|
42
|
-
|
43
|
-
|
56
|
+
begin
|
57
|
+
Marshal.load(read)
|
58
|
+
rescue EOFError
|
59
|
+
raise Parallel::DeadWorker
|
60
|
+
end
|
61
|
+
end
|
44
62
|
end
|
45
63
|
|
46
|
-
|
47
|
-
|
64
|
+
class << self
|
65
|
+
def in_threads(options={:count => 2})
|
66
|
+
count, options = extract_count_from_options(options)
|
48
67
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
68
|
+
out = []
|
69
|
+
threads = []
|
70
|
+
|
71
|
+
count.times do |i|
|
72
|
+
threads[i] = Thread.new do
|
73
|
+
out[i] = yield(i)
|
74
|
+
end
|
75
|
+
end
|
57
76
|
|
58
|
-
|
77
|
+
kill_on_ctrl_c(threads) { wait_for_threads(threads) }
|
59
78
|
|
60
|
-
|
61
|
-
work_in_threads(array, options.merge(:count => size), &block)
|
62
|
-
else
|
63
|
-
work_in_processes(array, options.merge(:count => size), &block)
|
79
|
+
out
|
64
80
|
end
|
65
|
-
end
|
66
|
-
|
67
|
-
def self.map_with_index(array, options={}, &block)
|
68
|
-
map(array, options.merge(:with_index => true), &block)
|
69
|
-
end
|
70
81
|
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
when /darwin/
|
76
|
-
(hwprefs_available? ? `hwprefs thread_count` : `sysctl -n hw.ncpu`).to_i
|
77
|
-
when /linux/
|
78
|
-
`grep -c processor /proc/cpuinfo`.to_i
|
79
|
-
when /freebsd/
|
80
|
-
`sysctl -n hw.ncpu`.to_i
|
81
|
-
when /mswin|mingw/
|
82
|
-
require 'win32ole'
|
83
|
-
wmi = WIN32OLE.connect("winmgmts://")
|
84
|
-
cpu = wmi.ExecQuery("select NumberOfLogicalProcessors from Win32_Processor")
|
85
|
-
cpu.to_enum.first.NumberOfLogicalProcessors
|
82
|
+
def in_processes(options = {}, &block)
|
83
|
+
count, options = extract_count_from_options(options)
|
84
|
+
count ||= processor_count
|
85
|
+
map(0...count, options.merge(:in_processes => count), &block)
|
86
86
|
end
|
87
|
-
end
|
88
87
|
|
89
|
-
|
88
|
+
def each(array, options={}, &block)
|
89
|
+
map(array, options.merge(:preserve_results => false), &block)
|
90
|
+
array
|
91
|
+
end
|
90
92
|
|
91
|
-
|
92
|
-
|
93
|
-
array.each_with_index do |e,i|
|
94
|
-
results << (options[:with_index] ? yield(e,i) : yield(e))
|
93
|
+
def each_with_index(array, options={}, &block)
|
94
|
+
each(array, options.merge(:with_index => true), &block)
|
95
95
|
end
|
96
|
-
results
|
97
|
-
end
|
98
96
|
|
99
|
-
|
100
|
-
|
101
|
-
end
|
97
|
+
def map(array, options = {}, &block)
|
98
|
+
array = array.to_a # turn Range and other Enumerable-s into an Array
|
102
99
|
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
100
|
+
if options[:in_threads]
|
101
|
+
method = :in_threads
|
102
|
+
size = options[method]
|
103
|
+
else
|
104
|
+
method = :in_processes
|
105
|
+
size = options[method] || processor_count
|
106
|
+
end
|
107
|
+
size = [array.size, size].min
|
107
108
|
|
108
|
-
|
109
|
-
# as long as there are more items, work on one of them
|
110
|
-
loop do
|
111
|
-
break if exception
|
109
|
+
return work_direct(array, options, &block) if size == 0
|
112
110
|
|
113
|
-
|
114
|
-
|
111
|
+
if method == :in_threads
|
112
|
+
work_in_threads(array, options.merge(:count => size), &block)
|
113
|
+
else
|
114
|
+
work_in_processes(array, options.merge(:count => size), &block)
|
115
|
+
end
|
116
|
+
end
|
115
117
|
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
118
|
+
def map_with_index(array, options={}, &block)
|
119
|
+
map(array, options.merge(:with_index => true), &block)
|
120
|
+
end
|
121
|
+
|
122
|
+
def processor_count
|
123
|
+
@processor_count ||= case RbConfig::CONFIG['host_os']
|
124
|
+
when /darwin9/
|
125
|
+
`hwprefs cpu_count`.to_i
|
126
|
+
when /darwin/
|
127
|
+
(hwprefs_available? ? `hwprefs thread_count` : `sysctl -n hw.ncpu`).to_i
|
128
|
+
when /linux|cygwin/
|
129
|
+
`grep -c ^processor /proc/cpuinfo`.to_i
|
130
|
+
when /(net|open|free)bsd/
|
131
|
+
`sysctl -n hw.ncpu`.to_i
|
132
|
+
when /mswin|mingw/
|
133
|
+
require 'win32ole'
|
134
|
+
wmi = WIN32OLE.connect("winmgmts://")
|
135
|
+
cpu = wmi.ExecQuery("select NumberOfLogicalProcessors from Win32_Processor")
|
136
|
+
cpu.to_enum.first.NumberOfLogicalProcessors
|
137
|
+
when /solaris2/
|
138
|
+
`psrinfo -p`.to_i # this is physical cpus afaik
|
139
|
+
else
|
140
|
+
$stderr.puts "Unknown architecture ( #{RbConfig::CONFIG["host_os"]} ) assuming one processor."
|
141
|
+
1
|
122
142
|
end
|
123
143
|
end
|
124
144
|
|
125
|
-
|
145
|
+
def physical_processor_count
|
146
|
+
@physical_processor_count ||= begin
|
147
|
+
ppc = case RbConfig::CONFIG['host_os']
|
148
|
+
when /darwin1/, /freebsd/
|
149
|
+
`sysctl -n hw.physicalcpu`.to_i
|
150
|
+
when /linux/
|
151
|
+
cores_per_physical = `grep cores /proc/cpuinfo`[/\d+/].to_i
|
152
|
+
physicals = `grep 'physical id' /proc/cpuinfo |sort|uniq|wc -l`.to_i
|
153
|
+
physicals * cores_per_physical
|
154
|
+
when /mswin|mingw/
|
155
|
+
require 'win32ole'
|
156
|
+
wmi = WIN32OLE.connect("winmgmts://")
|
157
|
+
cpu = wmi.ExecQuery("select NumberOfProcessors from Win32_Processor")
|
158
|
+
cpu.to_enum.first.NumberOfLogicalProcessors
|
159
|
+
else
|
160
|
+
processor_count
|
161
|
+
end
|
162
|
+
# fall back to logical count if physical info is invalid
|
163
|
+
ppc > 0 ? ppc : processor_count
|
164
|
+
end
|
165
|
+
end
|
126
166
|
|
127
|
-
|
128
|
-
end
|
167
|
+
private
|
129
168
|
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
169
|
+
def work_direct(array, options)
|
170
|
+
results = []
|
171
|
+
array.each_with_index do |e,i|
|
172
|
+
results << (options[:with_index] ? yield(e,i) : yield(e))
|
173
|
+
end
|
174
|
+
results
|
175
|
+
end
|
135
176
|
|
136
|
-
|
177
|
+
def hwprefs_available?
|
178
|
+
`which hwprefs` != ''
|
179
|
+
end
|
137
180
|
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
181
|
+
def work_in_threads(items, options, &block)
|
182
|
+
results = []
|
183
|
+
current = -1
|
184
|
+
exception = nil
|
142
185
|
|
143
|
-
|
186
|
+
in_threads(options[:count]) do
|
187
|
+
# as long as there are more items, work on one of them
|
144
188
|
loop do
|
145
189
|
break if exception
|
146
|
-
index = Thread.exclusive{ current_index += 1 }
|
147
|
-
break if index >= items.size
|
148
190
|
|
149
|
-
|
150
|
-
|
191
|
+
index = Thread.exclusive{ current+=1 }
|
192
|
+
break if index >= items.size
|
151
193
|
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
194
|
+
with_instrumentation items[index], index, options do
|
195
|
+
begin
|
196
|
+
results[index] = call_with_index(items, index, options, &block)
|
197
|
+
rescue Exception => e
|
198
|
+
exception = e
|
199
|
+
break
|
200
|
+
end
|
156
201
|
end
|
157
202
|
end
|
158
|
-
|
159
|
-
|
160
|
-
|
203
|
+
end
|
204
|
+
|
205
|
+
handle_exception(exception, results)
|
206
|
+
end
|
161
207
|
|
162
|
-
|
163
|
-
|
208
|
+
def work_in_processes(items, options, &blk)
|
209
|
+
workers = create_workers(items, options, &blk)
|
210
|
+
current_index = -1
|
211
|
+
results = []
|
212
|
+
exception = nil
|
213
|
+
kill_on_ctrl_c(workers.map(&:pid)) do
|
214
|
+
in_threads(options[:count]) do |i|
|
215
|
+
worker = workers[i]
|
216
|
+
|
217
|
+
begin
|
218
|
+
loop do
|
219
|
+
break if exception
|
220
|
+
index = Thread.exclusive{ current_index += 1 }
|
221
|
+
break if index >= items.size
|
222
|
+
|
223
|
+
output = with_instrumentation items[index], index, options do
|
224
|
+
worker.work(index)
|
225
|
+
end
|
226
|
+
|
227
|
+
if ExceptionWrapper === output
|
228
|
+
exception = output.exception
|
229
|
+
else
|
230
|
+
results[index] = output
|
231
|
+
end
|
232
|
+
end
|
233
|
+
ensure
|
234
|
+
worker.close_pipes
|
235
|
+
worker.wait # if it goes zombie, rather wait here to be able to debug
|
236
|
+
end
|
237
|
+
end
|
164
238
|
end
|
239
|
+
|
240
|
+
handle_exception(exception, results)
|
165
241
|
end
|
166
242
|
|
167
|
-
|
243
|
+
def create_workers(items, options, &block)
|
244
|
+
workers = []
|
245
|
+
Array.new(options[:count]).each do
|
246
|
+
workers << worker(items, options.merge(:started_workers => workers), &block)
|
247
|
+
end
|
248
|
+
workers
|
249
|
+
end
|
168
250
|
|
169
|
-
|
170
|
-
|
251
|
+
def worker(items, options, &block)
|
252
|
+
# use less memory on REE
|
253
|
+
GC.copy_on_write_friendly = true if GC.respond_to?(:copy_on_write_friendly=)
|
171
254
|
|
172
|
-
|
173
|
-
|
174
|
-
GC.copy_on_write_friendly = true if GC.respond_to?(:copy_on_write_friendly=)
|
255
|
+
child_read, parent_write = IO.pipe
|
256
|
+
parent_read, child_write = IO.pipe
|
175
257
|
|
176
|
-
|
177
|
-
|
258
|
+
pid = Process.fork do
|
259
|
+
begin
|
260
|
+
options.delete(:started_workers).each(&:close_pipes)
|
178
261
|
|
179
|
-
|
180
|
-
|
181
|
-
parent_write.close
|
182
|
-
parent_read.close
|
262
|
+
parent_write.close
|
263
|
+
parent_read.close
|
183
264
|
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
265
|
+
process_incoming_jobs(child_read, child_write, items, options, &block)
|
266
|
+
ensure
|
267
|
+
child_read.close
|
268
|
+
child_write.close
|
269
|
+
end
|
188
270
|
end
|
189
|
-
end
|
190
271
|
|
191
|
-
|
192
|
-
|
272
|
+
child_read.close
|
273
|
+
child_write.close
|
193
274
|
|
194
|
-
|
195
|
-
|
275
|
+
Worker.new(parent_read, parent_write, pid)
|
276
|
+
end
|
196
277
|
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
278
|
+
def process_incoming_jobs(read, write, items, options, &block)
|
279
|
+
while !read.eof?
|
280
|
+
index = Marshal.load(read)
|
281
|
+
begin
|
282
|
+
result = call_with_index(items, index, options, &block)
|
283
|
+
result = nil if options[:preserve_results] == false
|
284
|
+
rescue Exception => e
|
285
|
+
result = ExceptionWrapper.new(e)
|
286
|
+
end
|
287
|
+
Marshal.dump(result, write)
|
205
288
|
end
|
206
|
-
write_to_pipe(write, result)
|
207
289
|
end
|
208
|
-
end
|
209
|
-
|
210
|
-
def self.write_to_pipe(pipe, item)
|
211
|
-
pipe.write(encode(item))
|
212
|
-
end
|
213
290
|
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
291
|
+
def wait_for_threads(threads)
|
292
|
+
threads.compact.each do |t|
|
293
|
+
begin
|
294
|
+
t.join
|
295
|
+
rescue Interrupt
|
296
|
+
# thread died, do not stop other threads
|
297
|
+
end
|
220
298
|
end
|
221
299
|
end
|
222
|
-
end
|
223
300
|
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
# process died
|
301
|
+
def handle_exception(exception, results)
|
302
|
+
return nil if exception.class == Break
|
303
|
+
raise exception if exception
|
304
|
+
results
|
229
305
|
end
|
230
|
-
end
|
231
306
|
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
307
|
+
# options is either a Integer or a Hash with :count
|
308
|
+
def extract_count_from_options(options)
|
309
|
+
if options.is_a?(Hash)
|
310
|
+
count = options[:count]
|
311
|
+
else
|
312
|
+
count = options
|
313
|
+
options = {}
|
314
|
+
end
|
315
|
+
[count, options]
|
316
|
+
end
|
239
317
|
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
318
|
+
# kill all these pids or threads if user presses Ctrl+c
|
319
|
+
def kill_on_ctrl_c(things)
|
320
|
+
if @to_be_killed
|
321
|
+
@to_be_killed << things
|
322
|
+
else
|
323
|
+
@to_be_killed = [things]
|
324
|
+
Signal.trap :SIGINT do
|
325
|
+
if @to_be_killed.any?
|
326
|
+
$stderr.puts 'Parallel execution interrupted, exiting ...'
|
327
|
+
@to_be_killed.flatten.compact.each { |thing| kill_that_thing!(thing) }
|
328
|
+
end
|
329
|
+
exit 1 # Quit with 'failed' signal
|
330
|
+
end
|
331
|
+
end
|
332
|
+
yield
|
333
|
+
ensure
|
334
|
+
@to_be_killed.pop # free threads for GC and do not kill pids that could be used for new processes
|
247
335
|
end
|
248
|
-
[count, options]
|
249
|
-
end
|
250
336
|
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
337
|
+
def kill_that_thing!(thing)
|
338
|
+
if thing.is_a?(Thread)
|
339
|
+
thing.kill
|
340
|
+
else
|
341
|
+
begin
|
342
|
+
Process.kill(:KILL, thing)
|
343
|
+
rescue Errno::ESRCH
|
344
|
+
# some linux systems already automatically killed the children at this point
|
345
|
+
# so we just ignore them not being there
|
346
|
+
end
|
347
|
+
end
|
257
348
|
end
|
258
|
-
end
|
259
349
|
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
350
|
+
def call_with_index(array, index, options, &block)
|
351
|
+
args = [array[index]]
|
352
|
+
args << index if options[:with_index]
|
353
|
+
block.call(*args)
|
354
|
+
end
|
265
355
|
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
356
|
+
def with_instrumentation(item, index, options)
|
357
|
+
on_start = options[:start]
|
358
|
+
on_finish = options[:finish]
|
359
|
+
on_start.call(item, index) if on_start
|
360
|
+
yield
|
361
|
+
ensure
|
362
|
+
on_finish.call(item, index) if on_finish
|
270
363
|
end
|
271
364
|
end
|
272
365
|
end
|
metadata
CHANGED
@@ -1,42 +1,35 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gem-dependent
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
5
|
-
prerelease:
|
4
|
+
version: 0.2.5
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Michael Grosser
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain:
|
12
|
-
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
V3c3NEhmc0pONnFKT0s2ODRoSmVUOGxCWUFVZmlDM3dEMG93b1BTZytYdHlB
|
35
|
-
QWRkaXNSK0tWNVkxCk5tVkh1THRRY05UWnkrZ1JodDNhaEpSTXVDNlF5TG1r
|
36
|
-
VHNmKzZNYWVud0FNa0FnSGRzd0dzSnp0T25ObkJhM0YKeTBrQ1NXbUs2RCt4
|
37
|
-
L1NiZlM2cjdLZTA3TVJxemlKZEI5R3VFMSswY0lSdUZoOEVRK0xONkhYQ0tN
|
38
|
-
NXBvbi9HVQp5Y3dNWGZsMAotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==
|
39
|
-
date: 2013-09-07 00:00:00.000000000 Z
|
11
|
+
- |
|
12
|
+
-----BEGIN CERTIFICATE-----
|
13
|
+
MIIDMjCCAhqgAwIBAgIBADANBgkqhkiG9w0BAQUFADA/MRAwDgYDVQQDDAdtaWNo
|
14
|
+
YWVsMRcwFQYKCZImiZPyLGQBGRYHZ3Jvc3NlcjESMBAGCgmSJomT8ixkARkWAml0
|
15
|
+
MB4XDTEzMDIwMzE4MTMxMVoXDTE0MDIwMzE4MTMxMVowPzEQMA4GA1UEAwwHbWlj
|
16
|
+
aGFlbDEXMBUGCgmSJomT8ixkARkWB2dyb3NzZXIxEjAQBgoJkiaJk/IsZAEZFgJp
|
17
|
+
dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMorXo/hgbUq97+kII9H
|
18
|
+
MsQcLdC/7wQ1ZP2OshVHPkeP0qH8MBHGg6eYisOX2ubNagF9YTCZWnhrdKrwpLOO
|
19
|
+
cPLaZbjUjljJ3cQR3B8Yn1veV5IhG86QseTBjymzJWsLpqJ1UZGpfB9tXcsFtuxO
|
20
|
+
6vHvcIHdzvc/OUkICttLbH+1qb6rsHUceqh+JrH4GrsJ5H4hAfIdyS2XMK7YRKbh
|
21
|
+
h+IBu6dFWJJByzFsYmV1PDXln3UBmgAt65cmCu4qPfThioCGDzbSJrGDGLmw/pFX
|
22
|
+
FPpVCm1zgYSb1v6Qnf3cgXa2f2wYGm17+zAVyIDpwryFru9yF/jJxE38z/DRsd9R
|
23
|
+
/88CAwEAAaM5MDcwCQYDVR0TBAIwADAdBgNVHQ4EFgQUsiNnXHtKeMYYcr4yJVmQ
|
24
|
+
WONL+IwwCwYDVR0PBAQDAgSwMA0GCSqGSIb3DQEBBQUAA4IBAQAlyN7kKo/NQCQ0
|
25
|
+
AOzZLZ3WAePvStkCFIJ53tsv5Kyo4pMAllv+BgPzzBt7qi605mFSL6zBd9uLou+W
|
26
|
+
Co3s48p1dy7CjjAfVQdmVNHF3MwXtfC2OEyvSQPi4xKR8iba8wa3xp9LVo1PuLpw
|
27
|
+
/6DsrChWw74HfsJN6qJOK684hJeT8lBYAUfiC3wD0owoPSg+XtyAAddisR+KV5Y1
|
28
|
+
NmVHuLtQcNTZy+gRht3ahJRMuC6QyLmkTsf+6MaenwAMkAgHdswGsJztOnNnBa3F
|
29
|
+
y0kCSWmK6D+x/SbfS6r7Ke07MRqziJdB9GuE1+0cIRuFh8EQ+LN6HXCKM5pon/GU
|
30
|
+
ycwMXfl0
|
31
|
+
-----END CERTIFICATE-----
|
32
|
+
date: 2013-10-21 00:00:00.000000000 Z
|
40
33
|
dependencies: []
|
41
34
|
description:
|
42
35
|
email: michael@grosser.it
|
@@ -52,32 +45,25 @@ files:
|
|
52
45
|
homepage: https://github.com/grosser/gem-dependent
|
53
46
|
licenses:
|
54
47
|
- MIT
|
48
|
+
metadata: {}
|
55
49
|
post_install_message:
|
56
50
|
rdoc_options: []
|
57
51
|
require_paths:
|
58
52
|
- lib
|
59
53
|
required_ruby_version: !ruby/object:Gem::Requirement
|
60
|
-
none: false
|
61
54
|
requirements:
|
62
|
-
- -
|
55
|
+
- - '>='
|
63
56
|
- !ruby/object:Gem::Version
|
64
57
|
version: '0'
|
65
|
-
segments:
|
66
|
-
- 0
|
67
|
-
hash: -2903456129271945094
|
68
58
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
69
|
-
none: false
|
70
59
|
requirements:
|
71
|
-
- -
|
60
|
+
- - '>='
|
72
61
|
- !ruby/object:Gem::Version
|
73
62
|
version: '0'
|
74
|
-
segments:
|
75
|
-
- 0
|
76
|
-
hash: -2903456129271945094
|
77
63
|
requirements: []
|
78
64
|
rubyforge_project:
|
79
|
-
rubygems_version:
|
65
|
+
rubygems_version: 2.0.6
|
80
66
|
signing_key:
|
81
|
-
specification_version:
|
67
|
+
specification_version: 4
|
82
68
|
summary: See which gems depend on your gems
|
83
69
|
test_files: []
|
metadata.gz.sig
CHANGED