vanagon 0.15.19 → 0.15.20

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA256:
3
- metadata.gz: b71ba52fd3a026248d25a3a10a0570960d552585a8cc3e114c2bb366583c2bbb
4
- data.tar.gz: 726ddf77c6137b9f09adf974dd981eae1f654f063a32f56181c1ca630f3fd04b
2
+ SHA1:
3
+ metadata.gz: 468fb182c6b20bdf8a1257d1f90a89c5f3c501e7
4
+ data.tar.gz: 4b9937671809e342dece2d5f296ee4b1b8d7dc12
5
5
  SHA512:
6
- metadata.gz: 4afb19e20c1e81500c9ed9cde575ed93679dd2fca0407d86a9b67aa4bf0cbcadb65b3a74d0dc9e9439a5686e285792c571b6e2fa1faecb1a646409edbc527b48
7
- data.tar.gz: 53b39a73763a1c30cde5cd75ff17356ace19390518cd4bb9d490a00316d72d91d7ecea9565ebf50c36f0cd48ebbc61c6e645922d0574e4b77b9c6d6bddd12fd2
6
+ metadata.gz: cdf0afd337b97afbd7f265319a0f238f946871b57be2e10d43462c77fd10635ca75cfb4c0bc5cc67705e305722fc2abbd31c1f90c442cc473f567c07713c5779
7
+ data.tar.gz: f1ddb2ea14f6167c36b32a8a454bdcbc208e31a3fc5acd99834b7723080efe92cf28bc96bc78858ba72ca4bbfa6529ecffa784f21424509d115bb719fb9a6242
@@ -163,6 +163,7 @@ class Vanagon
163
163
  @check = []
164
164
  @patches = []
165
165
  @files = Set.new
166
+ @ghost_files = Set.new
166
167
  @directories = []
167
168
  @replaces = []
168
169
  @provides = []
@@ -188,6 +189,16 @@ class Vanagon
188
189
  @files.add file
189
190
  end
190
191
 
192
+ # Adds the given file to the list of %ghost files to be added to an
193
+ # rpm spec's %files.
194
+ #
195
+ # @param file [Vanagon::Common::Pathname] file to add to the ghost file set.
196
+ # @return [Set, nil] Returns @ghost_files if the file is successfully added
197
+ # to @ghost_files or nil if the file already exists.
198
+ def add_rpm_ghost_file(file)
199
+ @ghost_files.add file
200
+ end
201
+
191
202
  # Deletes the given file from the list of files and returns @files.
192
203
  #
193
204
  # @param file [String] path of file to delete from a component's list of files
@@ -213,6 +224,14 @@ class Vanagon
213
224
  @files.select(&:configfile?)
214
225
  end
215
226
 
227
+ # Retrieve all the files intended as %ghost entries for an rpm spec
228
+ # %files section.
229
+ #
230
+ # @return [Array] of all the rpm %ghost files.
231
+ def rpm_ghost_files
232
+ @ghost_files.to_a
233
+ end
234
+
216
235
  # @return [Set] a list of unique mirror URIs that should be used to
217
236
  # retrieve the upstream source before attempting to retrieve from
218
237
  # whatever URI was defined for #uri. If no mirrors are set and the
@@ -281,6 +281,16 @@ class Vanagon
281
281
  @component.add_file Vanagon::Common::Pathname.file(target)
282
282
  end
283
283
 
284
+ # Add a %ghost entry to the rpm %files section.
285
+ # This indicates a file that is tracked in the rpm database (the package
286
+ # manages it), but not installed. Used, for example, when setting up
287
+ # alternative packages for use with update-alternatives.
288
+ #
289
+ # @param path [String] installed path of the file.
290
+ def add_rpm_ghost_file(path)
291
+ @component.add_rpm_ghost_file(Vanagon::Common::Pathname.file(path))
292
+ end
293
+
284
294
  # Sets the version for the component
285
295
  #
286
296
  # @param ver [String] version of the component
@@ -140,7 +140,7 @@ class Vanagon
140
140
  @project.make_bill_of_materials(workdir)
141
141
  # Don't generate packaging artifacts if no_packaging is set
142
142
  @project.generate_packaging_artifacts(workdir) unless @project.no_packaging
143
- @project.save_manifest_json
143
+ @project.save_manifest_json(@platform)
144
144
  @engine.ship_workdir(workdir)
145
145
  @engine.dispatch("(cd #{@engine.remote_workdir}; #{@platform.make} #{make_target})")
146
146
  @engine.retrieve_built_artifact(@project.artifacts_to_fetch, @project.no_packaging)
@@ -236,6 +236,16 @@ class Vanagon
236
236
  files.flatten.uniq
237
237
  end
238
238
 
239
+ # Collects any rpm %ghost files supplied by components
240
+ #
241
+ # @return [Array] array of all files to be specified as %ghost entries
242
+ # in an rpm %files section.
243
+ def get_rpm_ghost_files
244
+ files = []
245
+ files.push components.flat_map(&:rpm_ghost_files)
246
+ files.flatten.uniq
247
+ end
248
+
239
249
  # Returns a filtered out set of components only including those
240
250
  # components necessary to build a specific component. This is a
241
251
  # recursive function that will call itself until it gets to a
@@ -683,14 +693,22 @@ class Vanagon
683
693
  end
684
694
  end
685
695
 
686
- # Writes a json file at `ext/build_metadata.json` containing information
696
+ # Writes a json file at `ext/build_metadata.<project>.<platform>.json` containing information
687
697
  # about what went into a built artifact
688
698
  #
689
699
  # @return [Hash] of build information
690
- def save_manifest_json
700
+ def save_manifest_json(platform)
691
701
  manifest = build_manifest_json(true)
692
- FileUtils.mkdir_p 'ext'
693
- File.open(File.join('ext', 'build_metadata.json'), 'w') do |f|
702
+ ext_directory = 'ext'
703
+ FileUtils.mkdir_p ext_directory
704
+
705
+ metadata_file_name = "build_metadata.#{name}.#{platform.name}.json"
706
+ File.open(File.join(ext_directory, metadata_file_name), 'w') do |f|
707
+ f.write(manifest)
708
+ end
709
+
710
+ ## VANAGON-132 Backwards compatibility: make a 'build_metadata.json' file
711
+ File.open(File.join(ext_directory, 'build_metadata.json'), 'w') do |f|
694
712
  f.write(manifest)
695
713
  end
696
714
  end
@@ -366,6 +366,9 @@ fi
366
366
  <%- get_files.each do |file| -%>
367
367
  %attr(<%= file.mode || "-" %>, <%= file.owner || "-" %>, <%= file.group || "-" %>) <%= file.path %>
368
368
  <%- end -%>
369
+ <%- get_rpm_ghost_files.each do |file| -%>
370
+ %ghost <%= file.path %>
371
+ <%- end -%>
369
372
 
370
373
  %changelog
371
374
  * <%= Time.now.strftime("%a %b %d %Y") %> <%= @vendor %> - <%= @version %>-<%= @release %>
@@ -1,5 +1,6 @@
1
1
  require 'vanagon/component/dsl'
2
2
  require 'vanagon/common'
3
+ require 'vanagon/platform'
3
4
  require 'json'
4
5
 
5
6
  describe 'Vanagon::Component::DSL' do
@@ -859,4 +860,13 @@ end" }
859
860
  expect(comp._component.directories.first).to eq(Vanagon::Common::Pathname.new('/a/b/c', mode: '0400', owner: 'olivia', group: 'release-engineering'))
860
861
  end
861
862
  end
863
+
864
+ describe '#add_rpm_ghost_file' do
865
+ let(:comp) { Vanagon::Component::DSL.new('ghost-test', {}, platform) }
866
+
867
+ it 'adds a ghost file as a Pathname object' do
868
+ comp.add_rpm_ghost_file('ghost')
869
+ expect(comp._component.rpm_ghost_files).to eq([Vanagon::Common::Pathname.file('ghost')])
870
+ end
871
+ end
862
872
  end
@@ -241,4 +241,27 @@ describe "Vanagon::Component" do
241
241
  end
242
242
  end
243
243
  end
244
+
245
+ describe 'rpm ghost files' do
246
+ let(:component) { Vanagon::Component.new('ghost-test', {}, {}) }
247
+
248
+ it 'initializes an empty set' do
249
+ expect(component.rpm_ghost_files).to eq([])
250
+ end
251
+
252
+ it 'adds a ghost file' do
253
+ expect(component.add_rpm_ghost_file('ghost')).to eq(Set.new(['ghost']))
254
+ end
255
+
256
+ it 'returns an array of ghost files' do
257
+ component.add_rpm_ghost_file('ghost')
258
+ expect(component.rpm_ghost_files).to eq(['ghost'])
259
+ end
260
+
261
+ it 'ignores duplicates' do
262
+ component.add_rpm_ghost_file('ghost')
263
+ component.add_rpm_ghost_file('ghost')
264
+ expect(component.rpm_ghost_files).to eq(['ghost'])
265
+ end
266
+ end
244
267
  end
@@ -1,6 +1,7 @@
1
1
  require 'vanagon/project'
2
2
  require 'vanagon/driver'
3
3
  require 'vanagon/errors'
4
+ require 'fakefs/spec_helpers'
4
5
 
5
6
  describe 'Vanagon::Project' do
6
7
  let(:component) { double(Vanagon::Component) }
@@ -413,6 +414,50 @@ describe 'Vanagon::Project' do
413
414
  end
414
415
  end
415
416
 
417
+ describe '#save_manifest_json' do
418
+ include FakeFS::SpecHelpers
419
+ let(:platform_name) { 'el-7-x86_64' }
420
+ let(:platform) { Vanagon::Platform.new(platform_name) }
421
+ before(:each) do
422
+ class Vanagon
423
+ class Project
424
+ BUILD_TIME = '2018-07-10T13:34:25-07:00'
425
+ VANAGON_VERSION = '0.0.0-rspec'
426
+ end
427
+ end
428
+
429
+ @proj = Vanagon::Project.new('test-project', platform)
430
+ end
431
+
432
+ it 'should generate a file with the expected build metadata' do
433
+ correct_sample_metadata = {
434
+ 'packaging_type' => { 'vanagon' => '0.0.0-rspec' },
435
+ 'version' => '123abcde',
436
+ 'components' => { 'test-component-10' => { 'version' => '1.2.3' } },
437
+ 'build_time' => '2018-07-10T13:34:25-07:00',
438
+ }
439
+ bad_sample_metadata = {
440
+ 'BAD KEY' => 'BAD VALUE'
441
+ }
442
+ comp1 = Vanagon::Component.new('test-component-10', {}, {})
443
+ comp1.version = '1.2.3'
444
+ @proj.components << comp1
445
+ @proj.version = '123abcde'
446
+ FakeFS do
447
+ @proj.save_manifest_json(platform)
448
+
449
+ old_style_metadata = JSON.parse(File.read('ext/build_metadata.json'))
450
+ expect(old_style_metadata).to eq(correct_sample_metadata)
451
+
452
+ metadata_with_project_and_platform = JSON.parse(
453
+ File.read("ext/build_metadata.test-project.#{platform_name}.json"))
454
+ expect(metadata_with_project_and_platform).to eq(correct_sample_metadata)
455
+ expect(metadata_with_project_and_platform).not_to eq(bad_sample_metadata)
456
+ end
457
+ end
458
+ end
459
+
460
+
416
461
  describe '#publish_yaml_settings' do
417
462
  let(:platform_name) { 'aix-7.2-ppc' }
418
463
  let(:platform) { Vanagon::Platform.new(platform_name) }
@@ -498,4 +543,19 @@ describe 'Vanagon::Project' do
498
543
  expect(proj._project.generate_package).to eq([])
499
544
  end
500
545
  end
546
+
547
+ describe '#get_rpm_ghost_files' do
548
+ it 'returns an empty array when there are no ghost files' do
549
+ proj = Vanagon::Project.new('test-ghost', {})
550
+ expect(proj.get_rpm_ghost_files).to eq([])
551
+ end
552
+
553
+ it 'returns ghost files when some are set' do
554
+ proj = Vanagon::Project.new('test-ghosts', {})
555
+ comp = Vanagon::Component.new('ghosts', {}, {})
556
+ comp.add_rpm_ghost_file('ghost')
557
+ proj.components << comp
558
+ expect(proj.get_rpm_ghost_files).to eq(['ghost'])
559
+ end
560
+ end
501
561
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vanagon
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.15.19
4
+ version: 0.15.20
5
5
  platform: ruby
6
6
  authors:
7
7
  - Puppet Labs
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-12-20 00:00:00.000000000 Z
11
+ date: 2019-02-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: git
@@ -261,7 +261,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
261
261
  version: '0'
262
262
  requirements: []
263
263
  rubyforge_project:
264
- rubygems_version: 2.7.6
264
+ rubygems_version: 2.6.9
265
265
  signing_key:
266
266
  specification_version: 3
267
267
  summary: All of your packages will fit into this van with this one simple trick.