polisher 0.9.1 → 0.10.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/gem_dependency_checker.rb +55 -25
- data/bin/git_gem_updater.rb +18 -7
- data/lib/polisher/bodhi.rb +11 -10
- data/lib/polisher/component.rb +43 -0
- data/lib/polisher/config.rb +32 -0
- data/lib/polisher/core.rb +59 -34
- data/lib/polisher/errata.rb +56 -56
- data/lib/polisher/fedora.rb +33 -33
- data/lib/polisher/gem.rb +316 -281
- data/lib/polisher/gem_state.rb +86 -0
- data/lib/polisher/gemfile.rb +85 -87
- data/lib/polisher/git/pkg.rb +232 -175
- data/lib/polisher/git/repo.rb +74 -61
- data/lib/polisher/koji.rb +136 -83
- data/lib/polisher/logger.rb +23 -0
- data/lib/polisher/rhn.rb +6 -5
- data/lib/polisher/rpm/requirement.rb +186 -177
- data/lib/polisher/rpm/spec.rb +420 -356
- data/lib/polisher/tag_mapper.rb +27 -0
- data/lib/polisher/version.rb +1 -1
- data/lib/polisher/version_checker.rb +86 -17
- data/lib/polisher/yum.rb +26 -19
- data/spec/component_spec.rb +53 -0
- data/spec/core_spec.rb +6 -0
- data/spec/gem_spec.rb +230 -47
- data/spec/git_spec.rb +63 -27
- data/spec/koji_spec.rb +60 -3
- data/spec/rpm/spec_spec.rb +7 -3
- data/spec/spec_helper.rb +2 -1
- data/spec/version_checker_spec.rb +97 -0
- data/spec/yum_spec.rb +5 -0
- metadata +34 -28
- data/lib/polisher/missing.rb +0 -12
@@ -0,0 +1,27 @@
|
|
1
|
+
# Polisher Tag Mapper, simple mechanism to associate
|
2
|
+
# tags with each other
|
3
|
+
#
|
4
|
+
# Licensed under the MIT license
|
5
|
+
# Copyright (C) 2013-2014 Red Hat, Inc.
|
6
|
+
|
7
|
+
require 'polisher/core'
|
8
|
+
|
9
|
+
module Polisher
|
10
|
+
class TagMapper
|
11
|
+
extend ConfHelpers
|
12
|
+
|
13
|
+
def self.method_missing(id, *args)
|
14
|
+
set(id.to_s, args.first)
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.set(tag, value)
|
18
|
+
@tags ||= {}
|
19
|
+
@tags[tag] = value
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.map(tag)
|
23
|
+
@tags ||= {}
|
24
|
+
@tags[tag]
|
25
|
+
end
|
26
|
+
end # class TagMapper
|
27
|
+
end # module Polisher
|
data/lib/polisher/version.rb
CHANGED
@@ -4,9 +4,12 @@
|
|
4
4
|
# Copyright (C) 2013-2014 Red Hat, Inc.
|
5
5
|
|
6
6
|
require 'polisher/gem'
|
7
|
+
require 'polisher/logger'
|
7
8
|
|
8
9
|
module Polisher
|
9
10
|
class VersionChecker
|
11
|
+
extend Logging
|
12
|
+
|
10
13
|
GEM_TARGET = :gem
|
11
14
|
KOJI_TARGET = :koji
|
12
15
|
FEDORA_TARGET = :fedora
|
@@ -20,7 +23,7 @@ module Polisher
|
|
20
23
|
# Enable the specified target(s) in the list of target to check
|
21
24
|
def self.check(*target)
|
22
25
|
@check_list ||= []
|
23
|
-
target.each { |t| @check_list << t }
|
26
|
+
target.flatten.each { |t| @check_list << t }
|
24
27
|
end
|
25
28
|
|
26
29
|
def self.should_check?(target)
|
@@ -40,37 +43,88 @@ module Polisher
|
|
40
43
|
versions = {}
|
41
44
|
|
42
45
|
if should_check?(GEM_TARGET)
|
43
|
-
|
46
|
+
logger.debug "versions_for<gem>(#{name})..."
|
47
|
+
gem_versions = Gem.local_versions_for(name, &bl)
|
48
|
+
logger.debug gem_versions
|
49
|
+
versions.merge! :gem => gem_versions
|
44
50
|
end
|
45
51
|
|
46
52
|
if should_check?(FEDORA_TARGET)
|
47
|
-
|
48
|
-
|
53
|
+
begin
|
54
|
+
require 'polisher/fedora'
|
55
|
+
logger.debug "versions_for<fedora>(#{name})..."
|
56
|
+
fedora_versions = Fedora.versions_for(name, &bl)
|
57
|
+
logger.debug fedora_versions
|
58
|
+
versions.merge! :fedora => fedora_versions
|
59
|
+
rescue
|
60
|
+
logger.debug 'unknown'
|
61
|
+
versions.merge! :fedora => unknown_version(:fedora, name, &bl)
|
62
|
+
end
|
49
63
|
end
|
50
64
|
|
51
65
|
if should_check?(KOJI_TARGET)
|
52
|
-
|
53
|
-
|
66
|
+
begin
|
67
|
+
require 'polisher/koji'
|
68
|
+
logger.debug "versions_for<koji>(#{name})..."
|
69
|
+
koji_versions = Koji.versions_for(name, &bl)
|
70
|
+
logger.debug koji_versions
|
71
|
+
versions.merge! :koji => koji_versions
|
72
|
+
rescue
|
73
|
+
logger.debug 'unknown'
|
74
|
+
versions.merge! :koji => unknown_version(:koji, name, &bl)
|
75
|
+
end
|
54
76
|
end
|
55
77
|
|
56
78
|
if should_check?(GIT_TARGET)
|
57
|
-
|
58
|
-
|
79
|
+
begin
|
80
|
+
require 'polisher/git/pkg'
|
81
|
+
logger.debug "versions_for<git>(#{name})..."
|
82
|
+
git_versions = Git::Pkg.versions_for(name, &bl)
|
83
|
+
logger.debug git_versions
|
84
|
+
versions.merge! :git => git_versions
|
85
|
+
rescue
|
86
|
+
logger.debug 'unknown'
|
87
|
+
versions.merge! :git => unknown_version(:git, name, &bl)
|
88
|
+
end
|
59
89
|
end
|
60
90
|
|
61
91
|
if should_check?(YUM_TARGET)
|
62
|
-
|
63
|
-
|
92
|
+
begin
|
93
|
+
require 'polisher/yum'
|
94
|
+
logger.debug "versions_for<yum>(#{name})..."
|
95
|
+
yum_versions = [Yum.version_for(name, &bl)]
|
96
|
+
versions.merge! :yum => yum_versions
|
97
|
+
logger.debug yum_versions
|
98
|
+
rescue
|
99
|
+
logger.debug 'unknown'
|
100
|
+
versions.merge! :yum => unknown_version(:yum, name, &bl)
|
101
|
+
end
|
64
102
|
end
|
65
103
|
|
66
104
|
if should_check?(BODHI_TARGET)
|
67
|
-
|
68
|
-
|
105
|
+
begin
|
106
|
+
require 'polisher/bodhi'
|
107
|
+
logger.debug "versions_for<bodhi>(#{name})..."
|
108
|
+
bodhi_versions = Bodhi.versions_for(name, &bl)
|
109
|
+
versions.merge! :bodhi => bodhi_versions
|
110
|
+
logger.debug bodhi_versions
|
111
|
+
rescue
|
112
|
+
logger.debug 'unknown'
|
113
|
+
versions.merge! :bodhi => unknown_version(:bodhi, name, &bl)
|
114
|
+
end
|
69
115
|
end
|
70
116
|
|
71
117
|
if should_check?(ERRATA_TARGET)
|
72
|
-
|
73
|
-
|
118
|
+
begin
|
119
|
+
require 'polisher/errata'
|
120
|
+
logger.debug "versions_for<errata>(#{name})..."
|
121
|
+
errata_versions = Errata.versions_for(name, &bl)
|
122
|
+
versions.merge! :errata => errata_versions
|
123
|
+
logger.debug errata_versions
|
124
|
+
rescue
|
125
|
+
logger.debug 'unknown'
|
126
|
+
versions.merge! :errata => unknown_version(:errata, name, &bl)
|
127
|
+
end
|
74
128
|
end
|
75
129
|
|
76
130
|
versions
|
@@ -81,7 +135,12 @@ module Polisher
|
|
81
135
|
# returns the max.
|
82
136
|
def self.version_for(name)
|
83
137
|
versions = self.versions_for(name).values
|
84
|
-
versions.inject(
|
138
|
+
versions.inject(Hash.new(0)) { |total, i| total[i] += 1; total }.first
|
139
|
+
end
|
140
|
+
|
141
|
+
# Invoke block for specified target w/ an 'unknown' version
|
142
|
+
def self.unknown_version(tgt, name)
|
143
|
+
yield tgt, name, [:unknown]
|
85
144
|
end
|
86
145
|
end
|
87
146
|
|
@@ -98,11 +157,21 @@ module Polisher
|
|
98
157
|
def dependency_versions(args = {}, &bl)
|
99
158
|
args = {:recursive => true, :dev_deps => true}.merge(args)
|
100
159
|
versions = {}
|
101
|
-
|
102
|
-
gem = Polisher::Gem.retrieve(dep)
|
160
|
+
deps.each do |dep|
|
161
|
+
gem = Polisher::Gem.retrieve(dep.name)
|
103
162
|
versions.merge!(gem.versions(args, &bl))
|
104
163
|
end
|
105
164
|
versions
|
106
165
|
end
|
166
|
+
|
167
|
+
# Return list of states which gem dependencies are in
|
168
|
+
def dependency_states
|
169
|
+
states = {}
|
170
|
+
deps.each do |dep|
|
171
|
+
gem = Polisher::Gem.new :name => dep.name
|
172
|
+
states.merge dep.name => gem.state(:check => dep)
|
173
|
+
end
|
174
|
+
states
|
175
|
+
end
|
107
176
|
end
|
108
177
|
end
|
data/lib/polisher/yum.rb
CHANGED
@@ -3,28 +3,35 @@
|
|
3
3
|
# Licensed under the MIT license
|
4
4
|
# Copyright (C) 2013-2014 Red Hat, Inc.
|
5
5
|
|
6
|
-
require '
|
6
|
+
require 'polisher/core'
|
7
|
+
require 'polisher/component'
|
7
8
|
|
8
9
|
module Polisher
|
9
|
-
|
10
|
-
|
10
|
+
Component.verify("Yum", 'awesome_spawn') do
|
11
|
+
class Yum
|
12
|
+
include ConfHelpers
|
11
13
|
|
12
|
-
|
13
|
-
#
|
14
|
-
# @param [String] name name of gem to loopup
|
15
|
-
# @param [Callable] bl optional callback to invoke with version retrieved
|
16
|
-
# @returns [String] version of gem in yum or nil if not found
|
17
|
-
def self.version_for(name, &bl)
|
18
|
-
version = nil
|
19
|
-
result = AwesomeSpawn.run "#{YUM_CMD} info rubygem-#{name}"
|
20
|
-
out = result.output
|
14
|
+
conf_attr :yum_cmd, '/usr/bin/yum'
|
21
15
|
|
22
|
-
|
23
|
-
|
24
|
-
|
16
|
+
# Retrieve version of gem available in yum
|
17
|
+
#
|
18
|
+
# @param [String] name name of gem to loopup
|
19
|
+
# @param [Callable] bl optional callback to invoke with version retrieved
|
20
|
+
# @returns [String] version of gem in yum or nil if not found
|
21
|
+
def self.version_for(name, &bl)
|
22
|
+
require_cmd! yum_cmd
|
23
|
+
|
24
|
+
version = nil
|
25
|
+
result = AwesomeSpawn.run "#{yum_cmd} info rubygem-#{name}"
|
26
|
+
out = result.output
|
27
|
+
|
28
|
+
if out.include?("Version")
|
29
|
+
version = out.lines.to_a.detect { |l| l =~ /^Version.*/ }
|
30
|
+
version = version.split(':').last.strip
|
31
|
+
end
|
32
|
+
bl.call(:yum, name, [version]) unless bl.nil?
|
33
|
+
version
|
25
34
|
end
|
26
|
-
bl.call(:yum, name, [version]) unless(bl.nil?)
|
27
|
-
version
|
28
35
|
end
|
29
|
-
end
|
30
|
-
end
|
36
|
+
end # Component.verify("Yum")
|
37
|
+
end # module Polisher
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'polisher/component'
|
2
|
+
|
3
|
+
module Polisher
|
4
|
+
describe Component do
|
5
|
+
describe ".verify" do
|
6
|
+
it "executes block for no missing gems" do
|
7
|
+
silence_stream(STDERR) do
|
8
|
+
described_class.verify("Z", "rubygems", "rspec") do
|
9
|
+
module ::Polisher
|
10
|
+
class Z
|
11
|
+
def self.yielded_block_executed
|
12
|
+
true
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
expect(Polisher::Z.yielded_block_executed).to be_true
|
20
|
+
end
|
21
|
+
|
22
|
+
describe "missing" do
|
23
|
+
subject do
|
24
|
+
silence_stream(STDERR) do
|
25
|
+
described_class.verify(@test_class, "missing_gem") {}
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
it "A" do
|
30
|
+
@test_class = "A"
|
31
|
+
subject
|
32
|
+
expect(Polisher::A).to eql Polisher::Component::Missing
|
33
|
+
expect { Polisher::A.new }.to raise_error
|
34
|
+
end
|
35
|
+
|
36
|
+
it "A::B" do
|
37
|
+
@test_class = "A::B"
|
38
|
+
subject
|
39
|
+
expect(Polisher::A).to eql Polisher::Component::Missing
|
40
|
+
expect(Polisher::A::B).to eql Polisher::Component::Missing
|
41
|
+
end
|
42
|
+
|
43
|
+
it "A::B::C" do
|
44
|
+
@test_class = "A::B::C"
|
45
|
+
subject
|
46
|
+
expect(Polisher::A).to eql Polisher::Component::Missing
|
47
|
+
expect(Polisher::A::B).to eql Polisher::Component::Missing
|
48
|
+
expect(Polisher::A::B::C).to eql Polisher::Component::Missing
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
data/spec/core_spec.rb
CHANGED
@@ -60,5 +60,11 @@ describe String do
|
|
60
60
|
it "returns string with rpm macros swapped in" do
|
61
61
|
"bin".rpmize.should == "%{_bindir}"
|
62
62
|
end
|
63
|
+
|
64
|
+
it "prefixes %{gem_instdir} to non-special files" do
|
65
|
+
"spec".rpmize.should == "%{gem_instdir}/spec"
|
66
|
+
"lib".rpmize.should == "%{gem_libdir}"
|
67
|
+
"%{gem_instdir}/foo".rpmize.should == "%{gem_instdir}/foo"
|
68
|
+
end
|
63
69
|
end
|
64
70
|
end # describe String
|
data/spec/gem_spec.rb
CHANGED
@@ -9,12 +9,20 @@ require 'polisher/gem'
|
|
9
9
|
|
10
10
|
module Polisher
|
11
11
|
describe Gem do
|
12
|
+
describe "#file_name" do
|
13
|
+
it "returns name-version.gem" do
|
14
|
+
expected = 'rails-4.0.0.gem'
|
15
|
+
Polisher::Gem.new(:name => 'rails', :version => '4.0.0')
|
16
|
+
.file_name.should == expected
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
12
20
|
describe "#initialize" do
|
13
21
|
it "sets gem attributes" do
|
14
|
-
gem =
|
15
|
-
|
16
|
-
|
17
|
-
|
22
|
+
gem = described_class.new :name => 'rails',
|
23
|
+
:version => '4.0.0',
|
24
|
+
:deps => %w(activesupport activerecord),
|
25
|
+
:dev_deps => ['rake']
|
18
26
|
gem.name.should == 'rails'
|
19
27
|
gem.version.should == '4.0.0'
|
20
28
|
gem.deps.should == ['activesupport', 'activerecord']
|
@@ -25,33 +33,67 @@ module Polisher
|
|
25
33
|
describe "#ignorable_file?" do
|
26
34
|
context "args matches an ignorable file" do
|
27
35
|
it "returns true" do
|
28
|
-
|
29
|
-
|
36
|
+
described_class.ignorable_file?('foo.gemspec').should be_true
|
37
|
+
described_class.ignorable_file?('Gemfile').should be_true
|
30
38
|
end
|
31
39
|
end
|
32
40
|
|
33
41
|
context "args does not match an ignorable file" do
|
34
42
|
it "returns false" do
|
35
|
-
|
36
|
-
|
43
|
+
described_class.ignorable_file?('.rvmra').should be_false
|
44
|
+
described_class.ignorable_file?('foo.gemspoc').should be_false
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
describe "#doc_file?" do
|
50
|
+
context "file is on doc file list" do
|
51
|
+
it "returns true" do
|
52
|
+
described_class.doc_file?('CHANGELOG').should be_true
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
context "file is not on doc file list" do
|
57
|
+
it "returns false" do
|
58
|
+
described_class.doc_file?('foobar.rb').should be_false
|
37
59
|
end
|
38
60
|
end
|
39
61
|
end
|
40
62
|
|
41
63
|
describe "#local_versions_for" do
|
42
|
-
|
43
|
-
|
64
|
+
before(:each) do
|
65
|
+
# XXX clear the cached version of the gem specification db
|
66
|
+
described_class.instance_variable_set(:@local_db, nil)
|
67
|
+
|
68
|
+
gem1 = ::Gem::Specification.new 'rake', '1.0'
|
69
|
+
gem2 = ::Gem::Specification.new 'rake', '2.0'
|
70
|
+
gem3 = ::Gem::Specification.new 'rails', '3.0'
|
71
|
+
::Gem::Specification.should_receive(:all).and_return([gem1, gem2, gem3])
|
72
|
+
|
73
|
+
@version1 = ::Gem::Version.new '1.0'
|
74
|
+
@version2 = ::Gem::Version.new '2.0'
|
75
|
+
end
|
76
|
+
|
77
|
+
it "returns versions of specified gem in local db" do
|
78
|
+
described_class.local_versions_for('rake').should == [@version1, @version2]
|
79
|
+
end
|
80
|
+
|
81
|
+
it "invokes cb with versions retrieved" do
|
82
|
+
cb = proc {}
|
83
|
+
cb.should_receive(:call).with(:local_gem, 'rake', [@version1, @version2])
|
84
|
+
described_class.local_versions_for('rake', &cb)
|
85
|
+
end
|
44
86
|
end
|
45
87
|
|
46
88
|
describe "#parse" do
|
47
89
|
it "returns new gem" do
|
48
|
-
gem =
|
49
|
-
gem.should be_an_instance_of(
|
90
|
+
gem = described_class.parse
|
91
|
+
gem.should be_an_instance_of(described_class)
|
50
92
|
end
|
51
93
|
|
52
94
|
it "parses gem from gem spec" do
|
53
95
|
spec = Polisher::Test::GEM_SPEC
|
54
|
-
gem =
|
96
|
+
gem = described_class.parse(:gemspec => spec[:path])
|
55
97
|
gem.name.should == spec[:name]
|
56
98
|
gem.version.should == spec[:version]
|
57
99
|
gem.deps.should == spec[:deps]
|
@@ -62,7 +104,7 @@ module Polisher
|
|
62
104
|
|
63
105
|
it "parses gem from metadata hash" do
|
64
106
|
gemj = Polisher::Test::GEM_JSON
|
65
|
-
gem =
|
107
|
+
gem = described_class.parse gemj[:json]
|
66
108
|
gem.name.should == gemj[:name]
|
67
109
|
gem.version.should == gemj[:version]
|
68
110
|
gem.deps.should == gemj[:deps]
|
@@ -70,45 +112,103 @@ module Polisher
|
|
70
112
|
end
|
71
113
|
end
|
72
114
|
|
115
|
+
describe "#remote_versions_for" do
|
116
|
+
it "retrieves versions from rubygems.org" do
|
117
|
+
curl = Curl::Easy.new
|
118
|
+
described_class.should_receive(:client)
|
119
|
+
.at_least(:once).and_return(curl)
|
120
|
+
curl.should_receive(:http_get)
|
121
|
+
|
122
|
+
# actual output too verbose, just including bits we need
|
123
|
+
curl.should_receive(:body_str)
|
124
|
+
.and_return([{'number' => 1.1}, {'number' => 2.2}].to_json)
|
125
|
+
described_class.remote_versions_for('polisher').should == [1.1, 2.2]
|
126
|
+
curl.url.should == "https://rubygems.org/api/v1/versions/polisher.json"
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
describe "#lastest_version_of" do
|
131
|
+
it "retrieves latests version of gem available on rubygems.org" do
|
132
|
+
described_class.should_receive(:remote_versions_for)
|
133
|
+
.with('polisher')
|
134
|
+
.and_return([2.2, 1.1])
|
135
|
+
described_class.latest_version_of('polisher').should == 2.2
|
136
|
+
end
|
137
|
+
end
|
73
138
|
|
74
139
|
describe "#download_gem" do
|
75
140
|
context "gem in GemCache" do
|
76
|
-
it "returns GemCache gem"
|
141
|
+
it "returns GemCache gem" do
|
142
|
+
gem = described_class.new
|
143
|
+
GemCache.should_receive(:get).with('polisher', '1.1')
|
144
|
+
.and_return(gem)
|
145
|
+
described_class.download_gem('polisher', '1.1').should == gem
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
it "uses curl to download gem" do
|
150
|
+
GemCache.should_receive(:get).and_return(nil)
|
151
|
+
curl = Curl::Easy.new
|
152
|
+
described_class.should_receive(:client)
|
153
|
+
.at_least(:once).and_return(curl)
|
154
|
+
curl.should_receive(:http_get)
|
155
|
+
curl.should_receive(:body_str).and_return('') # stub out body_str
|
156
|
+
|
157
|
+
described_class.download_gem 'polisher', '2.2'
|
158
|
+
curl.url.should == "https://rubygems.org/gems/polisher-2.2.gem"
|
159
|
+
end
|
160
|
+
|
161
|
+
it "sets gem in gem cache" do
|
162
|
+
GemCache.should_receive(:get).and_return(nil)
|
163
|
+
curl = Curl::Easy.new
|
164
|
+
described_class.should_receive(:client)
|
165
|
+
.at_least(:once).and_return(curl)
|
166
|
+
curl.stub(:http_get) # stub out http_get
|
167
|
+
curl.should_receive(:body_str).and_return('gem')
|
168
|
+
GemCache.should_receive(:set)
|
169
|
+
.with('polisher', '1.1', 'gem')
|
170
|
+
described_class.download_gem 'polisher', '1.1'
|
77
171
|
end
|
78
172
|
|
79
|
-
it "
|
80
|
-
|
81
|
-
|
173
|
+
it "returns downloaded gem binary contents" do
|
174
|
+
GemCache.should_receive(:get).and_return(nil)
|
175
|
+
curl = Curl::Easy.new
|
176
|
+
described_class.should_receive(:client)
|
177
|
+
.at_least(:once).and_return(curl)
|
178
|
+
curl.stub(:http_get) # stub out http_get
|
179
|
+
curl.should_receive(:body_str).and_return('gem')
|
180
|
+
described_class.download_gem('polisher', '1.1').should == 'gem'
|
181
|
+
end
|
82
182
|
end
|
83
183
|
|
84
184
|
describe "#download_gem_path" do
|
85
185
|
it "downloads gem" do
|
86
|
-
gem =
|
87
|
-
|
186
|
+
gem = described_class.new
|
187
|
+
described_class.should_receive(:download_gem)
|
88
188
|
gem.downloaded_gem_path
|
89
189
|
end
|
90
190
|
|
91
191
|
it "returns gem cache path for gem" do
|
92
192
|
# stub out d/l
|
93
|
-
gem =
|
94
|
-
|
95
|
-
Polisher::GemCache.should_receive(:path_for)
|
96
|
-
|
97
|
-
|
98
|
-
|
193
|
+
gem = described_class.new :name => 'rails', :version => '1.0'
|
194
|
+
described_class.should_receive(:download_gem)
|
195
|
+
Polisher::GemCache.should_receive(:path_for)
|
196
|
+
.with('rails', '1.0')
|
197
|
+
.at_least(:once)
|
198
|
+
.and_return('rails_path')
|
99
199
|
gem.downloaded_gem_path.should == 'rails_path'
|
100
200
|
end
|
101
201
|
end
|
102
202
|
|
103
203
|
describe "#gem_path" do
|
104
204
|
it "returns specified path" do
|
105
|
-
gem =
|
205
|
+
gem = described_class.new :path => 'gem_path'
|
106
206
|
gem.gem_path.should == 'gem_path'
|
107
207
|
end
|
108
208
|
|
109
209
|
context "specified path is null" do
|
110
210
|
it "returns downloaded gem path" do
|
111
|
-
gem =
|
211
|
+
gem = described_class.new
|
112
212
|
gem.should_receive(:downloaded_gem_path).and_return('gem_path')
|
113
213
|
gem.gem_path.should == 'gem_path'
|
114
214
|
end
|
@@ -126,39 +226,122 @@ module Polisher
|
|
126
226
|
end
|
127
227
|
|
128
228
|
describe "#file_paths" do
|
129
|
-
it "returns list of file paths in gem"
|
229
|
+
it "returns list of file paths in gem" do
|
230
|
+
gem = described_class.new
|
231
|
+
gem.should_receive(:each_file).and_yield('file1').and_yield('file2')
|
232
|
+
gem.file_paths.should == %w(file1 file2)
|
233
|
+
end
|
130
234
|
end
|
131
235
|
|
132
236
|
describe "#retrieve" do
|
133
|
-
before(:each) do
|
134
|
-
@local_gem = Polisher::Test::LOCAL_GEM
|
135
|
-
end
|
136
|
-
|
137
237
|
it "returns gem retrieved from rubygems" do
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
238
|
+
curl = Curl::Easy.new
|
239
|
+
curl.should_receive(:body_str).and_return('spec')
|
240
|
+
|
241
|
+
url = "https://rubygems.org/api/v1/gems/rails.json"
|
242
|
+
Curl::Easy.should_receive(:http_get).with(url).and_return(curl)
|
243
|
+
|
244
|
+
gem = described_class.new
|
245
|
+
described_class.should_receive(:parse).with('spec').and_return(gem)
|
246
|
+
|
247
|
+
described_class.retrieve('rails').should == gem
|
144
248
|
end
|
145
249
|
end
|
146
250
|
|
147
251
|
describe "#versions" do
|
148
|
-
it "looks up and returns versions
|
252
|
+
it "looks up and returns versions of gem" do
|
253
|
+
gem = described_class.new :name => 'rails'
|
254
|
+
Polisher::VersionChecker.should_receive(:versions_for)
|
255
|
+
.with('rails')
|
256
|
+
.and_return(:koji => ['1.1.1'])
|
257
|
+
gem.versions.should == {'rails' => {:koji => ['1.1.1']}}
|
258
|
+
end
|
149
259
|
|
150
260
|
context "recursive is true" do
|
151
|
-
it "
|
261
|
+
it "retrieves dependency versions" do
|
262
|
+
# stub out version checker
|
263
|
+
retrieved = {:koji => ['1.0']}
|
264
|
+
Polisher::VersionChecker.should_receive(:versions_for)
|
265
|
+
.and_return(retrieved)
|
266
|
+
|
267
|
+
versions = {}
|
268
|
+
gem = described_class.new :name => 'rails'
|
269
|
+
gem.should_receive(:dependency_versions)
|
270
|
+
.with(:recursive => true, :versions => {'rails' => retrieved})
|
271
|
+
.and_call_original
|
272
|
+
gem.versions(:recursive => true, :versions => versions)
|
273
|
+
.should == {'rails' => {:koji => ['1.0']}}
|
274
|
+
end
|
275
|
+
|
152
276
|
context "dev_deps is true" do
|
153
|
-
it "
|
277
|
+
it "retrieves dev dependency versions" do
|
278
|
+
# stub out version checker
|
279
|
+
retrieved = {:koji => ['1.0']}
|
280
|
+
Polisher::VersionChecker.should_receive(:versions_for)
|
281
|
+
.and_return(retrieved)
|
282
|
+
|
283
|
+
versions = {}
|
284
|
+
gem = described_class.new :name => 'rails'
|
285
|
+
gem.should_receive(:dependency_versions)
|
286
|
+
.with(:recursive => true, :dev_deps => true,
|
287
|
+
:versions => {'rails' => retrieved})
|
288
|
+
.and_call_original
|
289
|
+
gem.should_receive(:dependency_versions)
|
290
|
+
.with(:recursive => true, :dev => true, :dev_deps => true,
|
291
|
+
:versions => {'rails' => retrieved})
|
292
|
+
.and_call_original
|
293
|
+
gem.versions(:recursive => true, :dev_deps => true,
|
294
|
+
:versions => versions)
|
295
|
+
.should == {'rails' => {:koji => ['1.0']}}
|
296
|
+
end
|
297
|
+
end
|
298
|
+
end
|
299
|
+
end
|
300
|
+
|
301
|
+
describe "#dependency_versions" do
|
302
|
+
it "retrieves dependency versions" do
|
303
|
+
gem = described_class.new
|
304
|
+
gem.should_receive(:deps).and_return([::Gem::Dependency.new('rake')])
|
305
|
+
described_class.should_receive(:retrieve)
|
306
|
+
.with('rake').and_return(gem)
|
307
|
+
|
308
|
+
versions = {'rake' => {:koji => ['2.1']}}
|
309
|
+
gem.should_receive(:versions).and_return(versions)
|
310
|
+
gem.dependency_versions.should == versions
|
311
|
+
end
|
312
|
+
|
313
|
+
it "retrieves dev dependency versions" do
|
314
|
+
gem = described_class.new
|
315
|
+
gem.should_receive(:dev_deps).and_return([::Gem::Dependency.new('rake')])
|
316
|
+
described_class.should_receive(:retrieve)
|
317
|
+
.with('rake').and_return(gem)
|
318
|
+
|
319
|
+
versions = {'rake' => {:koji => ['2.1']}}
|
320
|
+
gem.should_receive(:versions).and_return(versions)
|
321
|
+
gem.dependency_versions(:dev => true).should == versions
|
322
|
+
end
|
323
|
+
|
324
|
+
context "error during gem or version retrieval" do
|
325
|
+
it "sets version to 'unknown'" do
|
326
|
+
gem = described_class.new
|
327
|
+
gem.should_receive(:deps).and_return([::Gem::Dependency.new('rake')])
|
328
|
+
described_class.should_receive(:retrieve)
|
329
|
+
.with('rake').and_raise(RuntimeError)
|
330
|
+
|
331
|
+
versions = {:all => [:unknown]}
|
332
|
+
gem.should_not_receive(:versions)
|
333
|
+
Polisher::VersionChecker.should_receive(:unknown_version)
|
334
|
+
.with(:all, 'rake')
|
335
|
+
.and_return(versions)
|
336
|
+
gem.dependency_versions.should == {'rake' => versions}
|
154
337
|
end
|
155
338
|
end
|
156
339
|
end
|
157
340
|
|
158
341
|
describe "#diff" do
|
159
342
|
before(:each) do
|
160
|
-
@gem1 =
|
161
|
-
@gem2 =
|
343
|
+
@gem1 = described_class.new
|
344
|
+
@gem2 = described_class.new
|
162
345
|
|
163
346
|
@result = AwesomeSpawn::CommandResult.new '', 'diff_out', '', 0
|
164
347
|
end
|
@@ -166,9 +349,9 @@ module Polisher
|
|
166
349
|
it "runs diff against unpacked local and other gems and returns output" do
|
167
350
|
@gem1.should_receive(:unpack).and_return('dir1')
|
168
351
|
@gem2.should_receive(:unpack).and_return('dir2')
|
169
|
-
AwesomeSpawn.should_receive(:run)
|
170
|
-
with("#{Polisher::Gem
|
171
|
-
and_return(@result)
|
352
|
+
AwesomeSpawn.should_receive(:run)
|
353
|
+
.with("#{Polisher::Gem.diff_cmd} -r dir1 dir2")
|
354
|
+
.and_return(@result)
|
172
355
|
@gem1.diff(@gem2).should == @result.output
|
173
356
|
end
|
174
357
|
|