rdep 0.0.3 → 0.0.5a
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 +4 -4
- data/lib/rdep.rb +83 -20
- metadata +26 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 019c81db3bf1278a6693bced25442b8009e57694
|
4
|
+
data.tar.gz: 99bd49e7dde2f8fd999fdabfe02c3e2a48fd984e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 04742db320af113a4d7eef208c18a514a191a6822b893c103e2868d7116aaf758cd751dac1e0089396ea2a4e510a51187a758fe26fc772307c902cb1cfdaac8c
|
7
|
+
data.tar.gz: 7da4791b240888c8bc60d01c179ea383de0c39f2e4622fad3e6836b3d2618d26114c50a9ea30558546cc17eab8c1001eefcc64a6916c3fb87107a85a439ad418
|
data/lib/rdep.rb
CHANGED
@@ -1,16 +1,24 @@
|
|
1
1
|
require 'rubygems'
|
2
|
+
require 'pathname'
|
2
3
|
require 'bundler'
|
3
4
|
require 'net/http'
|
4
5
|
require 'json'
|
5
6
|
require 'tmpdir'
|
6
7
|
require 'optparse'
|
8
|
+
require 'set'
|
7
9
|
|
8
10
|
module RDep
|
9
11
|
|
12
|
+
# Loads and returns gemspec at path.
|
10
13
|
def self.load_gemspec(gemspecPath)
|
11
|
-
|
14
|
+
spec = nil
|
15
|
+
no_warn { # loading gem prints crap to stderr on error
|
16
|
+
spec = Gem::Specification.load(gemspecPath)
|
17
|
+
}
|
18
|
+
spec
|
12
19
|
end
|
13
20
|
|
21
|
+
# Loads and returns gemfile at path.
|
14
22
|
def self.load_gemfile(gemfilePath)
|
15
23
|
gemfilePathname = Pathname.new(gemfilePath)
|
16
24
|
|
@@ -23,6 +31,7 @@ module RDep
|
|
23
31
|
return builder
|
24
32
|
end
|
25
33
|
|
34
|
+
# Returns gemspec for a gem specified by name.
|
26
35
|
def self.gemspec_from_gem_name(gem, reqs)
|
27
36
|
reqs_str = reqs.join(',')
|
28
37
|
wd = Dir.pwd
|
@@ -65,7 +74,8 @@ module RDep
|
|
65
74
|
return nil
|
66
75
|
end
|
67
76
|
|
68
|
-
|
77
|
+
# Return metadata for project at project_dir (expects a *.gemspec or a Gemfile). Optionally include dependency info.
|
78
|
+
def self.metadata(project_dir, incl_deps)
|
69
79
|
gemspecs = Dir.glob(File.join(project_dir, '*.gemspec'))
|
70
80
|
gemfile = File.join(project_dir, 'Gemfile')
|
71
81
|
|
@@ -73,51 +83,104 @@ module RDep
|
|
73
83
|
raise "Found more than one .gemspec file: #{gemspecs}"
|
74
84
|
end
|
75
85
|
|
86
|
+
mdata = {}
|
76
87
|
if gemspecs.length == 1
|
77
88
|
gemspec = RDep::load_gemspec(gemspecs[0])
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
89
|
+
mdata[:type] = :gem
|
90
|
+
mdata[:name] = gemspec.name
|
91
|
+
mdata[:version] = gemspec.version
|
92
|
+
if incl_deps
|
93
|
+
mdata[:dependencies] = gemspec.dependencies.map {|d|
|
82
94
|
{
|
83
95
|
name: d.name,
|
84
96
|
requirements: d.requirements_list,
|
85
97
|
source_url: fetch_source_url(d.name),
|
86
98
|
}
|
87
|
-
}
|
88
|
-
|
99
|
+
}
|
100
|
+
end
|
89
101
|
elsif File.exists?(gemfile)
|
90
102
|
gemfile_info = RDep::load_gemfile(gemfile)
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
103
|
+
mdata[:type] = :app
|
104
|
+
mdata[:name] = nil
|
105
|
+
mdata[:version] = nil
|
106
|
+
if incl_deps
|
107
|
+
mdata[:dependencies] = gemfile_info.dependencies.map {|d|
|
95
108
|
{
|
96
109
|
name: d.name,
|
97
110
|
requirements: d.requirements_list,
|
98
111
|
source_url: fetch_source_url(d.name),
|
99
112
|
}
|
100
|
-
}
|
101
|
-
|
113
|
+
}
|
114
|
+
end
|
102
115
|
else
|
103
|
-
nil
|
116
|
+
mdata = nil
|
104
117
|
end
|
118
|
+
return mdata
|
105
119
|
end
|
106
120
|
|
121
|
+
# Scan toplevel_dir for all projects and return metadata for all of them. Optionally, include dependency info for each.
|
122
|
+
def self.scan(toplevel_dir, incl_deps)
|
123
|
+
project_dirs = Set.new
|
124
|
+
add_project_dir = Proc.new {|f|
|
125
|
+
project_dirs.add(File.dirname(f))
|
126
|
+
}
|
127
|
+
Dir.glob(File.join(toplevel_dir, '**', '*.gemspec')).each &add_project_dir
|
128
|
+
Dir.glob(File.join(toplevel_dir, '**', 'config.ru')).each &add_project_dir
|
129
|
+
Dir.glob(File.join(toplevel_dir, '**', 'Gemfile')).each &add_project_dir
|
130
|
+
|
131
|
+
mdata = []
|
132
|
+
project_dirs.each {|d|
|
133
|
+
m = nil
|
134
|
+
begin
|
135
|
+
m = metadata(d, incl_deps)
|
136
|
+
rescue
|
137
|
+
end
|
138
|
+
if m != nil
|
139
|
+
m[:path] = Pathname.new(d).relative_path_from(Pathname.new(toplevel_dir)).to_s
|
140
|
+
mdata.push(m)
|
141
|
+
end
|
142
|
+
}
|
143
|
+
return mdata
|
144
|
+
end
|
145
|
+
|
146
|
+
# rdep command
|
107
147
|
def self.run(args)
|
148
|
+
options = {incl_dep: true}
|
108
149
|
optparser = OptionParser.new do |opts|
|
109
|
-
opts.banner = "Usage: rdep <project-dir>"
|
150
|
+
opts.banner = "Usage: rdep [OPTIONS] <project-dir>"
|
151
|
+
opts.on('-s', '--scan', 'Scan directory recursively for projects and print metadata for all of them.') do |scan|
|
152
|
+
options[:scan] = scan
|
153
|
+
end
|
154
|
+
opts.on('-o', '--no-dep', "Omit dependency information (will run faster)") do |nodep|
|
155
|
+
options[:incl_dep] = false
|
156
|
+
end
|
110
157
|
end
|
111
|
-
optparser.parse(args)
|
158
|
+
optparser.parse!(args)
|
112
159
|
|
113
160
|
if args.length != 1
|
114
161
|
$stderr.puts optparser.help
|
115
162
|
return
|
116
163
|
end
|
117
|
-
|
164
|
+
dir = args[0]
|
165
|
+
|
166
|
+
if options[:scan]
|
167
|
+
mdata = RDep::scan(dir, options[:incl_dep])
|
168
|
+
puts JSON.dump(mdata)
|
169
|
+
else
|
170
|
+
mdata = RDep::metadata(dir, options[:incl_dep])
|
171
|
+
puts JSON.dump(mdata)
|
172
|
+
end
|
173
|
+
end
|
118
174
|
|
119
|
-
|
120
|
-
|
175
|
+
# Run a block with warnings disabled (don't pollute stderr)
|
176
|
+
def self.no_warn
|
177
|
+
v = $VERBOSE
|
178
|
+
$VERBOSE = nil
|
179
|
+
begin
|
180
|
+
yield
|
181
|
+
ensure
|
182
|
+
$VERBOSE = v
|
183
|
+
end
|
121
184
|
end
|
122
185
|
|
123
186
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rdep
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5a
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Beyang Liu
|
@@ -9,8 +9,28 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
date: 2014-04-18 00:00:00.000000000 Z
|
12
|
-
dependencies:
|
13
|
-
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ~>
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 1.6.2
|
20
|
+
- - '>='
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '1.6'
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 1.6.2
|
30
|
+
- - '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '1.6'
|
33
|
+
description: See summary
|
14
34
|
email: beyang@sourcegraph.com
|
15
35
|
executables:
|
16
36
|
- rdep
|
@@ -34,13 +54,13 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
34
54
|
version: '0'
|
35
55
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
36
56
|
requirements:
|
37
|
-
- - '
|
57
|
+
- - '>'
|
38
58
|
- !ruby/object:Gem::Version
|
39
|
-
version:
|
59
|
+
version: 1.3.1
|
40
60
|
requirements: []
|
41
61
|
rubyforge_project:
|
42
62
|
rubygems_version: 2.2.2
|
43
63
|
signing_key:
|
44
64
|
specification_version: 4
|
45
|
-
summary:
|
65
|
+
summary: Command line utility for displaying gem dependency metadata in JSON
|
46
66
|
test_files: []
|