omnibus 5.0.0 → 5.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (53) hide show
  1. checksums.yaml +4 -4
  2. data/.rspec +2 -0
  3. data/.travis.yml +1 -0
  4. data/CHANGELOG.md +26 -0
  5. data/Gemfile +3 -0
  6. data/MAINTAINERS.md +1 -0
  7. data/appveyor.yml +1 -1
  8. data/bin/omnibus +5 -0
  9. data/lib/omnibus/builder.rb +165 -26
  10. data/lib/omnibus/digestable.rb +4 -2
  11. data/lib/omnibus/fetcher.rb +18 -5
  12. data/lib/omnibus/fetchers/git_fetcher.rb +38 -22
  13. data/lib/omnibus/fetchers/net_fetcher.rb +106 -37
  14. data/lib/omnibus/fetchers/path_fetcher.rb +13 -12
  15. data/lib/omnibus/file_syncer.rb +33 -14
  16. data/lib/omnibus/generator_files/README.md.erb +1 -1
  17. data/lib/omnibus/generator_files/package_scripts/postinst.erb +3 -3
  18. data/lib/omnibus/generator_files/package_scripts/postrm.erb +1 -1
  19. data/lib/omnibus/generator_files/package_scripts/preinst.erb +1 -1
  20. data/lib/omnibus/generator_files/package_scripts/prerm.erb +3 -3
  21. data/lib/omnibus/git_cache.rb +20 -7
  22. data/lib/omnibus/health_check.rb +144 -12
  23. data/lib/omnibus/packagers/bff.rb +57 -5
  24. data/lib/omnibus/packagers/deb.rb +2 -2
  25. data/lib/omnibus/packagers/pkg.rb +2 -2
  26. data/lib/omnibus/packagers/solaris.rb +18 -6
  27. data/lib/omnibus/project.rb +1 -1
  28. data/lib/omnibus/s3_cache.rb +8 -2
  29. data/lib/omnibus/software.rb +152 -18
  30. data/lib/omnibus/sugarable.rb +1 -5
  31. data/lib/omnibus/util.rb +1 -1
  32. data/lib/omnibus/version.rb +1 -1
  33. data/omnibus.gemspec +4 -1
  34. data/resources/bff/config.erb +7 -0
  35. data/resources/deb/md5sums.erb +1 -1
  36. data/spec/functional/builder_spec.rb +89 -2
  37. data/spec/functional/fetchers/git_fetcher_spec.rb +44 -37
  38. data/spec/functional/fetchers/net_fetcher_spec.rb +36 -5
  39. data/spec/functional/fetchers/path_fetcher_spec.rb +28 -28
  40. data/spec/unit/builder_spec.rb +143 -11
  41. data/spec/unit/fetchers/git_fetcher_spec.rb +23 -59
  42. data/spec/unit/fetchers/net_fetcher_spec.rb +151 -63
  43. data/spec/unit/fetchers/path_fetcher_spec.rb +4 -35
  44. data/spec/unit/git_cache_spec.rb +13 -14
  45. data/spec/unit/health_check_spec.rb +90 -0
  46. data/spec/unit/library_spec.rb +1 -1
  47. data/spec/unit/packagers/bff_spec.rb +126 -3
  48. data/spec/unit/packagers/deb_spec.rb +8 -3
  49. data/spec/unit/packagers/pkg_spec.rb +19 -19
  50. data/spec/unit/packagers/solaris_spec.rb +13 -1
  51. data/spec/unit/software_spec.rb +242 -38
  52. metadata +7 -6
  53. data/lib/omnibus/generator_files/package_scripts/makeselfinst.erb +0 -0
@@ -29,16 +29,16 @@ module Omnibus
29
29
  context 'when the repository is cloned' do
30
30
  before { allow(subject).to receive(:cloned?).and_return(true) }
31
31
  before { allow(subject).to receive(:resolved_version).and_return('12341235')}
32
- context 'when the revision is difference' do
33
- before { allow(subject).to receive(:same_revision?).and_return(false) }
32
+ context 'when the revision is not in the repo' do
33
+ before { allow(subject).to receive(:contains_revision?).and_return(false) }
34
34
 
35
35
  it 'returns true' do
36
36
  expect(subject.fetch_required?).to be_truthy
37
37
  end
38
38
  end
39
39
 
40
- context 'when the same revision is checked out' do
41
- before { allow(subject).to receive(:same_revision?).and_return(true) }
40
+ context 'when the revision is present in the repo' do
41
+ before { allow(subject).to receive(:contains_revision?).and_return(true) }
42
42
 
43
43
  it 'returns false' do
44
44
  expect(subject.fetch_required?).to be(false)
@@ -60,36 +60,23 @@ module Omnibus
60
60
  end
61
61
 
62
62
  describe '#clean' do
63
- before { allow(subject).to receive(:git) }
64
-
65
- context 'when the repository is cloned' do
66
- before do
67
- allow(subject).to receive(:cloned?).and_return(true)
68
- end
69
-
70
- it 'cleans the directory' do
71
- expect(subject).to receive(:git).with('clean -fdx')
72
- subject.clean
73
- end
74
-
75
- it 'returns true' do
76
- expect(subject.clean).to be_truthy
77
- end
63
+ before do
64
+ allow(subject).to receive(:git)
65
+ allow(subject).to receive(:resolved_version).and_return('12341235')
78
66
  end
79
67
 
80
- context 'when the repository is not cloned' do
81
- before do
82
- allow(subject).to receive(:cloned?).and_return(false)
83
- end
68
+ it 'checks out the working directory at the correct revision' do
69
+ expect(subject).to receive(:git_checkout)
70
+ subject.clean
71
+ end
84
72
 
85
- it 'does not clean the repository' do
86
- expect(subject).to_not receive(:git)
87
- subject.clean
88
- end
73
+ it 'cleans the directory' do
74
+ expect(subject).to receive(:git).with('clean -fdx')
75
+ subject.clean
76
+ end
89
77
 
90
- it 'returns false' do
91
- expect(subject.clean).to be(false)
92
- end
78
+ it 'returns true' do
79
+ expect(subject.clean).to be_truthy
93
80
  end
94
81
  end
95
82
 
@@ -101,22 +88,9 @@ module Omnibus
101
88
  context 'when the repository is cloned' do
102
89
  before { allow(subject).to receive(:cloned?).and_return(true) }
103
90
 
104
- context 'when the revision is different' do
105
- before { allow(subject).to receive(:same_revision?).and_return(false) }
106
-
107
- it 'fetches and resets to the resolved_version' do
108
- expect(subject).to receive(:git_fetch)
109
- subject.fetch
110
- end
111
- end
112
-
113
- context 'when the revision is the same' do
114
- before { allow(subject).to receive(:same_revision?).and_return(true) }
115
-
116
- it 'does not fetch or reset' do
117
- expect(subject).to_not receive(:git_fetch)
118
- subject.fetch
119
- end
91
+ it 'fetches the resolved_version' do
92
+ expect(subject).to receive(:git_fetch)
93
+ subject.fetch
120
94
  end
121
95
  end
122
96
 
@@ -125,13 +99,12 @@ module Omnibus
125
99
  allow(subject).to receive(:cloned?).and_return(false)
126
100
  allow(subject).to receive(:dir_empty?).and_return(true)
127
101
  allow(subject).to receive(:git_clone)
128
- allow(subject).to receive(:git_checkout)
129
102
  end
130
103
 
131
104
  context 'but a directory does exist' do
132
105
  before { expect(subject).to receive(:dir_empty?).with(project_dir).and_return(false)}
133
106
 
134
- it 'forcefully removes and recreateds the directory' do
107
+ it 'forcefully removes and recreates the directory' do
135
108
  expect(FileUtils).to receive(:rm_rf).with(project_dir).and_return(project_dir)
136
109
  expect(Dir).to receive(:mkdir).with(project_dir).and_return(0)
137
110
  subject.fetch
@@ -142,21 +115,12 @@ module Omnibus
142
115
  expect(subject).to receive(:git_clone).once
143
116
  subject.fetch
144
117
  end
145
-
146
- it 'checks out the correct revision' do
147
- expect(subject).to receive(:git_checkout).once
148
- subject.fetch
149
- end
150
118
  end
151
119
  end
152
120
 
153
121
  describe '#version_for_cache' do
154
- let(:revision) { 'abcd1234' }
155
-
156
- before { allow(subject).to receive(:current_revision).and_return(revision) }
157
-
158
- it 'returns the shasum of the project_dir' do
159
- expect(subject.version_for_cache).to eq("revision:#{revision}")
122
+ it 'returns the shasum of the commit that we expect to be at' do
123
+ expect(subject.version_for_cache).to eq('revision:123abcd1234')
160
124
  end
161
125
  end
162
126
  end
@@ -2,8 +2,9 @@ require 'spec_helper'
2
2
 
3
3
  module Omnibus
4
4
  describe NetFetcher do
5
- let(:project_dir) { '/tmp/project' }
6
- let(:build_dir) { '/tmp/build' }
5
+ let(:root_prefix) { '' }
6
+ let(:project_dir) { "#{root_prefix}/tmp/project" }
7
+ let(:build_dir) { "#{root_prefix}/tmp/build" }
7
8
  let(:source) do
8
9
  { url: 'https://get.example.com/file.tar.gz', md5: 'abcd1234' }
9
10
  end
@@ -101,14 +102,15 @@ module Omnibus
101
102
  describe '#clean' do
102
103
  before do
103
104
  allow(FileUtils).to receive(:rm_rf)
104
- allow(subject).to receive(:extract)
105
+ allow(subject).to receive(:deploy)
106
+ allow(subject).to receive(:create_required_directories)
105
107
  end
106
108
 
107
109
  context 'when the project directory exists' do
108
110
  before { allow(File).to receive(:exist?).and_return(true) }
109
111
 
110
- it 'extracts the archive' do
111
- expect(subject).to receive(:extract)
112
+ it 'deploys the archive' do
113
+ expect(subject).to receive(:deploy)
112
114
  subject.clean
113
115
  end
114
116
 
@@ -125,8 +127,8 @@ module Omnibus
125
127
  context 'when the project directory does not exist' do
126
128
  before { allow(File).to receive(:exist?).and_return(false) }
127
129
 
128
- it 'extracts the archive' do
129
- expect(subject).to receive(:extract)
130
+ it 'deploys the archive' do
131
+ expect(subject).to receive(:deploy)
130
132
  subject.clean
131
133
  end
132
134
 
@@ -187,7 +189,7 @@ module Omnibus
187
189
 
188
190
  let(:tempfile_path) { "/tmp/intermediate_path/tempfile_path.random_garbage.tmp" }
189
191
 
190
- let(:fetched_file) { instance_double("File", path: tempfile_path) }
192
+ let(:fetched_file) { instance_double("TempFile", path: tempfile_path) }
191
193
 
192
194
  let(:destination_path) { "/cache/file.tar.gz" }
193
195
 
@@ -212,8 +214,9 @@ module Omnibus
212
214
 
213
215
  fetched_file
214
216
  end
215
- expect(FileUtils).to receive(:cp).with(tempfile_path, destination_path)
216
217
  expect(fetched_file).to receive(:close)
218
+ expect(FileUtils).to receive(:cp).with(tempfile_path, destination_path)
219
+ expect(fetched_file).to receive(:unlink)
217
220
  end
218
221
 
219
222
  it "downloads the thing" do
@@ -246,27 +249,35 @@ module Omnibus
246
249
 
247
250
  end
248
251
 
249
- shared_examples 'an extractor' do |extension, command|
252
+ shared_examples 'an extractor' do |extension, source_options, commands|
250
253
  context "when the file is a .#{extension}" do
251
254
  let(:manifest_entry) do
252
255
  double(Omnibus::ManifestEntry,
253
256
  name: 'file',
254
257
  locked_version: "1.2.3",
255
258
  described_version: '1.2.3',
256
- locked_source: { url: "https://get.example.com/file.#{extension}", md5: 'abcd1234' })
259
+ locked_source: { url: "https://get.example.com/file.#{extension}", md5: 'abcd1234' }.merge(source_options)
260
+ )
257
261
  end
258
262
 
259
263
  subject { described_class.new(manifest_entry, project_dir, build_dir) }
260
264
 
261
- it 'is the right command' do
262
- expect(subject.send(:extract_command)).to eq(command)
265
+ it 'shells out with the right commands' do
266
+ commands.each do |command|
267
+ if command.is_a?(String)
268
+ expect(subject).to receive(:shellout!).with(command)
269
+ else
270
+ expect(subject).to receive(:shellout!).with(*command)
271
+ end
272
+ end
273
+ subject.send(:extract)
263
274
  end
264
275
  end
265
276
  end
266
277
 
267
- describe '#extract' do
278
+ describe '#deploy' do
268
279
  before do
269
- described_class.send(:public, :extract)
280
+ described_class.send(:public, :deploy)
270
281
  end
271
282
 
272
283
  context 'when the downloaded file is a folder' do
@@ -281,14 +292,12 @@ module Omnibus
281
292
  subject { described_class.new(manifest_entry, project_dir, build_dir) }
282
293
 
283
294
  before do
284
- allow(FileUtils).to receive(:cp_r)
285
295
  allow(File).to receive(:directory?).and_return(true)
286
296
  end
287
297
 
288
298
  it 'copies the entire directory to project_dir' do
289
- allow(subject).to receive(:extract_command)
290
- expect(FileUtils).to receive(:cp_r).with("#{cache_dir}/folder", project_dir)
291
- subject.extract
299
+ expect(FileUtils).to receive(:cp_r).with("#{cache_dir}/folder/.", project_dir)
300
+ subject.deploy
292
301
  end
293
302
  end
294
303
 
@@ -304,37 +313,95 @@ module Omnibus
304
313
  subject { described_class.new(manifest_entry, project_dir, build_dir) }
305
314
 
306
315
  before do
307
- allow(FileUtils).to receive(:mkdir_p)
308
- allow(FileUtils).to receive(:cp)
309
316
  allow(File).to receive(:directory?).and_return(false)
310
317
  end
311
318
 
312
319
  it 'copies the file into the project_dir' do
313
- allow(subject).to receive(:extract_command)
314
- expect(FileUtils).to receive(:cp).with("#{cache_dir}/file", "#{project_dir}/")
315
- subject.extract
320
+ expect(FileUtils).to receive(:cp).with("#{cache_dir}/file", "#{project_dir}")
321
+ subject.deploy
316
322
  end
317
323
  end
318
324
  end
319
325
 
320
- describe '#extract_command' do
321
- before { Config.source_dir('/tmp/out') }
326
+ describe '#extract' do
322
327
 
323
328
  context 'on Windows' do
329
+ let(:root_prefix) { 'C:' }
330
+
324
331
  before do
325
- Config.cache_dir('C:')
332
+ Config.cache_dir('C:/')
326
333
  stub_ohai(platform: 'windows', version: '2012')
334
+ allow(Dir).to receive(:mktmpdir).and_yield('C:/tmp_dir')
335
+ end
336
+
337
+ context 'when no extract overrides are present' do
338
+ it_behaves_like 'an extractor', '7z', {},
339
+ ['7z.exe x C:\\file.7z -oC:\\tmp\\project -r -y']
340
+ it_behaves_like 'an extractor', 'zip', {},
341
+ ['7z.exe x C:\\file.zip -oC:\\tmp\\project -r -y']
342
+ it_behaves_like 'an extractor', 'tar', {},
343
+ [['tar.exe xf C:\\file.tar -CC:\\tmp\\project', {returns: [0]}]]
344
+ it_behaves_like 'an extractor', 'tgz', {},
345
+ [['tar.exe zxf C:\\file.tgz -CC:\\tmp\\project', {returns: [0]}]]
346
+ it_behaves_like 'an extractor', 'tar.gz', {},
347
+ [['tar.exe zxf C:\\file.tar.gz -CC:\\tmp\\project', {returns: [0]}]]
348
+ it_behaves_like 'an extractor', 'tar.bz2', {},
349
+ [['tar.exe jxf C:\\file.tar.bz2 -CC:\\tmp\\project', {returns: [0]}]]
350
+ it_behaves_like 'an extractor', 'txz', {},
351
+ [['tar.exe Jxf C:\\file.txz -CC:\\tmp\\project', {returns: [0]}]]
352
+ it_behaves_like 'an extractor', 'tar.xz', {},
353
+ [['tar.exe Jxf C:\\file.tar.xz -CC:\\tmp\\project', {returns: [0]}]]
354
+ it_behaves_like 'an extractor', 'tar.lzma', {},
355
+ [['tar.exe --lzma -xf C:\\file.tar.lzma -CC:\\tmp\\project', {returns: [0]}]]
356
+ end
357
+
358
+ context 'when seven_zip extract strategy is chosen' do
359
+ it_behaves_like 'an extractor', '7z', { extract: :seven_zip },
360
+ ['7z.exe x C:\\file.7z -oC:\\tmp\\project -r -y']
361
+ it_behaves_like 'an extractor', 'zip', { extract: :seven_zip },
362
+ ['7z.exe x C:\\file.zip -oC:\\tmp\\project -r -y']
363
+ it_behaves_like 'an extractor', 'tar', { extract: :seven_zip },
364
+ ['7z.exe x C:\\file.tar -oC:\\tmp\\project -r -y']
365
+ it_behaves_like 'an extractor', 'tgz', { extract: :seven_zip },
366
+ ['7z.exe x C:\\file.tgz -oC:\\tmp_dir -r -y',
367
+ '7z.exe x C:\\tmp_dir\\file.tar -oC:\\tmp\\project -r -y']
368
+ it_behaves_like 'an extractor', 'tar.gz', { extract: :seven_zip },
369
+ ['7z.exe x C:\\file.tar.gz -oC:\\tmp_dir -r -y',
370
+ '7z.exe x C:\\tmp_dir\\file.tar -oC:\\tmp\\project -r -y']
371
+ it_behaves_like 'an extractor', 'tar.bz2', { extract: :seven_zip },
372
+ ['7z.exe x C:\\file.tar.bz2 -oC:\\tmp_dir -r -y',
373
+ '7z.exe x C:\\tmp_dir\\file.tar -oC:\\tmp\\project -r -y']
374
+ it_behaves_like 'an extractor', 'txz', { extract: :seven_zip },
375
+ ['7z.exe x C:\\file.txz -oC:\\tmp_dir -r -y',
376
+ '7z.exe x C:\\tmp_dir\\file.tar -oC:\\tmp\\project -r -y']
377
+ it_behaves_like 'an extractor', 'tar.xz', { extract: :seven_zip },
378
+ ['7z.exe x C:\\file.tar.xz -oC:\\tmp_dir -r -y',
379
+ '7z.exe x C:\\tmp_dir\\file.tar -oC:\\tmp\\project -r -y']
380
+ it_behaves_like 'an extractor', 'tar.lzma', { extract: :seven_zip },
381
+ ['7z.exe x C:\\file.tar.lzma -oC:\\tmp_dir -r -y',
382
+ '7z.exe x C:\\tmp_dir\\file.tar -oC:\\tmp\\project -r -y']
383
+ end
384
+
385
+ context 'when lax_tar extract strategy is chosen' do
386
+ it_behaves_like 'an extractor', '7z', { extract: :lax_tar },
387
+ ['7z.exe x C:\\file.7z -oC:\\tmp\\project -r -y']
388
+ it_behaves_like 'an extractor', 'zip', { extract: :lax_tar },
389
+ ['7z.exe x C:\\file.zip -oC:\\tmp\\project -r -y']
390
+ it_behaves_like 'an extractor', 'tar', { extract: :lax_tar },
391
+ [['tar.exe xf C:\\file.tar -CC:\\tmp\\project', {returns: [0, 1]}]]
392
+ it_behaves_like 'an extractor', 'tgz', { extract: :lax_tar },
393
+ [['tar.exe zxf C:\\file.tgz -CC:\\tmp\\project', {returns: [0, 1]}]]
394
+ it_behaves_like 'an extractor', 'tar.gz', { extract: :lax_tar },
395
+ [['tar.exe zxf C:\\file.tar.gz -CC:\\tmp\\project', {returns: [0, 1]}]]
396
+ it_behaves_like 'an extractor', 'tar.bz2', { extract: :lax_tar },
397
+ [['tar.exe jxf C:\\file.tar.bz2 -CC:\\tmp\\project', {returns: [0, 1]}]]
398
+ it_behaves_like 'an extractor', 'txz', { extract: :lax_tar },
399
+ [['tar.exe Jxf C:\\file.txz -CC:\\tmp\\project', {returns: [0, 1]}]]
400
+ it_behaves_like 'an extractor', 'tar.xz', { extract: :lax_tar },
401
+ [['tar.exe Jxf C:\\file.tar.xz -CC:\\tmp\\project', {returns: [0, 1]}]]
402
+ it_behaves_like 'an extractor', 'tar.lzma', { extract: :lax_tar },
403
+ [['tar.exe --lzma -xf C:\\file.tar.lzma -CC:\\tmp\\project', {returns: [0, 1]}]]
327
404
  end
328
-
329
- it_behaves_like 'an extractor', '7z', '7z.exe x C:\\file.7z -o/tmp/out -r -y'
330
- it_behaves_like 'an extractor', 'zip', '7z.exe x C:\\file.zip -o/tmp/out -r -y'
331
- it_behaves_like 'an extractor', 'tar', 'tar xf C:\\file.tar -C/tmp/out'
332
- it_behaves_like 'an extractor', 'tgz', 'tar zxf C:\\file.tgz -C/tmp/out'
333
- it_behaves_like 'an extractor', 'tar.gz', 'tar zxf C:\\file.tar.gz -C/tmp/out'
334
- it_behaves_like 'an extractor', 'bz2', 'tar jxf C:\\file.bz2 -C/tmp/out'
335
- it_behaves_like 'an extractor', 'tar.bz2', 'tar jxf C:\\file.tar.bz2 -C/tmp/out'
336
- it_behaves_like 'an extractor', 'txz', 'tar Jxf C:\\file.txz -C/tmp/out'
337
- it_behaves_like 'an extractor', 'tar.xz', 'tar Jxf C:\\file.tar.xz -C/tmp/out'
338
405
  end
339
406
 
340
407
  context 'on Linux' do
@@ -344,38 +411,59 @@ module Omnibus
344
411
  stub_const('File::ALT_SEPARATOR', nil)
345
412
  end
346
413
 
347
- it_behaves_like 'an extractor', '7z', '7z x /file.7z -o/tmp/out -r -y'
348
- it_behaves_like 'an extractor', 'zip', 'unzip /file.zip -d /tmp/out'
349
- it_behaves_like 'an extractor', 'tar', 'tar xf /file.tar -C/tmp/out'
350
- it_behaves_like 'an extractor', 'tgz', 'tar zxf /file.tgz -C/tmp/out'
351
- it_behaves_like 'an extractor', 'tar.gz', 'tar zxf /file.tar.gz -C/tmp/out'
352
- it_behaves_like 'an extractor', 'bz2', 'tar jxf /file.bz2 -C/tmp/out'
353
- it_behaves_like 'an extractor', 'tar.bz2', 'tar jxf /file.tar.bz2 -C/tmp/out'
354
- it_behaves_like 'an extractor', 'txz', 'tar Jxf /file.txz -C/tmp/out'
355
- it_behaves_like 'an extractor', 'tar.xz', 'tar Jxf /file.tar.xz -C/tmp/out'
356
- end
357
-
358
- context 'when gtar is present' do
359
- before do
360
- Config.cache_dir('/')
414
+ context 'when gtar is not present' do
415
+ it_behaves_like 'an extractor', '7z', {},
416
+ ['7z x /file.7z -o/tmp/project -r -y']
417
+ it_behaves_like 'an extractor', 'zip', {},
418
+ ['unzip /file.zip -d /tmp/project']
419
+ it_behaves_like 'an extractor', 'tar', {},
420
+ ['tar xf /file.tar -C/tmp/project']
421
+ it_behaves_like 'an extractor', 'tgz', {},
422
+ ['tar zxf /file.tgz -C/tmp/project']
423
+ it_behaves_like 'an extractor', 'tar.gz', {},
424
+ ['tar zxf /file.tar.gz -C/tmp/project']
425
+ it_behaves_like 'an extractor', 'tar.bz2', {},
426
+ ['tar jxf /file.tar.bz2 -C/tmp/project']
427
+ it_behaves_like 'an extractor', 'txz', {},
428
+ ['tar Jxf /file.txz -C/tmp/project']
429
+ it_behaves_like 'an extractor', 'tar.xz', {},
430
+ ['tar Jxf /file.tar.xz -C/tmp/project']
431
+ it_behaves_like 'an extractor', 'tar.lzma', {},
432
+ ['tar --lzma -xf /file.tar.lzma -C/tmp/project']
433
+ end
434
+
435
+ context 'when gtar is present' do
436
+ before do
437
+ Config.cache_dir('/')
361
438
 
362
- stub_ohai(platform: 'ubuntu', version: '12.04')
363
- stub_const('File::ALT_SEPARATOR', nil)
439
+ stub_ohai(platform: 'ubuntu', version: '12.04')
440
+ stub_const('File::ALT_SEPARATOR', nil)
364
441
 
365
- allow(Omnibus).to receive(:which)
442
+ allow(Omnibus).to receive(:which)
366
443
  .with('gtar')
367
444
  .and_return('/path/to/gtar')
445
+ end
446
+
447
+ it_behaves_like 'an extractor', '7z', {},
448
+ ['7z x /file.7z -o/tmp/project -r -y']
449
+ it_behaves_like 'an extractor', 'zip', {},
450
+ ['unzip /file.zip -d /tmp/project']
451
+ it_behaves_like 'an extractor', 'tar', {},
452
+ ['gtar xf /file.tar -C/tmp/project']
453
+ it_behaves_like 'an extractor', 'tgz', {},
454
+ ['gtar zxf /file.tgz -C/tmp/project']
455
+ it_behaves_like 'an extractor', 'tar.gz', {},
456
+ ['gtar zxf /file.tar.gz -C/tmp/project']
457
+ it_behaves_like 'an extractor', 'tar.bz2', {},
458
+ ['gtar jxf /file.tar.bz2 -C/tmp/project']
459
+ it_behaves_like 'an extractor', 'txz', {},
460
+ ['gtar Jxf /file.txz -C/tmp/project']
461
+ it_behaves_like 'an extractor', 'tar.xz', {},
462
+ ['gtar Jxf /file.tar.xz -C/tmp/project']
463
+ it_behaves_like 'an extractor', 'tar.lzma', {},
464
+ ['gtar --lzma -xf /file.tar.lzma -C/tmp/project']
368
465
  end
369
466
 
370
- it_behaves_like 'an extractor', '7z', '7z x /file.7z -o/tmp/out -r -y'
371
- it_behaves_like 'an extractor', 'zip', 'unzip /file.zip -d /tmp/out'
372
- it_behaves_like 'an extractor', 'tar', 'gtar xf /file.tar -C/tmp/out'
373
- it_behaves_like 'an extractor', 'tgz', 'gtar zxf /file.tgz -C/tmp/out'
374
- it_behaves_like 'an extractor', 'tar.gz', 'gtar zxf /file.tar.gz -C/tmp/out'
375
- it_behaves_like 'an extractor', 'bz2', 'gtar jxf /file.bz2 -C/tmp/out'
376
- it_behaves_like 'an extractor', 'tar.bz2', 'gtar jxf /file.tar.bz2 -C/tmp/out'
377
- it_behaves_like 'an extractor', 'txz', 'gtar Jxf /file.txz -C/tmp/out'
378
- it_behaves_like 'an extractor', 'tar.xz', 'gtar Jxf /file.tar.xz -C/tmp/out'
379
467
  end
380
468
  end
381
469
  end
@@ -47,39 +47,8 @@ module Omnibus
47
47
  end
48
48
 
49
49
  describe '#clean' do
50
- before do
51
- allow(FileUtils).to receive(:rm_rf)
52
- allow(subject).to receive(:fetch)
53
- end
54
-
55
- context 'when the directory exists' do
56
- before do
57
- allow(File).to receive(:exist?).with(project_dir).and_return(true)
58
- end
59
-
60
- it 'removes the directory' do
61
- expect(FileUtils).to receive(:rm_rf).with(project_dir).once
62
- subject.clean
63
- end
64
-
65
- it 'returns true' do
66
- expect(subject.clean).to be_truthy
67
- end
68
- end
69
-
70
- context 'when the directory does not exist' do
71
- before do
72
- allow(File).to receive(:exist?).with(project_dir).and_return(false)
73
- end
74
-
75
- it 'does not remove the directory' do
76
- expect(FileUtils).to_not receive(:rm_rf)
77
- subject.clean
78
- end
79
-
80
- it 'returns false' do
81
- expect(subject.clean).to be(false)
82
- end
50
+ it 'returns true' do
51
+ expect(subject.clean).to be_truthy
83
52
  end
84
53
  end
85
54
 
@@ -100,11 +69,11 @@ module Omnibus
100
69
 
101
70
  before do
102
71
  allow(subject).to receive(:digest_directory)
103
- .with(project_dir, :sha256)
72
+ .with(source_path, :sha256, {})
104
73
  .and_return(shasum)
105
74
  end
106
75
 
107
- it 'returns the shasum of the project_dir' do
76
+ it 'returns the shasum of the source directory' do
108
77
  expect(subject.version_for_cache).to eq("path:#{source_path}|shasum:#{shasum}")
109
78
  end
110
79
  end