librarian 0.0.8 → 0.0.9
Sign up to get free protection for your applications and to get access to all the features.
- data/.rspec +0 -1
- data/CHANGELOG.md +5 -0
- data/lib/librarian/chef/source/site.rb +8 -3
- data/lib/librarian/lockfile/parser.rb +2 -1
- data/lib/librarian/version.rb +1 -1
- data/spec/{chef/git_source_spec.rb → functional/chef/source/git_spec.rb} +70 -59
- data/spec/functional/chef/source/site_spec.rb +156 -0
- data/spec/{dsl_spec.rb → unit/dsl_spec.rb} +0 -0
- data/spec/unit/lockfile_spec.rb +54 -0
- data/spec/{resolver_spec.rb → unit/resolver_spec.rb} +0 -0
- data/spec/{spec_change_set_spec.rb → unit/spec_change_set_spec.rb} +0 -0
- metadata +22 -23
- data/spec/chef/site_source_spec.rb +0 -120
- data/spec/lockfile_spec.rb +0 -44
- data/spec/meta/requires_spec.rb +0 -27
data/.rspec
CHANGED
data/CHANGELOG.md
CHANGED
@@ -257,9 +257,14 @@ module Librarian
|
|
257
257
|
version_package_cache_path = version_package_cache_path(dependency, version_uri)
|
258
258
|
unless version_package_cache_path.exist?
|
259
259
|
dependency_cache_path = dependency_cache_path(dependency)
|
260
|
-
|
261
|
-
|
262
|
-
|
260
|
+
Process.waitpid2(fork do
|
261
|
+
$stdin.reopen("/dev/null")
|
262
|
+
$stdout.reopen("/dev/null")
|
263
|
+
$stderr.reopen("/dev/null")
|
264
|
+
Dir.chdir(dependency_cache_path)
|
265
|
+
exec("tar", "-xzf", version_archive_cache_path.to_s)
|
266
|
+
end)
|
267
|
+
raise StandardError, "Caching #{version_uri} failed with #{$?.inspect}!" unless $?.success?
|
263
268
|
version_unpacked_temp_path = dependency_cache_path.join(dependency.name)
|
264
269
|
FileUtils.move(version_unpacked_temp_path, version_package_cache_path)
|
265
270
|
end
|
@@ -2,6 +2,7 @@ require 'librarian/helpers/debug'
|
|
2
2
|
|
3
3
|
require 'librarian/manifest'
|
4
4
|
require 'librarian/dependency'
|
5
|
+
require 'librarian/manifest_set'
|
5
6
|
|
6
7
|
module Librarian
|
7
8
|
class Lockfile
|
@@ -90,7 +91,7 @@ module Librarian
|
|
90
91
|
dependencies
|
91
92
|
)
|
92
93
|
end
|
93
|
-
|
94
|
+
ManifestSet.sort(manifests)
|
94
95
|
end
|
95
96
|
|
96
97
|
def dsl_class
|
data/lib/librarian/version.rb
CHANGED
@@ -10,33 +10,42 @@ module Librarian
|
|
10
10
|
module Source
|
11
11
|
describe Git do
|
12
12
|
|
13
|
-
project_path
|
14
|
-
|
15
|
-
|
13
|
+
let(:project_path) do
|
14
|
+
project_path = Pathname.new(__FILE__).expand_path
|
15
|
+
project_path = project_path.dirname until project_path.join("Rakefile").exist?
|
16
|
+
project_path
|
17
|
+
end
|
18
|
+
let(:tmp_path) { project_path.join("tmp/spec/chef/git-source") }
|
16
19
|
|
17
|
-
cookbooks_path
|
20
|
+
let(:cookbooks_path) { tmp_path.join("cookbooks") }
|
18
21
|
|
19
22
|
context "a single dependency with a git source" do
|
20
23
|
|
21
|
-
sample_path
|
22
|
-
sample_metadata
|
23
|
-
|
24
|
-
|
24
|
+
let(:sample_path) { tmp_path.join("sample") }
|
25
|
+
let(:sample_metadata) do
|
26
|
+
Helpers.strip_heredoc(<<-METADATA)
|
27
|
+
version "0.6.5"
|
28
|
+
METADATA
|
29
|
+
end
|
25
30
|
|
26
|
-
first_sample_path
|
27
|
-
first_sample_metadata
|
28
|
-
|
29
|
-
|
31
|
+
let(:first_sample_path) { cookbooks_path.join("first-sample") }
|
32
|
+
let(:first_sample_metadata) do
|
33
|
+
Helpers.strip_heredoc(<<-METADATA)
|
34
|
+
version "3.2.1"
|
35
|
+
METADATA
|
36
|
+
end
|
30
37
|
|
31
|
-
second_sample_path
|
32
|
-
second_sample_metadata
|
33
|
-
|
34
|
-
|
38
|
+
let(:second_sample_path) { cookbooks_path.join("second-sample") }
|
39
|
+
let(:second_sample_metadata) do
|
40
|
+
Helpers.strip_heredoc(<<-METADATA)
|
41
|
+
version "4.3.2"
|
42
|
+
METADATA
|
43
|
+
end
|
35
44
|
|
36
45
|
before :all do
|
37
46
|
sample_path.rmtree if sample_path.exist?
|
38
47
|
sample_path.mkpath
|
39
|
-
sample_path.join(
|
48
|
+
sample_path.join("metadata.rb").open("wb") { |f| f.write(sample_metadata) }
|
40
49
|
Dir.chdir(sample_path) do
|
41
50
|
`git init`
|
42
51
|
`git add metadata.rb`
|
@@ -46,9 +55,9 @@ module Librarian
|
|
46
55
|
cookbooks_path.rmtree if cookbooks_path.exist?
|
47
56
|
cookbooks_path.mkpath
|
48
57
|
first_sample_path.mkpath
|
49
|
-
first_sample_path.join(
|
58
|
+
first_sample_path.join("metadata.rb").open("wb") { |f| f.write(first_sample_metadata) }
|
50
59
|
second_sample_path.mkpath
|
51
|
-
second_sample_path.join(
|
60
|
+
second_sample_path.join("metadata.rb").open("wb") { |f| f.write(second_sample_metadata) }
|
52
61
|
Dir.chdir(cookbooks_path) do
|
53
62
|
`git init`
|
54
63
|
`git add .`
|
@@ -57,79 +66,79 @@ module Librarian
|
|
57
66
|
end
|
58
67
|
|
59
68
|
it "should resolve" do
|
60
|
-
repo_path = tmp_path.join(
|
69
|
+
repo_path = tmp_path.join("repo/resolve")
|
61
70
|
repo_path.rmtree if repo_path.exist?
|
62
71
|
repo_path.mkpath
|
63
|
-
repo_path.join(
|
72
|
+
repo_path.join("cookbooks").mkpath
|
64
73
|
cheffile = Helpers.strip_heredoc(<<-CHEFFILE)
|
65
74
|
#!/usr/bin/env ruby
|
66
75
|
cookbook "sample", :git => #{sample_path.to_s.inspect}
|
67
76
|
CHEFFILE
|
68
|
-
repo_path.join(
|
77
|
+
repo_path.join("Cheffile").open("wb") { |f| f.write(cheffile) }
|
69
78
|
Chef.stub!(:project_path) { repo_path }
|
70
79
|
|
71
80
|
Chef.resolve!
|
72
|
-
repo_path.join(
|
73
|
-
repo_path.join(
|
81
|
+
repo_path.join("Cheffile.lock").should exist
|
82
|
+
repo_path.join("cookbooks/sample").should_not exist
|
74
83
|
end
|
75
84
|
|
76
85
|
it "should install" do
|
77
|
-
repo_path = tmp_path.join(
|
86
|
+
repo_path = tmp_path.join("repo/install")
|
78
87
|
repo_path.rmtree if repo_path.exist?
|
79
88
|
repo_path.mkpath
|
80
|
-
repo_path.join(
|
89
|
+
repo_path.join("cookbooks").mkpath
|
81
90
|
cheffile = Helpers.strip_heredoc(<<-CHEFFILE)
|
82
91
|
#!/usr/bin/env ruby
|
83
92
|
cookbook "sample", :git => #{sample_path.to_s.inspect}
|
84
93
|
CHEFFILE
|
85
|
-
repo_path.join(
|
94
|
+
repo_path.join("Cheffile").open("wb") { |f| f.write(cheffile) }
|
86
95
|
Chef.stub!(:project_path) { repo_path }
|
87
96
|
|
88
97
|
Chef.install!
|
89
|
-
repo_path.join(
|
90
|
-
repo_path.join(
|
91
|
-
repo_path.join(
|
98
|
+
repo_path.join("Cheffile.lock").should exist
|
99
|
+
repo_path.join("cookbooks/sample").should exist
|
100
|
+
repo_path.join("cookbooks/sample/metadata.rb").should exist
|
92
101
|
end
|
93
102
|
|
94
103
|
it "should resolve and separately install" do
|
95
|
-
repo_path = tmp_path.join(
|
104
|
+
repo_path = tmp_path.join("repo/resolve-install")
|
96
105
|
repo_path.rmtree if repo_path.exist?
|
97
106
|
repo_path.mkpath
|
98
|
-
repo_path.join(
|
107
|
+
repo_path.join("cookbooks").mkpath
|
99
108
|
cheffile = Helpers.strip_heredoc(<<-CHEFFILE)
|
100
109
|
#!/usr/bin/env ruby
|
101
110
|
cookbook "sample", :git => #{sample_path.to_s.inspect}
|
102
111
|
CHEFFILE
|
103
|
-
repo_path.join(
|
112
|
+
repo_path.join("Cheffile").open("wb") { |f| f.write(cheffile) }
|
104
113
|
Chef.stub!(:project_path) { repo_path }
|
105
114
|
|
106
115
|
Chef.resolve!
|
107
|
-
repo_path.join(
|
116
|
+
repo_path.join("tmp").rmtree if repo_path.join("tmp").exist?
|
108
117
|
Chef.install!
|
109
|
-
repo_path.join(
|
110
|
-
repo_path.join(
|
118
|
+
repo_path.join("cookbooks/sample").should exist
|
119
|
+
repo_path.join("cookbooks/sample/metadata.rb").should exist
|
111
120
|
end
|
112
121
|
|
113
122
|
it "should resolve, change, and resolve" do
|
114
|
-
repo_path = tmp_path.join(
|
123
|
+
repo_path = tmp_path.join("repo/resolve-update")
|
115
124
|
repo_path.rmtree if repo_path.exist?
|
116
125
|
repo_path.mkpath
|
117
|
-
repo_path.join(
|
126
|
+
repo_path.join("cookbooks").mkpath
|
118
127
|
cheffile = Helpers.strip_heredoc(<<-CHEFFILE)
|
119
128
|
git #{cookbooks_path.to_s.inspect}
|
120
129
|
cookbook "first-sample"
|
121
130
|
CHEFFILE
|
122
|
-
repo_path.join(
|
131
|
+
repo_path.join("Cheffile").open("wb") { |f| f.write(cheffile) }
|
123
132
|
Chef.stub!(:project_path) { repo_path }
|
124
133
|
Chef.resolve!
|
125
|
-
repo_path.join(
|
134
|
+
repo_path.join("Cheffile.lock").should exist
|
126
135
|
|
127
136
|
cheffile = Helpers.strip_heredoc(<<-CHEFFILE)
|
128
137
|
git #{cookbooks_path.to_s.inspect}
|
129
138
|
cookbook "first-sample"
|
130
139
|
cookbook "second-sample"
|
131
140
|
CHEFFILE
|
132
|
-
repo_path.join(
|
141
|
+
repo_path.join("Cheffile").open("wb") { |f| f.write(cheffile) }
|
133
142
|
Chef.stub!(:project_path) { repo_path }
|
134
143
|
Chef.resolve!
|
135
144
|
end
|
@@ -138,17 +147,19 @@ module Librarian
|
|
138
147
|
|
139
148
|
context "with a path" do
|
140
149
|
|
141
|
-
git_path
|
142
|
-
sample_path
|
143
|
-
sample_metadata
|
144
|
-
|
145
|
-
|
150
|
+
let(:git_path) { tmp_path.join("big-git-repo") }
|
151
|
+
let(:sample_path) { git_path.join("buttercup") }
|
152
|
+
let(:sample_metadata) do
|
153
|
+
Helpers.strip_heredoc(<<-METADATA)
|
154
|
+
version "0.6.5"
|
155
|
+
METADATA
|
156
|
+
end
|
146
157
|
|
147
158
|
before :all do
|
148
159
|
git_path.rmtree if git_path.exist?
|
149
160
|
git_path.mkpath
|
150
161
|
sample_path.mkpath
|
151
|
-
sample_path.join(
|
162
|
+
sample_path.join("metadata.rb").open("wb") { |f| f.write(sample_metadata) }
|
152
163
|
Dir.chdir(git_path) do
|
153
164
|
`git init`
|
154
165
|
`git add .`
|
@@ -158,16 +169,16 @@ module Librarian
|
|
158
169
|
|
159
170
|
context "if no path option is given" do
|
160
171
|
it "should not resolve" do
|
161
|
-
repo_path = tmp_path.join(
|
172
|
+
repo_path = tmp_path.join("repo/resolve")
|
162
173
|
repo_path.rmtree if repo_path.exist?
|
163
174
|
repo_path.mkpath
|
164
|
-
repo_path.join(
|
175
|
+
repo_path.join("cookbooks").mkpath
|
165
176
|
cheffile = Helpers.strip_heredoc(<<-CHEFFILE)
|
166
177
|
#!/usr/bin/env ruby
|
167
178
|
cookbook "sample",
|
168
179
|
:git => #{git_path.to_s.inspect}
|
169
180
|
CHEFFILE
|
170
|
-
repo_path.join(
|
181
|
+
repo_path.join("Cheffile").open("wb") { |f| f.write(cheffile) }
|
171
182
|
Chef.stub!(:project_path) { repo_path }
|
172
183
|
|
173
184
|
expect{ Chef.resolve! }.to raise_error
|
@@ -176,17 +187,17 @@ module Librarian
|
|
176
187
|
|
177
188
|
context "if the path option is wrong" do
|
178
189
|
it "should not resolve" do
|
179
|
-
repo_path = tmp_path.join(
|
190
|
+
repo_path = tmp_path.join("repo/resolve")
|
180
191
|
repo_path.rmtree if repo_path.exist?
|
181
192
|
repo_path.mkpath
|
182
|
-
repo_path.join(
|
193
|
+
repo_path.join("cookbooks").mkpath
|
183
194
|
cheffile = Helpers.strip_heredoc(<<-CHEFFILE)
|
184
195
|
#!/usr/bin/env ruby
|
185
196
|
cookbook "sample",
|
186
197
|
:git => #{git_path.to_s.inspect},
|
187
198
|
:path => "jelly"
|
188
199
|
CHEFFILE
|
189
|
-
repo_path.join(
|
200
|
+
repo_path.join("Cheffile").open("wb") { |f| f.write(cheffile) }
|
190
201
|
Chef.stub!(:project_path) { repo_path }
|
191
202
|
|
192
203
|
expect{ Chef.resolve! }.to raise_error
|
@@ -205,19 +216,19 @@ module Librarian
|
|
205
216
|
:git => #{git_path.to_s.inspect},
|
206
217
|
:path => "buttercup"
|
207
218
|
CHEFFILE
|
208
|
-
repo_path.join(
|
219
|
+
repo_path.join("Cheffile").open("wb") { |f| f.write(cheffile) }
|
209
220
|
Chef.stub!(:project_path) { repo_path }
|
210
221
|
|
211
222
|
Chef.resolve!
|
212
|
-
repo_path.join(
|
213
|
-
repo_path.join(
|
223
|
+
repo_path.join("Cheffile.lock").should exist
|
224
|
+
repo_path.join("cookbooks/sample").should_not exist
|
214
225
|
end
|
215
226
|
end
|
216
227
|
|
217
228
|
end
|
218
229
|
|
219
230
|
context "missing a metadata" do
|
220
|
-
git_path
|
231
|
+
let(:git_path) { tmp_path.join("big-git-repo") }
|
221
232
|
|
222
233
|
it "should explain the problem" do
|
223
234
|
repo_path = tmp_path.join("repo/resolve")
|
@@ -233,8 +244,8 @@ module Librarian
|
|
233
244
|
|
234
245
|
expect { Chef.resolve! }.
|
235
246
|
to raise_error(Librarian::Error, /no metadata file found/i)
|
236
|
-
repo_path.join("Cheffile.lock").should_not
|
237
|
-
repo_path.join("cookbooks/sample").should_not
|
247
|
+
repo_path.join("Cheffile.lock").should_not exist
|
248
|
+
repo_path.join("cookbooks/sample").should_not exist
|
238
249
|
end
|
239
250
|
end
|
240
251
|
|
@@ -0,0 +1,156 @@
|
|
1
|
+
require 'webmock'
|
2
|
+
|
3
|
+
require 'librarian'
|
4
|
+
require 'librarian/helpers'
|
5
|
+
require 'librarian/chef'
|
6
|
+
|
7
|
+
module Librarian
|
8
|
+
module Chef
|
9
|
+
module Source
|
10
|
+
describe Site do
|
11
|
+
|
12
|
+
include WebMock::API
|
13
|
+
|
14
|
+
let(:project_path) do
|
15
|
+
project_path = Pathname.new(__FILE__).expand_path
|
16
|
+
project_path = project_path.dirname until project_path.join("Rakefile").exist?
|
17
|
+
project_path
|
18
|
+
end
|
19
|
+
let(:tmp_path) { project_path.join("tmp/spec/chef/site-source") }
|
20
|
+
let(:sample_path) { tmp_path.join("sample") }
|
21
|
+
let(:sample_metadata) do
|
22
|
+
Helpers.strip_heredoc(<<-METADATA)
|
23
|
+
version "0.6.5"
|
24
|
+
METADATA
|
25
|
+
end
|
26
|
+
|
27
|
+
let(:api_url) { "http://site.cookbooks.com" }
|
28
|
+
|
29
|
+
let(:sample_index_data) do
|
30
|
+
{
|
31
|
+
"name" => "sample",
|
32
|
+
"versions" => [
|
33
|
+
"#{api_url}/cookbooks/sample/versions/0_6_5"
|
34
|
+
]
|
35
|
+
}
|
36
|
+
end
|
37
|
+
let(:sample_0_6_5_data) do
|
38
|
+
{
|
39
|
+
"version" => "0.6.5",
|
40
|
+
"file" => "#{api_url}/cookbooks/sample/versions/0_6_5/file.tar.gz"
|
41
|
+
}
|
42
|
+
end
|
43
|
+
|
44
|
+
before :all do
|
45
|
+
sample_path.rmtree if sample_path.exist?
|
46
|
+
sample_path.mkpath
|
47
|
+
sample_path.join('metadata.rb').open('wb') { |f| f.write(sample_metadata) }
|
48
|
+
Dir.chdir(sample_path.dirname) do
|
49
|
+
system "tar --create --gzip --file sample.tar.gz #{sample_path.basename}"
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
before do
|
54
|
+
stub_request(:get, "#{api_url}/cookbooks/sample").
|
55
|
+
to_return(:body => JSON.dump(sample_index_data))
|
56
|
+
|
57
|
+
stub_request(:get, "#{api_url}/cookbooks/sample/versions/0_6_5").
|
58
|
+
to_return(:body => JSON.dump(sample_0_6_5_data))
|
59
|
+
|
60
|
+
stub_request(:get, "#{api_url}/cookbooks/sample/versions/0_6_5/file.tar.gz").
|
61
|
+
to_return(:body => sample_path.dirname.join("sample.tar.gz").read)
|
62
|
+
end
|
63
|
+
|
64
|
+
after do
|
65
|
+
WebMock.reset!
|
66
|
+
end
|
67
|
+
|
68
|
+
context "a single dependency with a site source" do
|
69
|
+
|
70
|
+
it "should resolve" do
|
71
|
+
repo_path = tmp_path.join("repo/resolve")
|
72
|
+
repo_path.rmtree if repo_path.exist?
|
73
|
+
repo_path.mkpath
|
74
|
+
repo_path.join("cookbooks").mkpath
|
75
|
+
cheffile = Helpers.strip_heredoc(<<-CHEFFILE)
|
76
|
+
#!/usr/bin/env ruby
|
77
|
+
cookbook "sample", :site => #{api_url.inspect}
|
78
|
+
CHEFFILE
|
79
|
+
repo_path.join("Cheffile").open("wb") { |f| f.write(cheffile) }
|
80
|
+
Chef.stub!(:project_path) { repo_path }
|
81
|
+
|
82
|
+
Chef.resolve!
|
83
|
+
repo_path.join("Cheffile.lock").should exist
|
84
|
+
repo_path.join("cookbooks/sample").should_not exist
|
85
|
+
end
|
86
|
+
|
87
|
+
it "should install" do
|
88
|
+
repo_path = tmp_path.join("repo/install")
|
89
|
+
repo_path.rmtree if repo_path.exist?
|
90
|
+
repo_path.mkpath
|
91
|
+
repo_path.join("cookbooks").mkpath
|
92
|
+
cheffile = Helpers.strip_heredoc(<<-CHEFFILE)
|
93
|
+
#!/usr/bin/env ruby
|
94
|
+
cookbook "sample", :site => #{api_url.inspect}
|
95
|
+
CHEFFILE
|
96
|
+
repo_path.join("Cheffile").open("wb") { |f| f.write(cheffile) }
|
97
|
+
Chef.stub!(:project_path) { repo_path }
|
98
|
+
|
99
|
+
Chef.install!
|
100
|
+
repo_path.join("Cheffile.lock").should exist
|
101
|
+
repo_path.join("cookbooks/sample").should exist
|
102
|
+
repo_path.join("cookbooks/sample/metadata.rb").should exist
|
103
|
+
end
|
104
|
+
|
105
|
+
it "should resolve and separately install" do
|
106
|
+
repo_path = tmp_path.join("repo/resolve-install")
|
107
|
+
repo_path.rmtree if repo_path.exist?
|
108
|
+
repo_path.mkpath
|
109
|
+
repo_path.join("cookbooks").mkpath
|
110
|
+
cheffile = Helpers.strip_heredoc(<<-CHEFFILE)
|
111
|
+
#!/usr/bin/env ruby
|
112
|
+
cookbook "sample", :site => #{api_url.inspect}
|
113
|
+
CHEFFILE
|
114
|
+
repo_path.join("Cheffile").open("wb") { |f| f.write(cheffile) }
|
115
|
+
Chef.stub!(:project_path) { repo_path }
|
116
|
+
|
117
|
+
Chef.resolve!
|
118
|
+
repo_path.join("tmp").rmtree if repo_path.join("tmp").exist?
|
119
|
+
Chef.install!
|
120
|
+
repo_path.join("cookbooks/sample").should exist
|
121
|
+
repo_path.join("cookbooks/sample/metadata.rb").should exist
|
122
|
+
end
|
123
|
+
|
124
|
+
end
|
125
|
+
|
126
|
+
context "when the repo path has a space" do
|
127
|
+
|
128
|
+
let(:repo_path) { tmp_path.join("repo/with extra spaces/resolve") }
|
129
|
+
|
130
|
+
before do
|
131
|
+
repo_path.rmtree if repo_path.exist?
|
132
|
+
repo_path.mkpath
|
133
|
+
repo_path.join("cookbooks").mkpath
|
134
|
+
|
135
|
+
cheffile = Helpers.strip_heredoc(<<-CHEFFILE)
|
136
|
+
#!/usr/bin/env ruby
|
137
|
+
cookbook "sample", :site => #{api_url.inspect}
|
138
|
+
CHEFFILE
|
139
|
+
repo_path.join("Cheffile").open("wb") { |f| f.write(cheffile) }
|
140
|
+
Chef.stub!(:project_path) { repo_path }
|
141
|
+
end
|
142
|
+
|
143
|
+
after do
|
144
|
+
repo_path.rmtree
|
145
|
+
end
|
146
|
+
|
147
|
+
it "should resolve" do
|
148
|
+
expect { Chef.resolve! }.to_not raise_error
|
149
|
+
end
|
150
|
+
|
151
|
+
end
|
152
|
+
|
153
|
+
end
|
154
|
+
end
|
155
|
+
end
|
156
|
+
end
|
File without changes
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'librarian'
|
2
|
+
require 'librarian/mock'
|
3
|
+
|
4
|
+
module Librarian
|
5
|
+
describe Lockfile do
|
6
|
+
|
7
|
+
before do
|
8
|
+
Mock.registry :clear => true do
|
9
|
+
source 'source-1' do
|
10
|
+
spec 'alpha', '1.1'
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
let(:spec) do
|
16
|
+
Mock.dsl do
|
17
|
+
src 'source-1'
|
18
|
+
dep 'alpha', '1.1'
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
let(:resolver) { Mock.resolver }
|
23
|
+
let(:resolution) { resolver.resolve(spec) }
|
24
|
+
|
25
|
+
context "sanity" do
|
26
|
+
context "the resolution" do
|
27
|
+
subject { resolution }
|
28
|
+
|
29
|
+
it { should be_correct }
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
describe "#save" do
|
34
|
+
let(:lockfile) { Mock.ephemeral_lockfile }
|
35
|
+
let(:lockfile_text) { lockfile.save(resolution) }
|
36
|
+
|
37
|
+
context "just saving" do
|
38
|
+
it "should return the lockfile text" do
|
39
|
+
lockfile_text.should_not be_nil
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
context "bouncing" do
|
44
|
+
let(:bounced_resolution) { lockfile.load(lockfile_text) }
|
45
|
+
let(:bounced_lockfile_text) { lockfile.save(bounced_resolution) }
|
46
|
+
|
47
|
+
it "should return the same lockfile text after bouncing as before bouncing" do
|
48
|
+
bounced_lockfile_text.should == lockfile_text
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
end
|
File without changes
|
File without changes
|
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.9
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-10-
|
12
|
+
date: 2011-10-25 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: thor
|
16
|
-
requirement: &
|
16
|
+
requirement: &25393320 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *25393320
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rspec
|
27
|
-
requirement: &
|
27
|
+
requirement: &25392900 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *25392900
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: cucumber
|
38
|
-
requirement: &
|
38
|
+
requirement: &25392480 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *25392480
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: aruba
|
49
|
-
requirement: &
|
49
|
+
requirement: &25392060 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: '0'
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *25392060
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: webmock
|
60
|
-
requirement: &
|
60
|
+
requirement: &25391640 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: '0'
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *25391640
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: chef
|
71
|
-
requirement: &
|
71
|
+
requirement: &25391140 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: '0.10'
|
77
77
|
type: :runtime
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *25391140
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: highline
|
82
|
-
requirement: &
|
82
|
+
requirement: &25390720 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ! '>='
|
@@ -87,7 +87,7 @@ dependencies:
|
|
87
87
|
version: '0'
|
88
88
|
type: :runtime
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *25390720
|
91
91
|
description: Librarian
|
92
92
|
email:
|
93
93
|
- y_feldblum@yahoo.com
|
@@ -159,13 +159,12 @@ files:
|
|
159
159
|
- lib/librarian/ui.rb
|
160
160
|
- lib/librarian/version.rb
|
161
161
|
- librarian.gemspec
|
162
|
-
- spec/chef/
|
163
|
-
- spec/chef/
|
164
|
-
- spec/dsl_spec.rb
|
165
|
-
- spec/lockfile_spec.rb
|
166
|
-
- spec/
|
167
|
-
- spec/
|
168
|
-
- spec/spec_change_set_spec.rb
|
162
|
+
- spec/functional/chef/source/git_spec.rb
|
163
|
+
- spec/functional/chef/source/site_spec.rb
|
164
|
+
- spec/unit/dsl_spec.rb
|
165
|
+
- spec/unit/lockfile_spec.rb
|
166
|
+
- spec/unit/resolver_spec.rb
|
167
|
+
- spec/unit/spec_change_set_spec.rb
|
169
168
|
homepage: ''
|
170
169
|
licenses: []
|
171
170
|
post_install_message:
|
@@ -1,120 +0,0 @@
|
|
1
|
-
require 'webmock'
|
2
|
-
|
3
|
-
require 'librarian'
|
4
|
-
require 'librarian/helpers'
|
5
|
-
require 'librarian/chef'
|
6
|
-
|
7
|
-
module Librarian
|
8
|
-
module Chef
|
9
|
-
module Source
|
10
|
-
describe Site do
|
11
|
-
|
12
|
-
include WebMock::API
|
13
|
-
|
14
|
-
project_path = Pathname.new(__FILE__).expand_path
|
15
|
-
project_path = project_path.dirname until project_path.join("Rakefile").exist?
|
16
|
-
tmp_path = project_path.join("tmp/spec/chef/site-source")
|
17
|
-
sample_path = tmp_path.join('sample')
|
18
|
-
sample_metadata = Helpers.strip_heredoc(<<-METADATA)
|
19
|
-
version '0.6.5'
|
20
|
-
METADATA
|
21
|
-
|
22
|
-
api_url = "http://site.cookbooks.com"
|
23
|
-
|
24
|
-
sample_index_data = {
|
25
|
-
"name" => "sample",
|
26
|
-
"versions" => [
|
27
|
-
"#{api_url}/cookbooks/sample/versions/0_6_5"
|
28
|
-
]
|
29
|
-
}
|
30
|
-
sample_0_6_5_data = {
|
31
|
-
"version" => "0.6.5",
|
32
|
-
"file" => "#{api_url}/cookbooks/sample/versions/0_6_5/file.tar.gz"
|
33
|
-
}
|
34
|
-
|
35
|
-
before :all do
|
36
|
-
sample_path.rmtree if sample_path.exist?
|
37
|
-
sample_path.mkpath
|
38
|
-
sample_path.join('metadata.rb').open('wb') { |f| f.write(sample_metadata) }
|
39
|
-
Dir.chdir(sample_path.dirname) do
|
40
|
-
system "tar --create --gzip --file sample.tar.gz #{sample_path.basename}"
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
before do
|
45
|
-
stub_request(:get, "#{api_url}/cookbooks/sample").
|
46
|
-
to_return(:body => JSON.dump(sample_index_data))
|
47
|
-
|
48
|
-
stub_request(:get, "#{api_url}/cookbooks/sample/versions/0_6_5").
|
49
|
-
to_return(:body => JSON.dump(sample_0_6_5_data))
|
50
|
-
|
51
|
-
stub_request(:get, "#{api_url}/cookbooks/sample/versions/0_6_5/file.tar.gz").
|
52
|
-
to_return(:body => sample_path.dirname.join("sample.tar.gz").read)
|
53
|
-
end
|
54
|
-
|
55
|
-
after do
|
56
|
-
WebMock.reset!
|
57
|
-
end
|
58
|
-
|
59
|
-
context "a single dependency with a site source" do
|
60
|
-
|
61
|
-
it "should resolve" do
|
62
|
-
repo_path = tmp_path.join('repo/resolve')
|
63
|
-
repo_path.rmtree if repo_path.exist?
|
64
|
-
repo_path.mkpath
|
65
|
-
repo_path.join('cookbooks').mkpath
|
66
|
-
cheffile = Helpers.strip_heredoc(<<-CHEFFILE)
|
67
|
-
#!/usr/bin/env ruby
|
68
|
-
cookbook "sample", :site => "#{api_url}"
|
69
|
-
CHEFFILE
|
70
|
-
repo_path.join('Cheffile').open('wb') { |f| f.write(cheffile) }
|
71
|
-
Chef.stub!(:project_path) { repo_path }
|
72
|
-
|
73
|
-
Chef.resolve!
|
74
|
-
repo_path.join('Cheffile.lock').should be_exist
|
75
|
-
repo_path.join('cookbooks/sample').should_not be_exist
|
76
|
-
end
|
77
|
-
|
78
|
-
it "should install" do
|
79
|
-
repo_path = tmp_path.join('repo/install')
|
80
|
-
repo_path.rmtree if repo_path.exist?
|
81
|
-
repo_path.mkpath
|
82
|
-
repo_path.join('cookbooks').mkpath
|
83
|
-
cheffile = Helpers.strip_heredoc(<<-CHEFFILE)
|
84
|
-
#!/usr/bin/env ruby
|
85
|
-
cookbook "sample", :site => "#{api_url}"
|
86
|
-
CHEFFILE
|
87
|
-
repo_path.join('Cheffile').open('wb') { |f| f.write(cheffile) }
|
88
|
-
Chef.stub!(:project_path) { repo_path }
|
89
|
-
|
90
|
-
Chef.install!
|
91
|
-
repo_path.join('Cheffile.lock').should be_exist
|
92
|
-
repo_path.join('cookbooks/sample').should be_exist
|
93
|
-
repo_path.join('cookbooks/sample/metadata.rb').should be_exist
|
94
|
-
end
|
95
|
-
|
96
|
-
it "should resolve and separately install" do
|
97
|
-
repo_path = tmp_path.join('repo/resolve-install')
|
98
|
-
repo_path.rmtree if repo_path.exist?
|
99
|
-
repo_path.mkpath
|
100
|
-
repo_path.join('cookbooks').mkpath
|
101
|
-
cheffile = Helpers.strip_heredoc(<<-CHEFFILE)
|
102
|
-
#!/usr/bin/env ruby
|
103
|
-
cookbook "sample", :site => "#{api_url}"
|
104
|
-
CHEFFILE
|
105
|
-
repo_path.join('Cheffile').open('wb') { |f| f.write(cheffile) }
|
106
|
-
Chef.stub!(:project_path) { repo_path }
|
107
|
-
|
108
|
-
Chef.resolve!
|
109
|
-
repo_path.join('tmp').rmtree if repo_path.join('tmp').exist?
|
110
|
-
Chef.install!
|
111
|
-
repo_path.join('cookbooks/sample').should be_exist
|
112
|
-
repo_path.join('cookbooks/sample/metadata.rb').should be_exist
|
113
|
-
end
|
114
|
-
|
115
|
-
end
|
116
|
-
|
117
|
-
end
|
118
|
-
end
|
119
|
-
end
|
120
|
-
end
|
data/spec/lockfile_spec.rb
DELETED
@@ -1,44 +0,0 @@
|
|
1
|
-
require 'librarian'
|
2
|
-
require 'librarian/mock'
|
3
|
-
|
4
|
-
module Librarian
|
5
|
-
describe Lockfile do
|
6
|
-
|
7
|
-
it "should save" do
|
8
|
-
Mock.registry :clear => true do
|
9
|
-
source 'source-1' do
|
10
|
-
spec 'alpha', '1.1'
|
11
|
-
end
|
12
|
-
end
|
13
|
-
spec = Mock.dsl do
|
14
|
-
src 'source-1'
|
15
|
-
dep 'alpha', '1.1'
|
16
|
-
end
|
17
|
-
resolution = Mock.resolver.resolve(spec)
|
18
|
-
resolution.should be_correct
|
19
|
-
lockfile = Mock.ephemeral_lockfile
|
20
|
-
lockfile_text = lockfile.save(resolution)
|
21
|
-
lockfile_text.should_not be_nil
|
22
|
-
end
|
23
|
-
|
24
|
-
it "should bounce" do
|
25
|
-
Mock.registry :clear => true do
|
26
|
-
source 'source-1' do
|
27
|
-
spec 'alpha', '1.1'
|
28
|
-
end
|
29
|
-
end
|
30
|
-
spec = Mock.dsl do
|
31
|
-
src 'source-1'
|
32
|
-
dep 'alpha', '1.1'
|
33
|
-
end
|
34
|
-
resolution = Mock.resolver.resolve(spec)
|
35
|
-
resolution.should be_correct
|
36
|
-
lockfile = Mock.ephemeral_lockfile
|
37
|
-
lockfile_text = lockfile.save(resolution)
|
38
|
-
bounced_resolution = lockfile.load(lockfile_text)
|
39
|
-
bounced_lockfile_text = lockfile.save(bounced_resolution)
|
40
|
-
bounced_lockfile_text.should == lockfile_text
|
41
|
-
end
|
42
|
-
|
43
|
-
end
|
44
|
-
end
|
data/spec/meta/requires_spec.rb
DELETED
@@ -1,27 +0,0 @@
|
|
1
|
-
require 'pathname'
|
2
|
-
require 'open3'
|
3
|
-
|
4
|
-
describe 'Meta' do
|
5
|
-
describe 'Requires', :slow => true do
|
6
|
-
|
7
|
-
root_path = Pathname.new('../../..').expand_path(__FILE__)
|
8
|
-
|
9
|
-
Pathname.glob(root_path.join('lib/**/*.rb')).sort.each do |path|
|
10
|
-
|
11
|
-
it "require '#{path.relative_path_from(root_path.join('lib'))}'" do
|
12
|
-
script = <<-SCRIPT
|
13
|
-
lib = File.expand_path(%{lib}, %{#{root_path}})
|
14
|
-
$:.unshift(lib) unless $:.include?(lib)
|
15
|
-
require %{#{path}}
|
16
|
-
SCRIPT
|
17
|
-
cmd = <<-CMD
|
18
|
-
ruby -e '#{script}'
|
19
|
-
CMD
|
20
|
-
err = Open3.popen3(cmd) { |i, o, e, t| e.read }
|
21
|
-
raise Exception, err if err != ''
|
22
|
-
end
|
23
|
-
|
24
|
-
end
|
25
|
-
|
26
|
-
end
|
27
|
-
end
|