vanagon 0.15.17 → 0.15.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/bin/build_requirements +0 -0
- data/lib/vanagon/component.rb +10 -10
- data/lib/vanagon/component/dsl.rb +10 -7
- data/lib/vanagon/patch.rb +34 -14
- data/resources/rpm/project.spec.erb +6 -1
- data/spec/lib/vanagon/component/dsl_spec.rb +46 -46
- data/spec/lib/vanagon/component/rules_spec.rb +28 -11
- data/spec/lib/vanagon/component_spec.rb +13 -8
- metadata +3 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 98826d92d0eb55918c4a5db6ef30e6216785cb567560ecf34e0254e72ae45336
|
|
4
|
+
data.tar.gz: aec8e9bd65afafc3dd1b83bb5045e9159357d0d5c7c18037217bb61ac71730af
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 8b52b708b61e3361fb37e085f11e5dcb4ce2426fac0ce1435b21a8872fba3772df72c1146c74cafe6f1bbb89bf92f6aafd1d3f71c2a4926e7d77a8762dc4a5e1
|
|
7
|
+
data.tar.gz: 318ec2188ac994dd0c1086fd736d25a6d3dc3474111d7b33127e8fba43bb87e5f0bc6e88cec6cd1d63f6179dd9a8197a87e7362e9d27961d396fcb076ae70cd9
|
data/bin/build_requirements
CHANGED
|
File without changes
|
data/lib/vanagon/component.rb
CHANGED
|
@@ -350,17 +350,17 @@ class Vanagon
|
|
|
350
350
|
|
|
351
351
|
# Fetches patches if any are provided for the project.
|
|
352
352
|
#
|
|
353
|
-
# @param
|
|
354
|
-
def get_patches(
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
raise Vanagon::Error, "Duplicate patch files detected, '#{p.path}' would have overwritten '#{target}'! Please ensure patch file names are unique across all components." if File.exist?(target)
|
|
361
|
-
|
|
362
|
-
FileUtils.cp(p.path, patchdir)
|
|
353
|
+
# @param patch_root [String] working directory to put the patches into
|
|
354
|
+
def get_patches(patch_root)
|
|
355
|
+
return if @patches.empty?
|
|
356
|
+
@patches.each do |patch|
|
|
357
|
+
patch_assembly_path = File.join(patch_root, patch.assembly_path)
|
|
358
|
+
if File.exist?(patch_assembly_path)
|
|
359
|
+
raise Vanagon::Error, "Duplicate patch files detected, '#{patch.origin_path}' would have overwritten '#{patch.assembly_path}'. Ensure all patch file names within a component are unique."
|
|
363
360
|
end
|
|
361
|
+
patch_target_directory = File.dirname(patch_assembly_path)
|
|
362
|
+
FileUtils.mkdir_p(patch_target_directory)
|
|
363
|
+
FileUtils.cp(patch.origin_path, patch_assembly_path)
|
|
364
364
|
end
|
|
365
365
|
end
|
|
366
366
|
|
|
@@ -85,19 +85,22 @@ class Vanagon
|
|
|
85
85
|
# Add a patch to the list of patches to apply to the component's source after unpacking
|
|
86
86
|
#
|
|
87
87
|
# @param patch [String] Path to the patch that should be applied
|
|
88
|
-
# @param
|
|
89
|
-
# @
|
|
90
|
-
# @
|
|
91
|
-
# @
|
|
92
|
-
|
|
93
|
-
|
|
88
|
+
# @param options [Hash] options controlling the patch
|
|
89
|
+
# @option namespace [String] Namespace for package patches
|
|
90
|
+
# @option destination [String] Path to the location where the patch should be applied
|
|
91
|
+
# @option strip [String, Integer] directory levels to skip in applying patch
|
|
92
|
+
# @option fuzz [String, Integer] levels of context miss to ignore in applying patch
|
|
93
|
+
# @option after [String] the location in the makefile where the patch command should be run
|
|
94
|
+
def apply_patch(patch, options = {})
|
|
95
|
+
@component.patches << Vanagon::Patch.new(patch, @component, options)
|
|
94
96
|
end
|
|
95
97
|
|
|
96
98
|
# Loads and parses json from a file. Will treat the keys in the
|
|
97
99
|
# json as methods to invoke on the component in question
|
|
98
100
|
#
|
|
99
101
|
# @param file [String] Path to the json file
|
|
100
|
-
# @raise [RuntimeError] exceptions are raised if there is no file,
|
|
102
|
+
# @raise [RuntimeError] exceptions are raised if there is no file,
|
|
103
|
+
# if it refers to methods that don't exist, or if it does not contain a Hash
|
|
101
104
|
def load_from_json(file)
|
|
102
105
|
if File.exists?(file)
|
|
103
106
|
data = JSON.parse(File.read(file))
|
data/lib/vanagon/patch.rb
CHANGED
|
@@ -2,9 +2,22 @@ require 'vanagon/errors'
|
|
|
2
2
|
|
|
3
3
|
class Vanagon
|
|
4
4
|
class Patch
|
|
5
|
-
# @!attribute [r]
|
|
6
|
-
# @return [String] The path to the patch
|
|
7
|
-
attr_reader :
|
|
5
|
+
# @!attribute [r] origin_path
|
|
6
|
+
# @return [String] The path to the patch before assembly
|
|
7
|
+
attr_reader :origin_path
|
|
8
|
+
|
|
9
|
+
# @!attribute [r] namespace
|
|
10
|
+
# @return [String] The namespace for the patch
|
|
11
|
+
attr_reader :namespace
|
|
12
|
+
|
|
13
|
+
# @!attribute [r] assembly_path
|
|
14
|
+
# @return [String] The path to the patch inside the assembly
|
|
15
|
+
attr_reader :assembly_path
|
|
16
|
+
|
|
17
|
+
# @!attribute [r] destination
|
|
18
|
+
# @return [String] The working directory where this patch will be applied.
|
|
19
|
+
# Only used for post-installation patches.
|
|
20
|
+
attr_reader :destination
|
|
8
21
|
|
|
9
22
|
# @!attribute [r] strip
|
|
10
23
|
# @return [Integer] the number of path components to strip from the patch path
|
|
@@ -18,21 +31,28 @@ class Vanagon
|
|
|
18
31
|
# @return [String] What step should this patch be applied to, one of ["unpack", "install"]
|
|
19
32
|
attr_reader :after
|
|
20
33
|
|
|
21
|
-
#
|
|
22
|
-
|
|
23
|
-
|
|
34
|
+
def initialize(origin_path, component, options) # rubocop:disable Metrics/AbcSize,Metrics/PerceivedComplexity
|
|
35
|
+
valid_keys = %i[namespace destination strip fuzz after]
|
|
36
|
+
bad_keys = options.each_key.reject { |k| valid_keys.include? k }
|
|
37
|
+
|
|
38
|
+
unless bad_keys.empty?
|
|
39
|
+
raise Vanagon::Error, "Bad options in patch initialization: #{bad_keys}."
|
|
40
|
+
end
|
|
24
41
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
@
|
|
28
|
-
@strip = strip
|
|
29
|
-
@fuzz = fuzz
|
|
30
|
-
@after = after
|
|
31
|
-
|
|
42
|
+
@origin_path = origin_path
|
|
43
|
+
@namespace = options[:namespace] || component.name
|
|
44
|
+
@assembly_path = "patches/#{@namespace}/#{File.basename(@origin_path)}"
|
|
45
|
+
@strip = options[:strip] || 1
|
|
46
|
+
@fuzz = options[:fuzz] || 0
|
|
47
|
+
@after = options[:after] || 'unpack'
|
|
48
|
+
unless ['unpack', 'install'].include?(@after)
|
|
49
|
+
raise Vanagon::Error, 'Only "unpack" or "install" permitted for "after" option.'
|
|
50
|
+
end
|
|
51
|
+
@destination = options[:destination] || component.dirname
|
|
32
52
|
end
|
|
33
53
|
|
|
34
54
|
def cmd(platform)
|
|
35
|
-
"#{platform.patch} --strip=#{@strip} --fuzz=#{@fuzz} --ignore-whitespace --no-backup-if-mismatch < $(workdir)
|
|
55
|
+
return "#{platform.patch} --strip=#{@strip} --fuzz=#{@fuzz} --ignore-whitespace --no-backup-if-mismatch < $(workdir)/#{@assembly_path}"
|
|
36
56
|
end
|
|
37
57
|
end
|
|
38
58
|
end
|
|
@@ -68,7 +68,12 @@ Requires: <%= requires %>
|
|
|
68
68
|
# did not specify a dependency on these.
|
|
69
69
|
# In the future, we will supress pre/post scripts completely if there's nothing
|
|
70
70
|
# specified by the project or the components.
|
|
71
|
-
<%-
|
|
71
|
+
<%- if @platform.is_fedora? && @platform.os_version.to_i >= 29 -%>
|
|
72
|
+
Requires(pre): /usr/bin/mkdir
|
|
73
|
+
Requires(pre): /usr/bin/touch
|
|
74
|
+
Requires(post): /usr/bin/mkdir
|
|
75
|
+
Requires(post): /usr/bin/touch
|
|
76
|
+
<%- elsif !@platform.is_aix? -%>
|
|
72
77
|
Requires(pre): /bin/mkdir
|
|
73
78
|
Requires(pre): /bin/touch
|
|
74
79
|
Requires(post): /bin/mkdir
|
|
@@ -220,80 +220,80 @@ end" }
|
|
|
220
220
|
|
|
221
221
|
describe '#apply_patch' do
|
|
222
222
|
it 'adds the patch to the list of patches' do
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
expect(
|
|
227
|
-
expect(
|
|
228
|
-
expect(
|
|
223
|
+
dsl = Vanagon::Component::DSL.new('patch-test', {}, {})
|
|
224
|
+
dsl.apply_patch('patch_file1')
|
|
225
|
+
dsl.apply_patch('patch_file2')
|
|
226
|
+
expect(dsl._component.patches.count).to eq 2
|
|
227
|
+
expect(dsl._component.patches.first.origin_path).to eq 'patch_file1'
|
|
228
|
+
expect(dsl._component.patches.last.origin_path).to eq 'patch_file2'
|
|
229
229
|
end
|
|
230
230
|
|
|
231
231
|
it 'can specify strip and fuzz' do
|
|
232
|
-
|
|
232
|
+
dsl = Vanagon::Component::DSL.new('patch-test', {}, {})
|
|
233
233
|
# This patch must be amazing
|
|
234
|
-
|
|
235
|
-
expect(
|
|
236
|
-
expect(
|
|
237
|
-
expect(
|
|
238
|
-
expect(
|
|
234
|
+
dsl.apply_patch('patch_file1', fuzz: 12, strip: 1000000)
|
|
235
|
+
expect(dsl._component.patches.count).to eq 1
|
|
236
|
+
expect(dsl._component.patches.first.origin_path).to eq 'patch_file1'
|
|
237
|
+
expect(dsl._component.patches.first.fuzz).to eq 12
|
|
238
|
+
expect(dsl._component.patches.first.strip).to eq 1000000
|
|
239
239
|
end
|
|
240
240
|
|
|
241
241
|
it 'can specify a directory where the patch should be applied' do
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
expect(
|
|
245
|
-
expect(
|
|
246
|
-
expect(
|
|
242
|
+
dsl = Vanagon::Component::DSL.new('patch-test', {}, {})
|
|
243
|
+
dsl.apply_patch('patch_file1', destination: 'random/install/directory')
|
|
244
|
+
expect(dsl._component.patches.count).to eq 1
|
|
245
|
+
expect(dsl._component.patches.first.origin_path).to eq 'patch_file1'
|
|
246
|
+
expect(dsl._component.patches.first.destination).to eq 'random/install/directory'
|
|
247
247
|
end
|
|
248
248
|
|
|
249
249
|
it 'can specify when to try to apply the patch' do
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
expect(
|
|
253
|
-
expect(
|
|
254
|
-
expect(
|
|
250
|
+
dsl = Vanagon::Component::DSL.new('patch-test', {}, {})
|
|
251
|
+
dsl.apply_patch('patch_file1', after: 'install')
|
|
252
|
+
expect(dsl._component.patches.count).to eq 1
|
|
253
|
+
expect(dsl._component.patches.first.origin_path).to eq 'patch_file1'
|
|
254
|
+
expect(dsl._component.patches.first.after).to eq 'install'
|
|
255
255
|
end
|
|
256
256
|
|
|
257
257
|
it 'will default the patch timing to after the source is unpacked' do
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
expect(
|
|
261
|
-
expect(
|
|
262
|
-
expect(
|
|
258
|
+
dsl = Vanagon::Component::DSL.new('patch-test', {}, {})
|
|
259
|
+
dsl.apply_patch('patch_file1')
|
|
260
|
+
expect(dsl._component.patches.count).to eq 1
|
|
261
|
+
expect(dsl._component.patches.first.origin_path).to eq 'patch_file1'
|
|
262
|
+
expect(dsl._component.patches.first.after).to eq 'unpack'
|
|
263
263
|
end
|
|
264
264
|
|
|
265
265
|
it 'will fail if the user wants to install the patch at an unsupported step' do
|
|
266
|
-
|
|
267
|
-
expect {
|
|
266
|
+
dsl = Vanagon::Component::DSL.new('patch-test', {}, {})
|
|
267
|
+
expect { dsl.apply_patch('patch_file1', after: 'delivery') }.to raise_error(Vanagon::Error)
|
|
268
268
|
end
|
|
269
269
|
|
|
270
270
|
it 'can specify a directory where the patch should be applied' do
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
expect(
|
|
274
|
-
expect(
|
|
275
|
-
expect(
|
|
271
|
+
dsl = Vanagon::Component::DSL.new('patch-test', {}, {})
|
|
272
|
+
dsl.apply_patch('patch_file1', destination: 'random/install/directory')
|
|
273
|
+
expect(dsl._component.patches.count).to eq 1
|
|
274
|
+
expect(dsl._component.patches.first.origin_path).to eq 'patch_file1'
|
|
275
|
+
expect(dsl._component.patches.first.destination).to eq 'random/install/directory'
|
|
276
276
|
end
|
|
277
277
|
|
|
278
278
|
it 'can specify when to try to apply the patch' do
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
expect(
|
|
282
|
-
expect(
|
|
283
|
-
expect(
|
|
279
|
+
dsl = Vanagon::Component::DSL.new('patch-test', {}, {})
|
|
280
|
+
dsl.apply_patch('patch_file1', after: 'install')
|
|
281
|
+
expect(dsl._component.patches.count).to eq 1
|
|
282
|
+
expect(dsl._component.patches.first.origin_path).to eq 'patch_file1'
|
|
283
|
+
expect(dsl._component.patches.first.after).to eq 'install'
|
|
284
284
|
end
|
|
285
285
|
|
|
286
286
|
it 'will default the patch timing to after the source is unpacked' do
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
expect(
|
|
290
|
-
expect(
|
|
291
|
-
expect(
|
|
287
|
+
dsl = Vanagon::Component::DSL.new('patch-test', {}, {})
|
|
288
|
+
dsl.apply_patch('patch_file1')
|
|
289
|
+
expect(dsl._component.patches.count).to eq 1
|
|
290
|
+
expect(dsl._component.patches.first.origin_path).to eq 'patch_file1'
|
|
291
|
+
expect(dsl._component.patches.first.after).to eq 'unpack'
|
|
292
292
|
end
|
|
293
293
|
|
|
294
294
|
it 'will fail if the user wants to install the patch at an unsupported step' do
|
|
295
|
-
|
|
296
|
-
expect {
|
|
295
|
+
dsl = Vanagon::Component::DSL.new('patch-test', {}, {})
|
|
296
|
+
expect { dsl.apply_patch('patch_file1', after: 'delivery') }.to raise_error(Vanagon::Error)
|
|
297
297
|
end
|
|
298
298
|
end
|
|
299
299
|
|
|
@@ -66,17 +66,28 @@ describe Vanagon::Component::Rules do
|
|
|
66
66
|
expect(rule.recipe.size).to eq 1
|
|
67
67
|
end
|
|
68
68
|
|
|
69
|
+
it "rejects bad options" do
|
|
70
|
+
expect { Vanagon::Patch.new('/foo/patch0', component, REALLYBADARGUMENT: 'bad-value') }.to raise_error(Vanagon::Error, /Bad options in patch initialization/i)
|
|
71
|
+
end
|
|
72
|
+
|
|
69
73
|
it "applies each listed patch in order when patches are set" do
|
|
70
74
|
component.patches = [
|
|
71
|
-
Vanagon::Patch.new('/foo/patch0',
|
|
72
|
-
|
|
73
|
-
|
|
75
|
+
Vanagon::Patch.new('/foo/patch0', component,
|
|
76
|
+
namespace: component.name, strip: '1', fuzz: '0',
|
|
77
|
+
after: 'unpack', destination: '/foo/bar'),
|
|
78
|
+
Vanagon::Patch.new('/foo/patch1', component,
|
|
79
|
+
namespace: component.name, strip: '2', fuzz: '1',
|
|
80
|
+
after: 'unpack', destination: '/foo/bar'),
|
|
81
|
+
Vanagon::Patch.new('/foo/postinstall/patch1', component,
|
|
82
|
+
namespace: component.name,
|
|
83
|
+
strip: '2', fuzz: '1', after: 'install',
|
|
84
|
+
destination: '/foo/bar')
|
|
74
85
|
]
|
|
75
86
|
expect(rule.recipe.first).to eq(
|
|
76
87
|
[
|
|
77
88
|
"cd /foo/bar",
|
|
78
|
-
"/usr/bin/patch --strip=1 --fuzz=0 --ignore-whitespace --no-backup-if-mismatch < $(workdir)
|
|
79
|
-
"/usr/bin/patch --strip=2 --fuzz=1 --ignore-whitespace --no-backup-if-mismatch < $(workdir)
|
|
89
|
+
"/usr/bin/patch --strip=1 --fuzz=0 --ignore-whitespace --no-backup-if-mismatch < $(workdir)/#{component.patches[0].assembly_path}",
|
|
90
|
+
"/usr/bin/patch --strip=2 --fuzz=1 --ignore-whitespace --no-backup-if-mismatch < $(workdir)/#{component.patches[1].assembly_path}"
|
|
80
91
|
].join(" && \\\n")
|
|
81
92
|
)
|
|
82
93
|
end
|
|
@@ -116,7 +127,7 @@ describe Vanagon::Component::Rules do
|
|
|
116
127
|
component.environment.merge({"PATH" => "/opt/pl-build-tools/bin:$(PATH)"})
|
|
117
128
|
expect(rule.recipe[1]).to eq(
|
|
118
129
|
[
|
|
119
|
-
'export PATH="/opt/pl-build-tools/bin:$(PATH)"',
|
|
130
|
+
'export PATH="/opt/pl-build-tools/bin:$(PATH)"',
|
|
120
131
|
"cd /foo/bar",
|
|
121
132
|
"./configure",
|
|
122
133
|
"cmake .."
|
|
@@ -241,13 +252,19 @@ describe Vanagon::Component::Rules do
|
|
|
241
252
|
it "applies any after-install patches" do
|
|
242
253
|
component.install = ["make install"]
|
|
243
254
|
component.patches = [
|
|
244
|
-
Vanagon::Patch.new('/foo/patch0',
|
|
245
|
-
|
|
246
|
-
|
|
255
|
+
Vanagon::Patch.new('/foo/patch0', component,
|
|
256
|
+
namespace: component.name, strip: 1, fuzz: 0,
|
|
257
|
+
after: 'unpack', destination: '/foo/bar'),
|
|
258
|
+
Vanagon::Patch.new('/foo/postinstall/patch0', component,
|
|
259
|
+
namespace: component.name, strip: 3,
|
|
260
|
+
fuzz: 9, after: 'install', destination: '/foo/baz'),
|
|
261
|
+
Vanagon::Patch.new('/foo/postinstall/patch1', component,
|
|
262
|
+
namespace: component.name, strip: 4,
|
|
263
|
+
fuzz: 10, after: 'install', destination: '/foo/quux'),
|
|
247
264
|
]
|
|
248
265
|
|
|
249
|
-
expect(rule.recipe[1]).to eq("cd /foo/baz && /usr/bin/patch --strip=3 --fuzz=9 --ignore-whitespace --no-backup-if-mismatch < $(workdir)
|
|
250
|
-
expect(rule.recipe[2]).to eq("cd /foo/quux && /usr/bin/patch --strip=4 --fuzz=10 --ignore-whitespace --no-backup-if-mismatch < $(workdir)
|
|
266
|
+
expect(rule.recipe[1]).to eq("cd /foo/baz && /usr/bin/patch --strip=3 --fuzz=9 --ignore-whitespace --no-backup-if-mismatch < $(workdir)/#{component.patches[1].assembly_path}")
|
|
267
|
+
expect(rule.recipe[2]).to eq("cd /foo/quux && /usr/bin/patch --strip=4 --fuzz=10 --ignore-whitespace --no-backup-if-mismatch < $(workdir)/#{component.patches[2].assembly_path}")
|
|
251
268
|
end
|
|
252
269
|
|
|
253
270
|
it_behaves_like "a rule that touches the target file"
|
|
@@ -217,22 +217,27 @@ describe "Vanagon::Component" do
|
|
|
217
217
|
plat._platform
|
|
218
218
|
end
|
|
219
219
|
|
|
220
|
-
let(:
|
|
220
|
+
let(:dsl_1) { Vanagon::Component::DSL.new('patches-test-1', {}, platform) }
|
|
221
|
+
let(:dsl_2) { Vanagon::Component::DSL.new('patches-test-2', {}, platform) }
|
|
221
222
|
|
|
222
223
|
context("when new patch file would overwrite existing patch file") do
|
|
223
|
-
let(:
|
|
224
|
+
let(:patch_file_1) { 'path/to/test.patch_1' }
|
|
225
|
+
let(:patch_file_2) { 'path/to/test.patch_2' }
|
|
224
226
|
|
|
225
227
|
before :each do
|
|
226
228
|
allow(FileUtils).to receive(:mkdir_p)
|
|
227
229
|
allow(FileUtils).to receive(:cp)
|
|
228
|
-
|
|
229
|
-
expect(File).to receive(:exist?).with(File.join(@workdir, 'patches', File.basename(patch_file))).and_return(true)
|
|
230
|
-
|
|
231
|
-
component.apply_patch(patch_file)
|
|
232
230
|
end
|
|
233
231
|
|
|
234
|
-
it "fails the build" do
|
|
235
|
-
expect
|
|
232
|
+
it "fails the build with the same namespace" do
|
|
233
|
+
expect(File).to receive(:exist?).with(/.*\/.*test\.patch_1/).and_return(true)
|
|
234
|
+
dsl_1.apply_patch(patch_file_1)
|
|
235
|
+
expect { dsl_1._component.get_patches(@workdir) }.to raise_error(Vanagon::Error, /duplicate patch files/i)
|
|
236
|
+
end
|
|
237
|
+
it "works with different namespaces" do
|
|
238
|
+
expect(File).to receive(:exist?).with(/.*\/.*test\.patch_2/).and_return(false)
|
|
239
|
+
dsl_2.apply_patch(patch_file_2, namespace: 'foo')
|
|
240
|
+
expect { dsl_2._component.get_patches(@workdir) }.to_not raise_error
|
|
236
241
|
end
|
|
237
242
|
end
|
|
238
243
|
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.
|
|
4
|
+
version: 0.15.18
|
|
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-
|
|
11
|
+
date: 2018-12-10 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.6
|
|
264
|
+
rubygems_version: 2.7.6
|
|
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.
|