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.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/rdep.rb +83 -20
  3. metadata +26 -6
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 55ebd1d171b7dc16cbd363d1636035eeb9454c1b
4
- data.tar.gz: 29652413074ac9d34ebf7ece3b1d9c24dc641c25
3
+ metadata.gz: 019c81db3bf1278a6693bced25442b8009e57694
4
+ data.tar.gz: 99bd49e7dde2f8fd999fdabfe02c3e2a48fd984e
5
5
  SHA512:
6
- metadata.gz: 1a8a79f1ca9fae5fe4e35d4add84d1f5816a6f6d33ec0e858477465b83ce8e9fe1fbf9e2fb6f0380e8bbbcc4b042be904bd24378daafc0b3f42825e3c31327a6
7
- data.tar.gz: 59482dc48b78b519b9143a375ba570e31fd68793162db08833d74ec316eb90e07a2688ee415540c344d52d81adeb7b1a40ce28e92181151cc7fe6f61d1ae4743
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
- Gem::Specification.load(gemspecPath)
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
- def self.metadata(project_dir)
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
- name: gemspec.name,
80
- version: gemspec.version,
81
- dependencies: gemspec.dependencies.map {|d|
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
- name: nil,
93
- version: nil,
94
- dependencies: gemfile_info.dependencies.map {|d|
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
- projectdir = args[0]
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
- metadata = RDep::metadata(projectdir)
120
- puts JSON.dump(metadata)
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.3
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
- description: ''
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: '0'
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: []