librarian 0.0.24 → 0.0.25
Sign up to get free protection for your applications and to get access to all the features.
- data/.travis.yml +7 -1
- data/CHANGELOG.md +19 -1
- data/README.md +2 -9
- data/Rakefile +0 -11
- data/lib/librarian.rb +0 -8
- data/lib/librarian/action/base.rb +6 -4
- data/lib/librarian/chef/cli.rb +1 -1
- data/lib/librarian/chef/integration/knife.rb +4 -0
- data/lib/librarian/chef/manifest_reader.rb +14 -2
- data/lib/librarian/chef/source/local.rb +2 -0
- data/lib/librarian/chef/source/site.rb +49 -41
- data/lib/librarian/cli.rb +32 -17
- data/lib/librarian/dependency.rb +1 -9
- data/lib/librarian/dsl.rb +6 -3
- data/lib/librarian/dsl/receiver.rb +10 -12
- data/lib/librarian/dsl/target.rb +5 -10
- data/lib/librarian/environment.rb +41 -2
- data/lib/librarian/lockfile.rb +0 -4
- data/lib/librarian/lockfile/compiler.rb +0 -4
- data/lib/librarian/lockfile/parser.rb +0 -4
- data/lib/librarian/logger.rb +46 -0
- data/lib/librarian/manifest.rb +1 -9
- data/lib/librarian/resolution.rb +5 -3
- data/lib/librarian/resolver.rb +6 -1
- data/lib/librarian/resolver/implementation.rb +18 -8
- data/lib/librarian/source/git.rb +2 -0
- data/lib/librarian/source/git/repository.rb +9 -5
- data/lib/librarian/source/local.rb +12 -2
- data/lib/librarian/spec.rb +4 -4
- data/lib/librarian/spec_change_set.rb +7 -4
- data/lib/librarian/specfile.rb +3 -8
- data/lib/librarian/version.rb +1 -1
- data/librarian.gemspec +3 -9
- data/spec/functional/chef/cli_spec.rb +194 -0
- data/spec/functional/chef/source/site_spec.rb +11 -10
- data/spec/functional/source/git/repository_spec.rb +1 -1
- data/spec/support/cli_macro.rb +122 -0
- data/spec/support/with_env_macro.rb +20 -0
- data/spec/unit/config/database_spec.rb +2 -2
- data/spec/unit/dependency_spec.rb +6 -0
- data/spec/unit/dsl_spec.rb +16 -37
- data/spec/unit/environment_spec.rb +95 -0
- data/spec/unit/manifest_spec.rb +6 -0
- data/spec/unit/resolver_spec.rb +41 -0
- metadata +7 -42
- data/config/cucumber.yaml +0 -1
- data/features/chef/cli/init.feature +0 -11
- data/features/chef/cli/install.feature +0 -64
- data/features/chef/cli/show.feature +0 -77
- data/features/chef/cli/version.feature +0 -11
- data/features/support/env.rb +0 -9
- data/lib/librarian/helpers/debug.rb +0 -35
@@ -0,0 +1,20 @@
|
|
1
|
+
module WithEnvMacro
|
2
|
+
|
3
|
+
module ClassMethods
|
4
|
+
|
5
|
+
def with_env(new)
|
6
|
+
old = Hash[new.map{|k, v| [k, ENV[k]]}]
|
7
|
+
|
8
|
+
before { ENV.update(new) }
|
9
|
+
after { ENV.update(old) }
|
10
|
+
end
|
11
|
+
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
|
16
|
+
def self.included(base)
|
17
|
+
base.extend(ClassMethods)
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
@@ -10,8 +10,8 @@ describe Librarian::Config::Database do
|
|
10
10
|
include FakeFS::SpecHelpers
|
11
11
|
|
12
12
|
def write_yaml!(path, *yamlables)
|
13
|
-
|
14
|
-
|
13
|
+
path = Pathname(path)
|
14
|
+
path.dirname.mkpath unless path.dirname.directory?
|
15
15
|
File.open(path, "wb"){|f| yamlables.each{|y| YAML.dump(y, f)}}
|
16
16
|
end
|
17
17
|
|
data/spec/unit/dsl_spec.rb
CHANGED
@@ -19,27 +19,6 @@ module Librarian
|
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
22
|
-
context "a single dependency but no applicable source" do
|
23
|
-
|
24
|
-
it "should not run without any sources" do
|
25
|
-
expect do
|
26
|
-
env.dsl do
|
27
|
-
dep 'dependency-1'
|
28
|
-
end
|
29
|
-
end.to raise_error(Dsl::Error)
|
30
|
-
end
|
31
|
-
|
32
|
-
it "should not run when a block source is defined but the dependency is outside the block" do
|
33
|
-
expect do
|
34
|
-
env.dsl do
|
35
|
-
src 'source-1' do end
|
36
|
-
dep 'dependency-1'
|
37
|
-
end
|
38
|
-
end.to raise_error(Dsl::Error)
|
39
|
-
end
|
40
|
-
|
41
|
-
end
|
42
|
-
|
43
22
|
context "a simple specfile - a single source, a single dependency, no transitive dependencies" do
|
44
23
|
|
45
24
|
it "should run with a hash source" do
|
@@ -50,7 +29,7 @@ module Librarian
|
|
50
29
|
spec.dependencies.should_not be_empty
|
51
30
|
spec.dependencies.first.name.should == 'dependency-1'
|
52
31
|
spec.dependencies.first.source.name.should == 'source-1'
|
53
|
-
spec.
|
32
|
+
spec.sources.should be_empty
|
54
33
|
end
|
55
34
|
|
56
35
|
it "should run with a shortcut source" do
|
@@ -61,7 +40,7 @@ module Librarian
|
|
61
40
|
spec.dependencies.should_not be_empty
|
62
41
|
spec.dependencies.first.name.should == 'dependency-1'
|
63
42
|
spec.dependencies.first.source.name.should == 'source-a'
|
64
|
-
spec.
|
43
|
+
spec.sources.should be_empty
|
65
44
|
end
|
66
45
|
|
67
46
|
it "should run with a block hash source" do
|
@@ -73,7 +52,7 @@ module Librarian
|
|
73
52
|
spec.dependencies.should_not be_empty
|
74
53
|
spec.dependencies.first.name.should == 'dependency-1'
|
75
54
|
spec.dependencies.first.source.name.should == 'source-1'
|
76
|
-
spec.
|
55
|
+
spec.sources.should be_empty
|
77
56
|
end
|
78
57
|
|
79
58
|
it "should run with a block named source" do
|
@@ -85,7 +64,7 @@ module Librarian
|
|
85
64
|
spec.dependencies.should_not be_empty
|
86
65
|
spec.dependencies.first.name.should == 'dependency-1'
|
87
66
|
spec.dependencies.first.source.name.should == 'source-1'
|
88
|
-
spec.
|
67
|
+
spec.sources.should be_empty
|
89
68
|
end
|
90
69
|
|
91
70
|
it "should run with a default hash source" do
|
@@ -96,8 +75,8 @@ module Librarian
|
|
96
75
|
spec.dependencies.should_not be_empty
|
97
76
|
spec.dependencies.first.name.should == 'dependency-1'
|
98
77
|
spec.dependencies.first.source.name.should == 'source-1'
|
99
|
-
spec.
|
100
|
-
spec.dependencies.first.source.should == spec.
|
78
|
+
spec.sources.should_not be_empty
|
79
|
+
spec.dependencies.first.source.should == spec.sources.first
|
101
80
|
end
|
102
81
|
|
103
82
|
it "should run with a default named source" do
|
@@ -108,8 +87,8 @@ module Librarian
|
|
108
87
|
spec.dependencies.should_not be_empty
|
109
88
|
spec.dependencies.first.name.should == 'dependency-1'
|
110
89
|
spec.dependencies.first.source.name.should == 'source-1'
|
111
|
-
spec.
|
112
|
-
spec.dependencies.first.source.should == spec.
|
90
|
+
spec.sources.should_not be_empty
|
91
|
+
spec.dependencies.first.source.should == spec.sources.first
|
113
92
|
end
|
114
93
|
|
115
94
|
it "should run with a default shortcut source" do
|
@@ -120,8 +99,8 @@ module Librarian
|
|
120
99
|
spec.dependencies.should_not be_empty
|
121
100
|
spec.dependencies.first.name.should == 'dependency-1'
|
122
101
|
spec.dependencies.first.source.name.should == 'source-a'
|
123
|
-
spec.
|
124
|
-
spec.dependencies.first.source.should == spec.
|
102
|
+
spec.sources.should_not be_empty
|
103
|
+
spec.dependencies.first.source.should == spec.sources.first
|
125
104
|
end
|
126
105
|
|
127
106
|
it "should run with a shortcut source hash definition" do
|
@@ -132,7 +111,7 @@ module Librarian
|
|
132
111
|
spec.dependencies.should_not be_empty
|
133
112
|
spec.dependencies.first.name.should == 'dependency-1'
|
134
113
|
spec.dependencies.first.source.name.should == 'source-b'
|
135
|
-
spec.
|
114
|
+
spec.sources.should be_empty
|
136
115
|
end
|
137
116
|
|
138
117
|
it "should run with a shortcut source block definition" do
|
@@ -143,7 +122,7 @@ module Librarian
|
|
143
122
|
spec.dependencies.should_not be_empty
|
144
123
|
spec.dependencies.first.name.should == 'dependency-1'
|
145
124
|
spec.dependencies.first.source.name.should == 'source-b'
|
146
|
-
spec.
|
125
|
+
spec.sources.should be_empty
|
147
126
|
end
|
148
127
|
|
149
128
|
it "should run with a default shortcut source hash definition" do
|
@@ -155,8 +134,8 @@ module Librarian
|
|
155
134
|
spec.dependencies.should_not be_empty
|
156
135
|
spec.dependencies.first.name.should == 'dependency-1'
|
157
136
|
spec.dependencies.first.source.name.should == 'source-b'
|
158
|
-
spec.
|
159
|
-
spec.
|
137
|
+
spec.sources.should_not be_empty
|
138
|
+
spec.sources.first.name.should == 'source-b'
|
160
139
|
end
|
161
140
|
|
162
141
|
it "should run with a default shortcut source block definition" do
|
@@ -168,8 +147,8 @@ module Librarian
|
|
168
147
|
spec.dependencies.should_not be_empty
|
169
148
|
spec.dependencies.first.name.should == 'dependency-1'
|
170
149
|
spec.dependencies.first.source.name.should == 'source-b'
|
171
|
-
spec.
|
172
|
-
spec.
|
150
|
+
spec.sources.should_not be_empty
|
151
|
+
spec.sources.first.name.should == 'source-b'
|
173
152
|
end
|
174
153
|
|
175
154
|
end
|
@@ -1,9 +1,104 @@
|
|
1
1
|
require "librarian/environment"
|
2
2
|
|
3
|
+
require "support/with_env_macro"
|
4
|
+
|
3
5
|
module Librarian
|
4
6
|
describe Environment do
|
7
|
+
include WithEnvMacro
|
5
8
|
|
6
9
|
let(:env) { described_class.new }
|
7
10
|
|
11
|
+
describe "#http_proxy_uri" do
|
12
|
+
|
13
|
+
context "sanity" do
|
14
|
+
with_env "http_proxy" => nil
|
15
|
+
|
16
|
+
it "should have a nil http proxy uri" do
|
17
|
+
env.http_proxy_uri.should be_nil
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
context "with a complex proxy" do
|
22
|
+
with_env "http_proxy" => "admin:secret@example.com"
|
23
|
+
|
24
|
+
it "should have the expcted http proxy uri" do
|
25
|
+
env.http_proxy_uri.should == URI("http://admin:secret@example.com")
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should have the expected host" do
|
29
|
+
env.http_proxy_uri.host.should == "example.com"
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should have the expected user" do
|
33
|
+
env.http_proxy_uri.user.should == "admin"
|
34
|
+
end
|
35
|
+
|
36
|
+
it "should have the expected password" do
|
37
|
+
env.http_proxy_uri.password.should == "secret"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
context "with a split proxy" do
|
42
|
+
with_env "http_proxy" => "example.com",
|
43
|
+
"http_proxy_user" => "admin",
|
44
|
+
"http_proxy_pass" => "secret"
|
45
|
+
|
46
|
+
it "should have the expcted http proxy uri" do
|
47
|
+
env.http_proxy_uri.should == URI("http://admin:secret@example.com")
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
|
53
|
+
describe "#net_http_class" do
|
54
|
+
|
55
|
+
context "sanity" do
|
56
|
+
with_env "http_proxy" => nil
|
57
|
+
|
58
|
+
it "should have the normal class" do
|
59
|
+
env.net_http_class.should be Net::HTTP
|
60
|
+
end
|
61
|
+
|
62
|
+
it "should not be marked as a proxy class" do
|
63
|
+
env.net_http_class.should_not be_proxy_class
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
context "with a complex proxy" do
|
68
|
+
with_env "http_proxy" => "admin:secret@example.com"
|
69
|
+
|
70
|
+
it "should not have the normal class" do
|
71
|
+
env.net_http_class.should_not be Net::HTTP
|
72
|
+
end
|
73
|
+
|
74
|
+
it "should have a subclass the normal class" do
|
75
|
+
env.net_http_class.should < Net::HTTP
|
76
|
+
end
|
77
|
+
|
78
|
+
it "should be marked as a proxy class" do
|
79
|
+
env.net_http_class.should be_proxy_class
|
80
|
+
end
|
81
|
+
|
82
|
+
it "should have the expected proxy attributes" do
|
83
|
+
http = env.net_http_class.new("www.kernel.org")
|
84
|
+
expected_attributes = {
|
85
|
+
"host" => env.http_proxy_uri.host,
|
86
|
+
"port" => env.http_proxy_uri.port,
|
87
|
+
"user" => env.http_proxy_uri.user,
|
88
|
+
"pass" => env.http_proxy_uri.password
|
89
|
+
}
|
90
|
+
actual_attributes = {
|
91
|
+
"host" => http.proxy_address,
|
92
|
+
"port" => http.proxy_port,
|
93
|
+
"user" => http.proxy_user,
|
94
|
+
"pass" => http.proxy_pass,
|
95
|
+
}
|
96
|
+
|
97
|
+
actual_attributes.should == expected_attributes
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
end
|
102
|
+
|
8
103
|
end
|
9
104
|
end
|
data/spec/unit/manifest_spec.rb
CHANGED
data/spec/unit/resolver_spec.rb
CHANGED
@@ -61,6 +61,47 @@ module Librarian
|
|
61
61
|
|
62
62
|
end
|
63
63
|
|
64
|
+
context "a specfile with a dep in multiple sources" do
|
65
|
+
|
66
|
+
before do
|
67
|
+
env.registry :clear => true do
|
68
|
+
source 'source-1' do
|
69
|
+
spec 'butter', '1.0'
|
70
|
+
spec 'butter', '1.1'
|
71
|
+
end
|
72
|
+
source 'source-2' do
|
73
|
+
spec 'butter', '1.0'
|
74
|
+
spec 'butter', '1.1'
|
75
|
+
end
|
76
|
+
source 'source-3' do
|
77
|
+
spec 'butter', '1.0'
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
let(:spec) do
|
83
|
+
env.dsl do
|
84
|
+
src 'source-1'
|
85
|
+
src 'source-2'
|
86
|
+
dep 'butter', '>= 1.1'
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
it "should have the expected number of sources" do
|
91
|
+
spec.should have(2).sources
|
92
|
+
end
|
93
|
+
|
94
|
+
let(:resolution) { resolver.resolve(spec) }
|
95
|
+
|
96
|
+
specify { resolution.should be_correct }
|
97
|
+
|
98
|
+
it "should have the manifest from the final source with a matching manifest" do
|
99
|
+
manifest = resolution.manifests.find{|m| m.name == "butter"}
|
100
|
+
manifest.source.name.should == "source-2"
|
101
|
+
end
|
102
|
+
|
103
|
+
end
|
104
|
+
|
64
105
|
context "a specfile with a dep depending on a nonexistent dep" do
|
65
106
|
|
66
107
|
before do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: librarian
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.25
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-10-12 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: thor
|
@@ -59,38 +59,6 @@ dependencies:
|
|
59
59
|
- - ! '>='
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '0'
|
62
|
-
- !ruby/object:Gem::Dependency
|
63
|
-
name: cucumber
|
64
|
-
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
|
-
requirements:
|
67
|
-
- - ! '>='
|
68
|
-
- !ruby/object:Gem::Version
|
69
|
-
version: '0'
|
70
|
-
type: :development
|
71
|
-
prerelease: false
|
72
|
-
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
|
-
requirements:
|
75
|
-
- - ! '>='
|
76
|
-
- !ruby/object:Gem::Version
|
77
|
-
version: '0'
|
78
|
-
- !ruby/object:Gem::Dependency
|
79
|
-
name: aruba
|
80
|
-
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
|
-
requirements:
|
83
|
-
- - ! '>='
|
84
|
-
- !ruby/object:Gem::Version
|
85
|
-
version: '0'
|
86
|
-
type: :development
|
87
|
-
prerelease: false
|
88
|
-
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
|
-
requirements:
|
91
|
-
- - ! '>='
|
92
|
-
- !ruby/object:Gem::Version
|
93
|
-
version: '0'
|
94
62
|
- !ruby/object:Gem::Dependency
|
95
63
|
name: webmock
|
96
64
|
requirement: !ruby/object:Gem::Requirement
|
@@ -190,12 +158,6 @@ files:
|
|
190
158
|
- Rakefile
|
191
159
|
- bin/librarian-chef
|
192
160
|
- bin/librarian-mock
|
193
|
-
- config/cucumber.yaml
|
194
|
-
- features/chef/cli/init.feature
|
195
|
-
- features/chef/cli/install.feature
|
196
|
-
- features/chef/cli/show.feature
|
197
|
-
- features/chef/cli/version.feature
|
198
|
-
- features/support/env.rb
|
199
161
|
- lib/librarian.rb
|
200
162
|
- lib/librarian/action.rb
|
201
163
|
- lib/librarian/action/base.rb
|
@@ -231,10 +193,10 @@ files:
|
|
231
193
|
- lib/librarian/environment.rb
|
232
194
|
- lib/librarian/error.rb
|
233
195
|
- lib/librarian/helpers.rb
|
234
|
-
- lib/librarian/helpers/debug.rb
|
235
196
|
- lib/librarian/lockfile.rb
|
236
197
|
- lib/librarian/lockfile/compiler.rb
|
237
198
|
- lib/librarian/lockfile/parser.rb
|
199
|
+
- lib/librarian/logger.rb
|
238
200
|
- lib/librarian/manifest.rb
|
239
201
|
- lib/librarian/manifest_set.rb
|
240
202
|
- lib/librarian/mock.rb
|
@@ -260,9 +222,12 @@ files:
|
|
260
222
|
- lib/librarian/ui.rb
|
261
223
|
- lib/librarian/version.rb
|
262
224
|
- librarian.gemspec
|
225
|
+
- spec/functional/chef/cli_spec.rb
|
263
226
|
- spec/functional/chef/source/git_spec.rb
|
264
227
|
- spec/functional/chef/source/site_spec.rb
|
265
228
|
- spec/functional/source/git/repository_spec.rb
|
229
|
+
- spec/support/cli_macro.rb
|
230
|
+
- spec/support/with_env_macro.rb
|
266
231
|
- spec/unit/action/base_spec.rb
|
267
232
|
- spec/unit/action/clean_spec.rb
|
268
233
|
- spec/unit/action/ensure_spec.rb
|
@@ -293,7 +258,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
293
258
|
version: '0'
|
294
259
|
segments:
|
295
260
|
- 0
|
296
|
-
hash:
|
261
|
+
hash: 3137632899221484598
|
297
262
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
298
263
|
none: false
|
299
264
|
requirements:
|