simp-rake-helpers 5.11.6 → 5.12.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (94) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +28 -0
  3. data/CONTRIBUTING.md +1 -1
  4. data/README.md +1 -1
  5. data/lib/simp/command_utils.rb +21 -0
  6. data/lib/simp/local_gpg_signing_key.rb +128 -79
  7. data/lib/simp/rake.rb +3 -17
  8. data/lib/simp/rake/build/pkg.rb +102 -40
  9. data/lib/simp/rake/helpers/version.rb +1 -1
  10. data/lib/simp/rake/pkg.rb +5 -1
  11. data/lib/simp/rake/pupmod/helpers.rb +2 -0
  12. data/lib/simp/rake/rubygem.rb +5 -1
  13. data/lib/simp/rpm.rb +10 -127
  14. data/lib/simp/rpm_signer.rb +321 -0
  15. data/spec/acceptance/00_pkg_rpm_custom_scriptlets_spec.rb +18 -19
  16. data/spec/acceptance/10_pkg_rpm_spec.rb +46 -48
  17. data/spec/acceptance/50_local_gpg_signing_key_spec.rb +7 -3
  18. data/spec/acceptance/55_build_pkg_signing_spec.rb +293 -42
  19. data/spec/acceptance/files/testpackage/README +8 -0
  20. data/spec/acceptance/files/testpackage/spec/classes/init_spec.rb +1 -0
  21. data/spec/acceptance/files/testpackage/spec/files/mock_something.rb +3 -0
  22. data/spec/acceptance/files/testpackage/utils/convert_v1_to_v2.rb +3 -0
  23. data/spec/acceptance/nodesets/default.yml +15 -2
  24. data/spec/acceptance/support/build_project_helpers.rb +32 -8
  25. data/spec/lib/simp/command_utils_spec.rb +29 -0
  26. data/spec/lib/simp/local_gpg_signing_key_spec.rb.beaker-only +115 -18
  27. data/spec/lib/simp/rake/pupmod/fixtures/simpmod/README.md +2 -2
  28. data/spec/lib/simp/rpm_signer_spec.rb +98 -0
  29. data/spec/lib/simp/rpm_spec.rb +0 -6
  30. metadata +12 -67
  31. data/.travis.yml +0 -41
  32. data/spec/acceptance/20_pkg_rpm_upgrade_spec.rb +0 -236
  33. data/spec/acceptance/files/custom_scriptlet_triggers/pupmod-new-package-2.1/CHANGELOG +0 -2
  34. data/spec/acceptance/files/custom_scriptlet_triggers/pupmod-new-package-2.1/Rakefile +0 -3
  35. data/spec/acceptance/files/custom_scriptlet_triggers/pupmod-new-package-2.1/build/rpm_metadata/custom/overrides +0 -14
  36. data/spec/acceptance/files/custom_scriptlet_triggers/pupmod-new-package-2.1/build/rpm_metadata/requires +0 -1
  37. data/spec/acceptance/files/custom_scriptlet_triggers/pupmod-new-package-2.1/metadata.json +0 -33
  38. data/spec/acceptance/files/custom_scriptlet_triggers/pupmod-new-package-3.0/CHANGELOG +0 -2
  39. data/spec/acceptance/files/custom_scriptlet_triggers/pupmod-new-package-3.0/Rakefile +0 -3
  40. data/spec/acceptance/files/custom_scriptlet_triggers/pupmod-new-package-3.0/build/rpm_metadata/custom/overrides +0 -14
  41. data/spec/acceptance/files/custom_scriptlet_triggers/pupmod-new-package-3.0/build/rpm_metadata/requires +0 -1
  42. data/spec/acceptance/files/custom_scriptlet_triggers/pupmod-new-package-3.0/metadata.json +0 -33
  43. data/spec/acceptance/files/custom_scriptlet_triggers/pupmod-old-package-1.0/CHANGELOG +0 -2
  44. data/spec/acceptance/files/custom_scriptlet_triggers/pupmod-old-package-1.0/Rakefile +0 -3
  45. data/spec/acceptance/files/custom_scriptlet_triggers/pupmod-old-package-1.0/build/rpm_metadata/requires +0 -1
  46. data/spec/acceptance/files/custom_scriptlet_triggers/pupmod-old-package-1.0/metadata.json +0 -33
  47. data/spec/acceptance/files/custom_scriptlet_triggers/pupmod-old-package-2.0/CHANGELOG +0 -2
  48. data/spec/acceptance/files/custom_scriptlet_triggers/pupmod-old-package-2.0/Rakefile +0 -3
  49. data/spec/acceptance/files/custom_scriptlet_triggers/pupmod-old-package-2.0/build/rpm_metadata/requires +0 -1
  50. data/spec/acceptance/files/custom_scriptlet_triggers/pupmod-old-package-2.0/metadata.json +0 -33
  51. data/spec/acceptance/files/custom_scriptlet_triggers/pupmod-old-package-2.2/CHANGELOG +0 -2
  52. data/spec/acceptance/files/custom_scriptlet_triggers/pupmod-old-package-2.2/Rakefile +0 -3
  53. data/spec/acceptance/files/custom_scriptlet_triggers/pupmod-old-package-2.2/build/rpm_metadata/custom/overrides +0 -14
  54. data/spec/acceptance/files/custom_scriptlet_triggers/pupmod-old-package-2.2/build/rpm_metadata/requires +0 -1
  55. data/spec/acceptance/files/custom_scriptlet_triggers/pupmod-old-package-2.2/metadata.json +0 -33
  56. data/spec/acceptance/files/mock_packages/pupmod-puppetlabs-stdlib.spec +0 -32
  57. data/spec/acceptance/files/mock_packages/pupmod-simp-foo.spec +0 -32
  58. data/spec/acceptance/files/mock_packages/pupmod-simp-simplib.spec +0 -32
  59. data/spec/acceptance/files/mock_packages/rpmbuild.sh +0 -25
  60. data/spec/acceptance/files/mock_packages/simp-adapter.spec +0 -43
  61. data/spec/acceptance/files/mock_packages/simp-adapter/etc/simp/adapter_config.yaml +0 -3
  62. data/spec/acceptance/files/mock_packages/simp-adapter/usr/local/sbin/simp_rpm_helper +0 -495
  63. data/spec/acceptance/files/package_upgrades/pupmod-simp-testpackage-1.0/CHANGELOG +0 -2
  64. data/spec/acceptance/files/package_upgrades/pupmod-simp-testpackage-1.0/Rakefile +0 -3
  65. data/spec/acceptance/files/package_upgrades/pupmod-simp-testpackage-1.0/build/rpm_metadata/requires +0 -2
  66. data/spec/acceptance/files/package_upgrades/pupmod-simp-testpackage-1.0/data/os/CentOS.yaml +0 -2
  67. data/spec/acceptance/files/package_upgrades/pupmod-simp-testpackage-1.0/data/os/RedHat.yaml +0 -2
  68. data/spec/acceptance/files/package_upgrades/pupmod-simp-testpackage-1.0/hiera.yaml +0 -14
  69. data/spec/acceptance/files/package_upgrades/pupmod-simp-testpackage-1.0/manifests/init.pp +0 -2
  70. data/spec/acceptance/files/package_upgrades/pupmod-simp-testpackage-1.0/metadata.json +0 -37
  71. data/spec/acceptance/files/package_upgrades/pupmod-simp-testpackage-2.0/CHANGELOG +0 -5
  72. data/spec/acceptance/files/package_upgrades/pupmod-simp-testpackage-2.0/Rakefile +0 -3
  73. data/spec/acceptance/files/package_upgrades/pupmod-simp-testpackage-2.0/build/rpm_metadata/requires +0 -2
  74. data/spec/acceptance/files/package_upgrades/pupmod-simp-testpackage-2.0/data/os/CentOS.yaml +0 -2
  75. data/spec/acceptance/files/package_upgrades/pupmod-simp-testpackage-2.0/data/os/RedHat.yaml +0 -2
  76. data/spec/acceptance/files/package_upgrades/pupmod-simp-testpackage-2.0/hiera.yaml +0 -14
  77. data/spec/acceptance/files/package_upgrades/pupmod-simp-testpackage-2.0/manifests/init.pp +0 -3
  78. data/spec/acceptance/files/package_upgrades/pupmod-simp-testpackage-2.0/metadata.json +0 -37
  79. data/spec/lib/simp/ci/files/job_broken_link_nodeset/spec/acceptance/suites/default/nodesets +0 -1
  80. data/spec/lib/simp/ci/files/job_invalid_nodeset/spec/acceptance/suites/default/nodesets +0 -1
  81. data/spec/lib/simp/ci/files/job_invalid_suite/spec/acceptance/suites/default/nodesets +0 -1
  82. data/spec/lib/simp/ci/files/job_missing_nodeset/spec/acceptance/suites/default/nodesets +0 -1
  83. data/spec/lib/simp/ci/files/job_missing_suite_and_nodeset/spec/acceptance/suites/default/nodesets +0 -1
  84. data/spec/lib/simp/ci/files/multiple_invalid_jobs/spec/acceptance/suites/default/nodesets +0 -1
  85. data/spec/lib/simp/ci/files/multiple_valid_jobs/spec/acceptance/suites/default/nodesets +0 -1
  86. data/spec/lib/simp/ci/files/no_gitlab_config_with_tests/spec/acceptance/suites/default/nodesets +0 -1
  87. data/spec/lib/simp/ci/files/no_gitlab_config_without_tests/spec/acceptance/suites/default/nodesets +0 -1
  88. data/spec/lib/simp/ci/files/suite_skeleton_only/spec/acceptance/nodesets/default.yml +0 -1
  89. data/spec/lib/simp/ci/files/suite_skeleton_only/spec/acceptance/suites/default/nodesets +0 -1
  90. data/spec/lib/simp/ci/files/valid_job_nodeset_dir_link/spec/acceptance/suites/default/nodesets +0 -1
  91. data/spec/lib/simp/ci/files/valid_job_nodeset_link/spec/acceptance/suites/default/nodesets/default.yml +0 -1
  92. data/spec/lib/simp/files/build/testpackage.spec +0 -1
  93. data/spec/lib/simp/rake/pupmod/fixtures/simpmod/spec/acceptance/nodesets/default.yml +0 -1
  94. data/spec/lib/simp/rake/pupmod/fixtures/simpmod/spec/acceptance/suites/default/nodesets +0 -1
@@ -1,3 +0,0 @@
1
- ---
2
- copy_rpm_data: true
3
- target_directory: /opt/test/puppet/code
@@ -1,495 +0,0 @@
1
- #!/opt/puppetlabs/puppet/bin/ruby
2
- #
3
- # Purpose
4
- # -------
5
- #
6
- # This script is meant to be called by the %preun and %postttrans sections of
7
- # the various SIMP Puppet module RPMs.
8
- #
9
- # The purpose of the script is to provide helper methods that correctly
10
- # scaffold the system in such a way that all SIMP Puppet Modules can be
11
- # installed via RPM to a single location and subsequently can be copied into
12
- # the standard SIMP installation location based on the version of Puppet that
13
- # is installed.
14
- #
15
- # Care is taken that, should the target directory be managed via 'git', this
16
- # script will do nothing to harm the managed installation in any way. This
17
- # ensures that the SIMP modules have maximum compatibility with the widest
18
- # possible range of Puppet module best practices for management while ensuring
19
- # that the RPM installations and upgrades can proceed in a seamless fashion
20
- # over time.
21
- #
22
- # Should the 'simp' environment not be found, the script will simply exit
23
- # without copying any files.
24
- #
25
- # Configuration
26
- # -------------
27
- #
28
- # A configuration file may be placed at /etc/simp/adapter_config.yaml. The
29
- # file must consist of proper YAML as demonstrated in the example below which
30
- # lists the default options.
31
- #
32
- # Any configuration options that are not understood will be ignored.
33
- #
34
- # ```yaml
35
- # ---
36
- # # Target directory
37
- # # May be set to a fully qualified path or 'auto'
38
- # # If set to 'auto', the directory will be determined from puppet itself
39
- #
40
- # target_directory : 'auto'
41
- #
42
- # # Copy the RPM data to the target directory
43
- #
44
- # copy_rpm_data : false
45
- #
46
- # ```
47
- #
48
-
49
- require 'facter'
50
- require 'fileutils'
51
- require 'yaml'
52
- require 'optparse'
53
- require 'ostruct'
54
- require 'find'
55
-
56
- # Make sure we can find the Puppet executables
57
- ENV['PATH'] += ':/opt/puppetlabs/bin'
58
-
59
- class SimpRpmHelper
60
- def initialize
61
- @program_name = File.basename(__FILE__)
62
-
63
- # A list of modules that should never be touched once installed
64
- @safe_modules = ['site']
65
- end
66
-
67
- def debug(msg)
68
- # SIMP RPMs do not enable debug when they call this script. So, if
69
- # you want to debug an RPM problem with this script, comment out
70
- # the line below.
71
- return unless @options.debug
72
- msg.split("\n").each do |line|
73
- puts ">>>#{@program_name} DEBUG: #{line}"
74
- end
75
- end
76
-
77
- def info(msg)
78
- # When these messages get written out in an RPM upgrade, name of program
79
- # is helpful to end user
80
- puts "#{@program_name}: #{msg}"
81
- end
82
-
83
- # Get the Puppet configuration parameters currently in use
84
- def get_puppet_config
85
- system_config = %x{puppet config --section master print}
86
-
87
- config_hash = Hash.new
88
-
89
- system_config.each_line do |line|
90
- k,v = line.split('=')
91
- config_hash[k.strip] = v.strip
92
- end
93
-
94
- return config_hash
95
- end
96
-
97
- # Determine whether the passed path is under management by git or svn
98
- def is_managed?(path)
99
- # Short circuit if the directory is not present
100
- return false unless File.directory?(path)
101
-
102
- git = Facter::Core::Execution.which('git')
103
- svn = Facter::Core::Execution.which('svn')
104
-
105
- Dir.chdir(path) do
106
- if git
107
- %x{#{git} ls-files . --error-unmatch &> /dev/null}
108
-
109
- return true if $?.success?
110
- end
111
-
112
- if svn
113
- %x{#{svn} info &> /dev/null}
114
-
115
- return true if $?.success?
116
- end
117
- end
118
-
119
- return false
120
- end
121
-
122
- def parse_options(args)
123
-
124
- @options = OpenStruct.new
125
- @options.config_file = '/etc/simp/adapter_config.yaml'
126
- @options.preserve = false
127
-
128
- all_opts = OptionParser.new do |opts|
129
- opts.banner = "Usage: #{@program_name} [options]"
130
-
131
- opts.separator ''
132
-
133
- opts.on(
134
- '--rpm_dir PATH',
135
- 'The directory into which the RPM source material is installed'
136
- ) do |arg|
137
- @options.rpm_dir = arg.strip
138
- @options.module_name = File.basename(@options.rpm_dir)
139
- end
140
-
141
- opts.on(
142
- '--rpm_section SECTION',
143
- 'The section of the RPM from which the script is being called.',
144
- " Must be one of 'pre', 'preun', 'postun', 'posttrans'"
145
- ) do |arg|
146
- @options.rpm_section = arg.strip
147
- end
148
-
149
- opts.on(
150
- '--rpm_status STATUS',
151
- 'The status code passed to the RPM section'
152
- ) do |arg|
153
- @options.rpm_status = arg.strip
154
- end
155
-
156
- opts.on(
157
- '-f CONFIG_FILE',
158
- '--config CONFIG_FILE',
159
- 'The configuration file to use.',
160
- " Default: #{@options.config_file}"
161
- ) do |arg|
162
- @options.config_file = arg.strip
163
- end
164
-
165
- opts.on(
166
- '-p',
167
- '--preserve',
168
- "Preserve material in 'target_dir' that is not in 'rpm_dir'"
169
- ) do |arg|
170
- @options.preserve = true
171
- end
172
-
173
- opts.on(
174
- '-e',
175
- '--enforce',
176
- 'If set, enforce the copy, regardless of the setting in the config file',
177
- ' Default: false'
178
- ) do |arg|
179
- @options.copy_rpm_data = true
180
- end
181
-
182
- opts.on(
183
- '-t DIR',
184
- '--target_dir DIR',
185
- "The subdirectory of #{simp_target_dir('')}",
186
- 'into which to copy the materials.',
187
- " Default: #{simp_target_dir.gsub(/#{simp_target_dir('')}/,'')}"
188
- ) do |arg|
189
- @options.target_dir = simp_target_dir(arg.strip)
190
- end
191
-
192
- opts.on(
193
- '-v',
194
- '--verbose',
195
- 'Print out debug info when processing.'
196
- ) do
197
- @options.debug = true
198
- end
199
-
200
- opts.on(
201
- '-h',
202
- '--help',
203
- 'Help Message'
204
- ) do
205
- puts opts
206
- @options.help_requested = true
207
- end
208
- end
209
-
210
- begin
211
- all_opts.parse!(args)
212
- rescue OptionParser::ParseError => e
213
- msg = "Error: #{e}\n\n#{all_opts}"
214
- raise(msg)
215
- end
216
-
217
- validate_options(all_opts.to_s)
218
- end
219
-
220
- # Process the config, validate the entries and do some munging
221
- # Sets @options hash.
222
- def process_config
223
- # Defaults
224
- config = {
225
- 'target_directory' => 'auto',
226
- 'copy_rpm_data' => false
227
- }
228
-
229
- if File.exist?(@options.config_file)
230
- begin
231
- system_config = YAML.load_file(@options.config_file)
232
- if system_config
233
- config.merge!(system_config)
234
- end
235
- rescue
236
- raise("Error: Config file '#{@options.config_file}' could not be processed")
237
- end
238
- end
239
-
240
- if @options.copy_rpm_data.nil?
241
- @options.copy_rpm_data = (config['copy_rpm_data'].to_s == 'true')
242
- end
243
-
244
- if @options.target_dir.nil? && config['target_directory']
245
- if config['target_directory'] == 'auto'
246
- @options.target_dir = simp_target_dir
247
- else
248
- unless config['target_directory'][0].chr == '/'
249
- raise("Error: 'target_directory' in '#{@options.config_file}' must be an absolute path")
250
- end
251
-
252
- @options.target_dir = config['target_directory'].strip
253
- end
254
- end
255
- end
256
-
257
- def puppet_codedir
258
- # Figure out where the Puppet code should go
259
- # Puppet 4+
260
- code_dir = puppet_config['codedir']
261
- if !code_dir || code_dir.empty?
262
- code_dir = puppet_config['confdir']
263
- end
264
-
265
- return code_dir
266
- end
267
-
268
- def puppet_config
269
- unless @puppet_config
270
- @puppet_config = get_puppet_config
271
- end
272
- @puppet_config
273
- end
274
-
275
-
276
- def puppet_group
277
- puppet_config['group']
278
- end
279
-
280
- # Return the target installation directory
281
- def simp_target_dir(subdir=File.join('simp','modules'))
282
- install_target = puppet_codedir
283
-
284
- if install_target.empty?
285
- raise('Error: Could not find a Puppet code directory for installation')
286
- end
287
-
288
- install_target = File.join(install_target,'environments', subdir)
289
-
290
- return install_target
291
- end
292
-
293
- # Input Validation
294
- def validate_options(usage)
295
- return if @options.help_requested
296
-
297
- unless @options.rpm_dir
298
- raise("Error: 'rpm_dir' is required\n#{usage}")
299
- end
300
-
301
- unless @options.rpm_status
302
- raise("Error: 'rpm_status' is required\n#{usage}")
303
- end
304
-
305
- unless @options.rpm_section
306
- raise("Error: 'rpm_section' is required\n#{usage}")
307
- end
308
-
309
- # We allow 'post' for backward compatibility with SIMP RPMs that use
310
- # this, but copying over files in the 'post' during an upgrade is
311
- # problematic. If the old package has files that are not in the new
312
- # package, these files will not be removed in the destination directory.
313
- # This is because during %post, the old package files have not yet
314
- # been removed from the source directory by RPM. So, the 'rsync'
315
- # operation copies over the OBE files from the old package.
316
- valid_rpm_sections = ['pre','post','preun','postun', 'posttrans']
317
-
318
- unless valid_rpm_sections.include?(@options.rpm_section)
319
- raise("Error: 'rpm_section' must be one of '#{valid_rpm_sections.join("', '")}'\n#{usage}")
320
- end
321
-
322
- if (@options.rpm_section == 'posttrans') || (@options.rpm_section == 'preun') || (@options.rpm_section == 'post')
323
- unless File.directory?(@options.rpm_dir)
324
- raise("Error: Could not find 'rpm_dir': '#{@options.rpm_dir}'")
325
- end
326
- end
327
-
328
- unless @options.rpm_status =~ /^\d+$/
329
- raise("Error: 'rpm_status' must be an integer\n#{usage}")
330
- end
331
-
332
- end
333
-
334
- def handle_install
335
- debug("Processing install, upgrade, or downgrade of #{@options.module_name}")
336
- if @safe_modules.include?(@options.module_name)
337
- # Make sure that we preserve anything in the safe modules on installation
338
- @options.preserve = true
339
-
340
- if @options.rpm_status == '2'
341
- # Short circuit on upgrading safe modules, just don't touch them!
342
- target_module_dir = File.join(@options.target_dir, @options.module_name)
343
- if File.directory?(target_module_dir)
344
- debug("Skipping upgrade of 'safe' module directory #{target_module_dir}")
345
- return
346
- end
347
- end
348
- end
349
-
350
- raise('Error: Could not determine puppet group') if puppet_group.empty?
351
- rsync = Facter::Core::Execution.which('rsync')
352
- raise("Error: Could not find 'rsync' command!") unless rsync
353
-
354
- # Create the directories, with the proper mode, all the way down
355
- dir_paths = @options.target_dir.split(File::SEPARATOR).reject(&:empty?)
356
- top_dir = File::SEPARATOR + dir_paths.shift
357
- unless File.directory?(top_dir)
358
- FileUtils.mkdir(top_dir, :mode => 0750)
359
- FileUtils.chown('root', puppet_group, top_dir)
360
- end
361
-
362
- orig_dir = Dir.pwd
363
- Dir.chdir(top_dir)
364
- dir_paths.each do |dir|
365
- unless File.directory?(dir)
366
- FileUtils.mkdir(dir, :mode => 0750)
367
- FileUtils.chown('root', puppet_group, dir)
368
- end
369
-
370
- Dir.chdir(dir)
371
- end
372
- Dir.chdir(orig_dir)
373
-
374
- cmd = %(#{rsync} -a --force)
375
-
376
- if @options.preserve
377
- cmd += %( --ignore-existing)
378
- else
379
- cmd += %( --delete)
380
- end
381
-
382
- cmd += %( --verbose) if @options.debug
383
-
384
- cmd += %( #{@options.rpm_dir} #{@options.target_dir})
385
- cmd += %( 2>&1)
386
-
387
- info("Copying '#{@options.module_name}' files into '#{@options.target_dir}'")
388
- debug("Executing: #{cmd}")
389
- output = %x{#{cmd}}
390
- debug("Output:\n#{output}")
391
- unless $?.success?
392
- raise(%(Error: Copy of '#{@options.module_name}' into '#{@options.target_dir}' using '#{cmd}' failed with the following error:\n #{output.gsub("\n","\n ")}))
393
- end
394
-
395
- FileUtils.chown_R(nil, "#{puppet_group}", @options.target_dir)
396
- end
397
-
398
- def handle_uninstall
399
- debug("Processing uninstall of #{@options.module_name}")
400
- # Play it safe, this needs to have at least 'environments/simp' in it!
401
- if @options.target_dir.split(File::SEPARATOR).reject(&:empty?).size < 3
402
- raise("Error: Not removing directory '#{@options.target_dir}' for safety")
403
- end
404
-
405
- if @safe_modules.include?(@options.module_name)
406
- target_module_dir = File.join(@options.target_dir, @options.module_name)
407
- debug("Skipping removal of 'safe' module directory #{target_module_dir}")
408
- return
409
- end
410
-
411
- info("Removing '#{@options.module_name}' files from '#{@options.target_dir}'")
412
-
413
- # Find out what we have
414
- ref_list = []
415
- Dir.chdir(@options.rpm_dir) do
416
- Find.find('.').each do |file|
417
- if File.symlink?(file)
418
- ref_list << file
419
- Find.prune
420
- end
421
-
422
- ref_list << file
423
- end
424
- end
425
-
426
- # Delete from the bottom up to clear out the directories first
427
- # before removing them
428
- ref_list.reverse!
429
- ref_list.map{|x| x.sub!(/^./, @options.module_name)}
430
-
431
- # Only delete items that are in the reference repo
432
- Dir.chdir(@options.target_dir) do
433
- ref_list.each do |to_rm|
434
- if File.symlink?(to_rm)
435
- debug("Removing symlink #{to_rm}")
436
- FileUtils.rm_f(to_rm)
437
- elsif File.directory?(to_rm) && (Dir.entries(to_rm).delete_if {|dir|
438
- dir == '.' || dir == '..'}.size == 0)
439
- debug("Removing directory #{to_rm}")
440
- FileUtils.rmdir(to_rm)
441
- elsif File.exist?(to_rm)
442
- debug("Removing file #{to_rm}")
443
- FileUtils.rm_f(to_rm)
444
- end
445
- end
446
- end
447
- end
448
-
449
- def run(args)
450
- parse_options(args)
451
- return 0 if @options.help_requested
452
-
453
- process_config
454
- debug("Running with config=#{@options.to_s}")
455
-
456
- # If the target directory is managed, we're done
457
- target_module_dir = File.join(@options.target_dir, @options.module_name)
458
- unless is_managed?(target_module_dir) || !@options.copy_rpm_data
459
-
460
- debug("Processing unmanaged target directory #{target_module_dir}")
461
-
462
- if (@options.rpm_section == 'posttrans') || (@options.rpm_section == 'post')
463
- # A regular installation, upgrade or downgrade
464
- # This *should* happen in the RPM %posttrans, but we allow this to
465
- # occur in the %post for backward compatibility with SIMP RPMs that
466
- # erroneously try to affect a copy in the %post. (Copying over the
467
- # files in the RPM %post during an upgrade/downgrade is problematic.
468
- # If the old package has files that are not in the new package,
469
- # these files will not yet have been removed in the source
470
- # directory, and thus end up in the target directory.)
471
- handle_install
472
- elsif @options.rpm_section == 'preun' && @options.rpm_status == '0'
473
- # A regular uninstall
474
- # This needs to happen *before* RPM removes the files (%preun with
475
- # status 0), since we need to compare with what's on disk to undo
476
- # the copy done during the RPM install via handle_install()
477
- handle_uninstall
478
- end
479
- end
480
- return 0
481
- rescue RuntimeError => e
482
- $stderr.puts(e)
483
- return 1
484
- rescue Exception => e
485
- $stderr.puts(e)
486
- e.backtrace.first(10).each{|l| $stderr.puts l }
487
- return 1
488
- end
489
- end
490
-
491
- if __FILE__ == $0
492
- helper = SimpRpmHelper.new
493
- exit helper.run(ARGV)
494
- end
495
-