11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
# File 'lib/bundler/diff/cli.rb', line 11
def run(args=ARGV)
Bundler.ui = Bundler::UI::Shell.new
args = option_parser.parse(args) unless args.empty?
gem_name = args.first
error('gem name required') unless gem_name
bundled_spec = bundled_specs[gem_name]
error('gem spec not found') unless bundled_spec
gem_dependency = Gem::Dependency.new(gem_name, options[:version])
specs_and_sources, errors = Gem::SpecFetcher.fetcher.spec_for_dependency(gem_dependency)
gem_spec, source = specs_and_sources.max_by { |s,| s.version }
error('gem spec not found') if gem_spec.nil?
installed_spec = Gem::Specification.find { |s| s.name == gem_spec.name && s.version == gem_spec.version }
if installed_spec
Bundler::Diff::Tool.diff(bundled_spec, installed_spec)
return
end
Dir.mktmpdir do |tmp_dir|
Dir.chdir(tmp_dir) { source.download(gem_spec) }
unpack(gem_spec, tmp_dir)
gem_spec.define_singleton_method(:gem_dir) { Pathname(tmp_dir).join(gem_spec.full_name) }
Bundler::Diff::Tool.diff(bundled_spec, gem_spec)
end
end
|