| Class | Gem::Commands::DependencyCommand |
| In: |
lib/rubygems/commands/dependency_command.rb
|
| Parent: | Gem::Command |
# File lib/rubygems/commands/dependency_command.rb, line 11
11: def initialize
12: super 'dependency',
13: 'Show the dependencies of an installed gem',
14: :version => Gem::Requirement.default, :domain => :local
15:
16: add_version_option
17: add_platform_option
18:
19: add_option('-R', '--[no-]reverse-dependencies',
20: 'Include reverse dependencies in the output') do
21: |value, options|
22: options[:reverse_dependencies] = value
23: end
24:
25: add_option('-p', '--pipe',
26: "Pipe Format (name --version ver)") do |value, options|
27: options[:pipe_format] = value
28: end
29:
30: add_local_remote_options
31: end
# File lib/rubygems/commands/dependency_command.rb, line 45
45: def execute
46: options[:args] << '.' if options[:args].empty?
47: specs = {}
48:
49: source_indexes = []
50:
51: if local? then
52: source_indexes << Gem::SourceIndex.from_installed_gems
53: end
54:
55: if remote? then
56: Gem::SourceInfoCache.cache_data.map do |_, sice|
57: source_indexes << sice.source_index
58: end
59: end
60:
61: options[:args].each do |name|
62: new_specs = nil
63: source_indexes.each do |source_index|
64: new_specs = find_gems(name, source_index)
65: end
66:
67: say "No match found for #{name} (#{options[:version]})" if
68: new_specs.empty?
69:
70: specs = specs.merge new_specs
71: end
72:
73: terminate_interaction 1 if specs.empty?
74:
75: reverse = Hash.new { |h, k| h[k] = [] }
76:
77: if options[:reverse_dependencies] then
78: specs.values.each do |source_index, spec|
79: reverse[spec.full_name] = find_reverse_dependencies spec, source_index
80: end
81: end
82:
83: if options[:pipe_format] then
84: specs.values.sort_by { |_, spec| spec }.each do |_, spec|
85: unless spec.dependencies.empty?
86: spec.dependencies.each do |dep|
87: say "#{dep.name} --version '#{dep.version_requirements}'"
88: end
89: end
90: end
91: else
92: response = ''
93:
94: specs.values.sort_by { |_, spec| spec }.each do |_, spec|
95: response << print_dependencies(spec)
96: unless reverse[spec.full_name].empty? then
97: response << " Used by\n"
98: reverse[spec.full_name].each do |sp, dep|
99: response << " #{sp} (#{dep})\n"
100: end
101: end
102: response << "\n"
103: end
104:
105: say response
106: end
107: end
# File lib/rubygems/commands/dependency_command.rb, line 138
138: def find_gems(name, source_index)
139: specs = {}
140:
141: spec_list = source_index.search name, options[:version]
142:
143: spec_list.each do |spec|
144: specs[spec.full_name] = [source_index, spec]
145: end
146:
147: specs
148: end
Retuns list of [specification, dep] that are satisfied by spec.
# File lib/rubygems/commands/dependency_command.rb, line 121
121: def find_reverse_dependencies(spec, source_index)
122: result = []
123:
124: source_index.each do |name, sp|
125: sp.dependencies.each do |dep|
126: dep = Gem::Dependency.new(*dep) unless Gem::Dependency === dep
127:
128: if spec.name == dep.name and
129: dep.version_requirements.satisfied_by?(spec.version) then
130: result << [sp.full_name, dep]
131: end
132: end
133: end
134:
135: result
136: end
# File lib/rubygems/commands/dependency_command.rb, line 109
109: def print_dependencies(spec, level = 0)
110: response = ''
111: response << ' ' * level + "Gem #{spec.full_name}\n"
112: unless spec.dependencies.empty? then
113: spec.dependencies.each do |dep|
114: response << ' ' * level + " #{dep}\n"
115: end
116: end
117: response
118: end