repo_dependency_graph 0.0.1
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 +0 -0
- data/bin/repo-dependency-graph +32 -0
- data/lib/repo_dependency_graph/version.rb +3 -0
- data/lib/repo_dependency_graph.rb +66 -0
- data.tar.gz.sig +0 -0
- metadata +82 -0
- metadata.gz.sig +0 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 01e2c01278bbf6e49d232e3ba2565cb1fb94664b
|
4
|
+
data.tar.gz: f4f43571cda21bb4c0c5847e15627181bb9d0219
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 288ea662bb0f323273b8175c6df68c21b564ff5beb9a68f2cf4f14bb7d5e7926844c4b604fb8fb6fa08f6b8dd19fba27ef4a4f894f2964bf8885254bfef14307
|
7
|
+
data.tar.gz: e9bf2f56c5e91c58c0a48bc4da35dbe0c0678842105026b607ac9e7fa877a4b0feeca948c901a284bab1329354d7a65006546d7ea3f7849f60d99b727532bbe6
|
checksums.yaml.gz.sig
ADDED
Binary file
|
@@ -0,0 +1,32 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require "rubygems"
|
3
|
+
require "optparse"
|
4
|
+
|
5
|
+
$LOAD_PATH << File.join(File.dirname(__FILE__), '..', 'lib')
|
6
|
+
require "repo_dependency_graph"
|
7
|
+
|
8
|
+
def git_config(thing)
|
9
|
+
result = `git config #{thing}`.strip
|
10
|
+
result.empty? ? nil : result
|
11
|
+
end
|
12
|
+
|
13
|
+
options = {
|
14
|
+
:user => git_config("github.user")
|
15
|
+
}
|
16
|
+
OptionParser.new do |opts|
|
17
|
+
opts.banner = <<BANNER
|
18
|
+
Draw repo dependency graph from your organization
|
19
|
+
|
20
|
+
Usage:
|
21
|
+
repo-dependency-graph
|
22
|
+
|
23
|
+
Options:
|
24
|
+
BANNER
|
25
|
+
opts.on("--token TOKEN", "Use token") { |token| options[:token] = token }
|
26
|
+
opts.on("--user USER", "Use user") { |user| options[:user] = user }
|
27
|
+
opts.on("--organization ORGANIZATION", "Use user") { |organization| options[:organization] = organization }
|
28
|
+
opts.on("-h", "--help", "Show this.") { puts opts; exit }
|
29
|
+
opts.on("-v", "--version", "Show Version"){ puts RepoDependencyGraph::VERSION; exit}
|
30
|
+
end.parse!
|
31
|
+
|
32
|
+
exit RepoDependencyGraph.run(options)
|
@@ -0,0 +1,66 @@
|
|
1
|
+
require "repo_dependency_graph/version"
|
2
|
+
require "bundler/organization_audit/repo"
|
3
|
+
require "bundler" # get all dependency for lockfile_parser
|
4
|
+
|
5
|
+
module RepoDependencyGraph
|
6
|
+
class << self
|
7
|
+
def run(options)
|
8
|
+
dependencies = dependencies(options)
|
9
|
+
dependencies.map do |project, dependencies|
|
10
|
+
puts "#{project}: #{dependencies.join(",")}"
|
11
|
+
end
|
12
|
+
draw(dependencies)
|
13
|
+
0
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def draw(dependencies)
|
19
|
+
require 'graphviz'
|
20
|
+
|
21
|
+
g = GraphViz.new(:G, :type => :digraph)
|
22
|
+
|
23
|
+
all = (dependencies.keys + dependencies.values.flatten).uniq
|
24
|
+
nodes = Hash[all.map { |k| [k, g.add_node(k)] }]
|
25
|
+
|
26
|
+
dependencies.each do |project,dependencies|
|
27
|
+
dependencies.each do |dependency|
|
28
|
+
g.add_edge(nodes[project], nodes[dependency])
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
g.output(:png => "out.png")
|
33
|
+
end
|
34
|
+
|
35
|
+
def dependencies(options)
|
36
|
+
all = Bundler::OrganizationAudit::Repo.all(options).select(&:private?).sort_by(&:project)
|
37
|
+
possible = all.map(&:project)
|
38
|
+
dependencies = all.map do |repo|
|
39
|
+
found = dependent_gems(repo) || []
|
40
|
+
found = found & possible
|
41
|
+
next if found.empty?
|
42
|
+
puts "#{repo.project}: #{found.join(", ")}"
|
43
|
+
[repo.project, found]
|
44
|
+
end.compact
|
45
|
+
Hash[dependencies]
|
46
|
+
end
|
47
|
+
|
48
|
+
def dependent_gems(repo)
|
49
|
+
if repo.gem?
|
50
|
+
load_spec(repo.gemspec_content).runtime_dependencies.map(&:name)
|
51
|
+
elsif content = repo.content("Gemfile.lock")
|
52
|
+
Bundler::LockfileParser.new(content).specs.map(&:name)
|
53
|
+
elsif content = repo.content("Gemfile")
|
54
|
+
content.scan(/gem ['"](.*?)['"]/).flatten
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def load_spec(content)
|
59
|
+
eval content.
|
60
|
+
gsub(/^\s*require .*$/, "").
|
61
|
+
gsub(/([a-z\d]+::)+version/i, '"1.2.3"').
|
62
|
+
gsub(/^\s*\$(:|LOAD_PATH).*/, "").
|
63
|
+
gsub(/File\.read\(.*?\)/, '"1.2.3"')
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
data.tar.gz.sig
ADDED
Binary file
|
metadata
ADDED
@@ -0,0 +1,82 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: repo_dependency_graph
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Michael Grosser
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain:
|
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-08-10 00:00:00.000000000 Z
|
33
|
+
dependencies:
|
34
|
+
- !ruby/object:Gem::Dependency
|
35
|
+
name: bundler-organization_audit
|
36
|
+
requirement: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
type: :runtime
|
42
|
+
prerelease: false
|
43
|
+
version_requirements: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
description:
|
49
|
+
email: michael@grosser.it
|
50
|
+
executables:
|
51
|
+
- repo-dependency-graph
|
52
|
+
extensions: []
|
53
|
+
extra_rdoc_files: []
|
54
|
+
files:
|
55
|
+
- bin/repo-dependency-graph
|
56
|
+
- lib/repo_dependency_graph.rb
|
57
|
+
- lib/repo_dependency_graph/version.rb
|
58
|
+
homepage: http://github.com/grosser/repo_dependency_graph
|
59
|
+
licenses:
|
60
|
+
- MIT
|
61
|
+
metadata: {}
|
62
|
+
post_install_message:
|
63
|
+
rdoc_options: []
|
64
|
+
require_paths:
|
65
|
+
- lib
|
66
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
67
|
+
requirements:
|
68
|
+
- - '>='
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: '0'
|
71
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - '>='
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
requirements: []
|
77
|
+
rubyforge_project:
|
78
|
+
rubygems_version: 2.0.6
|
79
|
+
signing_key:
|
80
|
+
specification_version: 4
|
81
|
+
summary: Show the dependencies of your private repos
|
82
|
+
test_files: []
|
metadata.gz.sig
ADDED
Binary file
|