fpm 1.1.0 → 1.2.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d61a0cdec8509988ddad4461c5d8e97ec8e13e7d
4
- data.tar.gz: 1450b23e93208cf29b03ee1e65fc2b3e4c21502f
3
+ metadata.gz: 1865c3f86f85b91177908b4ab565d14586795cb8
4
+ data.tar.gz: 0fbd72a7c8db1b4eb11104990182f248233e2252
5
5
  SHA512:
6
- metadata.gz: 2f93f3d2dad2f43aa06db81125b39962855519e7e6c854636b95a378336ca8be63888b65a53c7400528c6b43278d711eaf3d2803df4f980231b7891495c78813
7
- data.tar.gz: 5533a18ec9ef6c1a8b43a8a9e7c26bef3bd878eb79b3e7cfd086080ce2f0d17cbc5d606ec6808b5c20b0469ca0c0d7ce325750dc6f80ab549a0cd44ce66bc964
6
+ metadata.gz: 3b988637a79243d70644a911e65143784129de29278a3581b31f777a433570fde9fbb125ae12f7ff15c81ba043917a67dac0c98a383e50ed49676457ff48d23c
7
+ data.tar.gz: 350fbd84054b7685815b527ff6cb51dcbd8ab8d4331f84f0deb0450f40ac6c12a7e06c8cf6df8caa2e8980512daf0439bbca5f3cd200ed04f1f368443effc088
data/CHANGELIST CHANGED
@@ -1,4 +1,26 @@
1
- 1.1.0 (???)
1
+ 1.2.0 (July 25, 2014)
2
+ - rpm: Add --rpm-verifyscript for adding a custom rpm verify script to
3
+ your package. (Remi Hakim)
4
+ - Allow the -p flag to target a directory for writing the output package
5
+ (#656, Jordan Sissel)
6
+ - Add --debug-workspace which skips any workspace cleanup to let users debug things
7
+ if they break. (#720, #734; Jordan Sissel)
8
+ - rpm: Add --rpm-attr for controlling attribute settings per file. This setting
9
+ will likely be removed in the future once rpmbuild is no longer needed.
10
+ (#719)
11
+ - deb: Add --deb-meta-file to add arbitrary files to the control dir (#599, Dan Brown)
12
+ - deb: Add --deb-interest and --deb-activate for adding package triggers (#595, Dan Brown)
13
+ - cpan: Fix small bug in handling empty metadata fields (#712, Mathias Lafeldt)
14
+ - rpm: Fix bug when specifying both --architecture and --rpm-os (#707, #716; Alan Ivey)
15
+ - gem: Fix bug where --gem-version-bins is given but package has no bins (#688, Jan Vansteenkiste)
16
+ - deb: Set permissions correct on the package's internals. Makes lintian happier. (Jan Vansteenkiste)
17
+ - rpm: rpmbuild's _tmppath now respects --workdir (#714, Jordan Sissel)
18
+ - gem/rpm: Add --rpm-verbatim-gem-dependencies to use old-style (fpm 0.4.x)
19
+ rpm gem dependencies (#724, Jordan Sissel)
20
+ - gem/rpm: Fix bug for gem pessimistic constraints when converting to rpm (Tom Duckering)
21
+ - python: Fix small bug with pip invocations (#727, Dane Knecht)
22
+
23
+ 1.1.0 (April 23, 2014)
2
24
  - New package type: zip, for converting to and from zip files (Jordan Sissel)
3
25
  - New package type: sh, a self-extracting package installation shell archive. (#651, Chris Gerber)
4
26
  - 'fpm --version' will now emit the version of fpm.
data/lib/fpm/command.rb CHANGED
@@ -60,6 +60,9 @@ class FPM::Command < Clamp::Command
60
60
  option ["-n", "--name"], "NAME", "The name to give to the package"
61
61
  option "--verbose", :flag, "Enable verbose output"
62
62
  option "--debug", :flag, "Enable debug output"
63
+ option "--debug-workspace", :flag, "Keep any file workspaces around for " \
64
+ "debugging. This will disable automatic cleanup of package staging and " \
65
+ "build paths. It will also print which directories are available."
63
66
  option ["-v", "--version"], "VERSION", "The version to give to the package",
64
67
  :default => 1.0
65
68
  option "--iteration", "ITERATION",
@@ -191,8 +194,8 @@ class FPM::Command < Clamp::Command
191
194
  end
192
195
 
193
196
  option "--workdir", "WORKDIR",
194
- "The directory you want fpm to do its work in, where 'work' is any file" \
195
- "copying, downloading, etc. Roughly any scratch space fpm needs to build" \
197
+ "The directory you want fpm to do its work in, where 'work' is any file " \
198
+ "copying, downloading, etc. Roughly any scratch space fpm needs to build " \
196
199
  "your package.", :default => Dir.tmpdir
197
200
 
198
201
  parameter "[ARGS] ...",
@@ -346,6 +349,16 @@ class FPM::Command < Clamp::Command
346
349
  input.replaces += replaces
347
350
  input.config_files += config_files
348
351
  input.directories += directories
352
+
353
+ h = {}
354
+ attrs.each do | e |
355
+
356
+ s = e.split(':', 2)
357
+ h[s.last] = s.first
358
+ end
359
+
360
+ input.attrs = h
361
+
349
362
 
350
363
  script_errors = []
351
364
  setscript = proc do |scriptname|
@@ -392,7 +405,15 @@ class FPM::Command < Clamp::Command
392
405
 
393
406
  # Write the output somewhere, package can be nil if no --package is specified,
394
407
  # and that's OK.
395
- package_file = output.to_s(package)
408
+
409
+ # If the package output (-p flag) is a directory, write to the default file name
410
+ # but inside that directory.
411
+ if ! package.nil? && File.directory?(package)
412
+ package_file = File.join(package, output.to_s)
413
+ else
414
+ package_file = output.to_s(package)
415
+ end
416
+
396
417
  begin
397
418
  output.output(package_file)
398
419
  rescue FPM::Package::FileAlreadyExists => e
@@ -418,8 +439,20 @@ class FPM::Command < Clamp::Command
418
439
  @logger.error("Process failed: #{e}")
419
440
  return 1
420
441
  ensure
421
- input.cleanup unless input.nil?
422
- output.cleanup unless output.nil?
442
+ if debug_workspace?
443
+ # only emit them if they have files
444
+ [input, output].each do |plugin|
445
+ next if plugin.nil?
446
+ [:staging_path, :build_path].each do |pathtype|
447
+ path = plugin.send(pathtype)
448
+ next unless Dir.open(path).to_a.size > 2
449
+ @logger.log("plugin directory", :plugin => plugin.type, :pathtype => pathtype, :path => path)
450
+ end
451
+ end
452
+ else
453
+ input.cleanup unless input.nil?
454
+ output.cleanup unless output.nil?
455
+ end
423
456
  end # def execute
424
457
 
425
458
  def run(*args)
data/lib/fpm/package.rb CHANGED
@@ -111,6 +111,8 @@ class FPM::Package
111
111
  # This is where you'd put rpm, deb, or other specific attributes.
112
112
  attr_accessor :attributes
113
113
 
114
+ attr_accessor :attrs
115
+
114
116
  private
115
117
 
116
118
  def initialize
@@ -172,6 +174,7 @@ class FPM::Package
172
174
  @scripts = {}
173
175
  @config_files = []
174
176
  @directories = []
177
+ @attrs = {}
175
178
 
176
179
  staging_path
177
180
  build_path
@@ -198,7 +201,7 @@ class FPM::Package
198
201
  :@architecture, :@category, :@config_files, :@conflicts,
199
202
  :@dependencies, :@description, :@epoch, :@iteration, :@license, :@maintainer,
200
203
  :@name, :@provides, :@replaces, :@scripts, :@url, :@vendor, :@version,
201
- :@directories, :@staging_path
204
+ :@directories, :@staging_path, :@attrs
202
205
  ]
203
206
  ivars.each do |ivar|
204
207
  #@logger.debug("Copying ivar", :ivar => ivar, :value => instance_variable_get(ivar),
@@ -519,5 +522,5 @@ class FPM::Package
519
522
 
520
523
  # Package internal public api
521
524
  public(:cleanup_staging, :cleanup_build, :staging_path, :converted_from,
522
- :edit_file)
525
+ :edit_file, :build_path)
523
526
  end # class FPM::Package
@@ -72,7 +72,7 @@ class FPM::Package::CPAN < FPM::Package
72
72
  else; metadata["license"]
73
73
  end
74
74
 
75
- if metadata.include?("distribution")
75
+ unless metadata["distribution"].nil?
76
76
  @logger.info("Setting package name from 'distribution'",
77
77
  :distribution => metadata["distribution"])
78
78
  self.name = fix_name(metadata["distribution"])
@@ -83,7 +83,7 @@ class FPM::Package::CPAN < FPM::Package
83
83
  end
84
84
 
85
85
  # Not all things have 'author' listed.
86
- self.vendor = metadata["author"].join(", ") if metadata.include?("author")
86
+ self.vendor = metadata["author"].join(", ") unless metadata["author"].nil?
87
87
  self.url = metadata["resources"]["homepage"] rescue "unknown"
88
88
 
89
89
  # TODO(sissel): figure out if this perl module compiles anything
@@ -102,7 +102,7 @@ class FPM::Package::CPAN < FPM::Package
102
102
  safesystem(attributes[:cpan_cpanm_bin], *cpanm_flags)
103
103
 
104
104
  if !attributes[:no_auto_depends?]
105
- if metadata.include?("requires") && !metadata["requires"].nil?
105
+ unless metadata["requires"].nil?
106
106
  metadata["requires"].each do |dep_name, version|
107
107
  # Special case for representing perl core as a version.
108
108
  if dep_name == "perl"
@@ -99,6 +99,24 @@ class FPM::Package::Deb < FPM::Package
99
99
  next @suggests
100
100
  end
101
101
 
102
+ option "--meta-file", "FILEPATH", "Add FILEPATH to DEBIAN directory" do |file|
103
+ @meta_files ||= []
104
+ @meta_files << File.expand_path(file)
105
+ next @meta_files
106
+ end
107
+
108
+ option "--interest", "EVENT", "Package is interested in EVENT trigger" do |event|
109
+ @interested_triggers ||= []
110
+ @interested_triggers << event
111
+ next @interested_triggers
112
+ end
113
+
114
+ option "--activate", "EVENT", "Package activates EVENT trigger" do |event|
115
+ @activated_triggers ||= []
116
+ @activated_triggers << event
117
+ next @activated_triggers
118
+ end
119
+
102
120
  option "--field", "'FIELD: VALUE'", "Add custom field to the control file" do |fv|
103
121
  @custom_fields ||= {}
104
122
  field, value = fv.split(/: */, 2)
@@ -506,6 +524,8 @@ class FPM::Package::Deb < FPM::Package
506
524
  write_scripts # write the maintainer scripts
507
525
  write_conffiles # write the conffiles
508
526
  write_debconf # write the debconf files
527
+ write_meta_files # write additional meta files
528
+ write_triggers # write trigger config to 'triggers' file
509
529
  write_md5sums # write the md5sums file
510
530
 
511
531
  # Make the control.tar.gz
@@ -553,6 +573,7 @@ class FPM::Package::Deb < FPM::Package
553
573
 
554
574
  @logger.debug("Writing control file", :path => control)
555
575
  File.write(control, control_data)
576
+ File.chmod(0644, control)
556
577
  edit_file(control) if attributes[:edit?]
557
578
  end
558
579
  end # def write_control
@@ -594,13 +615,16 @@ class FPM::Package::Deb < FPM::Package
594
615
  end
595
616
  allconfigs.sort!.uniq!
596
617
 
597
- File.open(control_path("conffiles"), "w") do |out|
598
- # 'config_files' comes from FPM::Package and is usually set with
599
- # FPM::Command's --config-files flag
600
- allconfigs.each do |cf|
601
- # We need to put the leading / back. Stops lintian relative-conffile error.
602
- out.puts("/" + cf)
618
+ with(control_path("conffiles")) do |conffiles|
619
+ File.open(conffiles, "w") do |out|
620
+ # 'config_files' comes from FPM::Package and is usually set with
621
+ # FPM::Command's --config-files flag
622
+ allconfigs.each do |cf|
623
+ # We need to put the leading / back. Stops lintian relative-conffile error.
624
+ out.puts("/" + cf)
625
+ end
603
626
  end
627
+ File.chmod(0644, conffiles)
604
628
  end
605
629
  end # def write_conffiles
606
630
 
@@ -624,6 +648,30 @@ class FPM::Package::Deb < FPM::Package
624
648
  end
625
649
  end # def write_debconf
626
650
 
651
+ def write_meta_files
652
+ files = attributes[:deb_meta_files]
653
+ return unless files
654
+ files.each do |fn|
655
+ dest = control_path(File.basename(fn))
656
+ FileUtils.cp(fn, dest)
657
+ File.chmod(0644, dest)
658
+ end
659
+ end
660
+
661
+ def write_triggers
662
+ lines = [['interest', :deb_interest],
663
+ ['activate', :deb_activate]].map { |label, attr|
664
+ (attributes[attr] || []).map { |e| "#{label} #{e}\n" }
665
+ }.flatten.join('')
666
+
667
+ if lines.size > 0
668
+ File.open(control_path("triggers"), 'a') do |f|
669
+ f.write "\n" if f.size > 0
670
+ f.write lines
671
+ end
672
+ end
673
+ end
674
+
627
675
  def write_md5sums
628
676
  md5_sums = {}
629
677
 
@@ -71,7 +71,7 @@ class FPM::Package::Dir < FPM::Package
71
71
  clone(source, destination)
72
72
  rescue Errno::ENOENT => e
73
73
  raise FPM::InvalidPackageConfiguration,
74
- "Cannot package the path '#{source}', does it exist?"
74
+ "Cannot package the path '#{File.join(chdir, source)}', does it exist?"
75
75
  end
76
76
  end
77
77
  rescue Errno::ENOENT => e
@@ -207,7 +207,7 @@ class FPM::Package::Gem < FPM::Package
207
207
  ::Dir.rmdir(tmp)
208
208
  tmp = File.dirname(tmp)
209
209
  end
210
- if attributes[:gem_version_bins?]
210
+ if attributes[:gem_version_bins?] and File.directory?(bin_path)
211
211
  (::Dir.entries(bin_path) - ['.','..']).each do |bin|
212
212
  FileUtils.mv("#{bin_path}/#{bin}", "#{bin_path}/#{bin}-#{self.version}")
213
213
  end
Binary file
Binary file
@@ -127,7 +127,7 @@ class FPM::Package::Python < FPM::Package
127
127
  "--build-directory", target, want_pkg)
128
128
  else
129
129
  @logger.debug("using pip", :pip => attributes[:python_pip])
130
- safesystem(attributes[:python_pip], "install", "--no-install", "-i", attributes[:python_pypi], "-U", "--build", target, want_pkg)
130
+ safesystem(attributes[:python_pip], "install", "--no-deps", "--no-install", "-i", attributes[:python_pypi], "-U", "--build", target, want_pkg)
131
131
  end
132
132
 
133
133
  # easy_install will put stuff in @tmpdir/packagename/, so find that:
@@ -95,6 +95,10 @@ class FPM::Package::RPM < FPM::Package
95
95
  option "--autoreq", :flag, "Enable RPM's AutoReq option"
96
96
  option "--autoprov", :flag, "Enable RPM's AutoProv option"
97
97
 
98
+ option "--attr", "ATTRFILE",
99
+ "Set the attribute for a file (%attr).",
100
+ :multivalued => true, :attribute_name => :attrs
101
+
98
102
  rpmbuild_filter_from_provides = []
99
103
  option "--filter-from-provides", "REGEX",
100
104
  "Set %filter_from_provides to the supplied REGEX." do |filter_from_provides|
@@ -113,6 +117,24 @@ class FPM::Package::RPM < FPM::Package
113
117
  "version. Default is to be specific. This option allows the same " \
114
118
  "version of a package but any iteration is permitted"
115
119
 
120
+ option "--verbatim-gem-dependencies", :flag,
121
+ "When converting from a gem, leave the old (fpm 0.4.x) style " \
122
+ "dependency names. This flag will use the old 'rubygem-foo' " \
123
+ "names in rpm requires instead of the redhat style " \
124
+ "rubygem(foo).", :default => false
125
+
126
+ option "--verifyscript", "FILE",
127
+ "a script to be run on verification" do |val|
128
+ File.expand_path(val) # Get the full path to the script
129
+ end # --verifyscript
130
+ option "--pretrans", "FILE",
131
+ "pretrans script" do |val|
132
+ File.expand_path(val) # Get the full path to the script
133
+ end # --pretrans
134
+ option "--posttrans", "FILE",
135
+ "posttrans script" do |val|
136
+ File.expand_path(val) # Get the full path to the script
137
+ end # --posttrans
116
138
  private
117
139
 
118
140
  # Fix path name
@@ -131,7 +153,17 @@ class FPM::Package::RPM < FPM::Package
131
153
  def rpm_file_entry(file)
132
154
  original_file = file
133
155
  file = rpm_fix_name(file)
134
- return file unless attributes[:rpm_use_file_permissions?]
156
+
157
+ if !attributes[:rpm_use_file_permissions?]
158
+
159
+ if attrs[file].nil?
160
+ return file
161
+ else
162
+ return sprintf("%%attr(%s) %s\n", attrs[file], file)
163
+ end
164
+ end
165
+
166
+ return sprintf("%%attr(%s) %s\n", attrs[file], file) unless attrs[file].nil?
135
167
 
136
168
  # Stat the original filename in the relative staging path
137
169
  ::Dir.chdir(staging_path) do
@@ -174,17 +206,10 @@ class FPM::Package::RPM < FPM::Package
174
206
  # See FPM::Package#converted_from
175
207
  def converted_from(origin)
176
208
  if origin == FPM::Package::Gem
177
- # Gem dependency operator "~>" is not compatible with rpm. Translate any found.
178
209
  fixed_deps = []
179
210
  self.dependencies.collect do |dep|
180
- name, op, version = dep.split(/\s+/)
181
- if op == "~>"
182
- # ~> x.y means: > x.y and < (x+1).0
183
- fixed_deps << "#{name} >= #{version}"
184
- fixed_deps << "#{name} < #{version.to_i + 1}.0.0"
185
- else
186
- fixed_deps << dep
187
- end
211
+ # Gem dependency operator "~>" is not compatible with rpm. Translate any found.
212
+ fixed_deps = fixed_deps + expand_pessimistic_constraints(dep)
188
213
  end
189
214
  self.dependencies = fixed_deps
190
215
 
@@ -199,13 +224,15 @@ class FPM::Package::RPM < FPM::Package
199
224
  provides
200
225
  end
201
226
  end
202
- self.dependencies = self.dependencies.collect do |dependency|
203
- # Tries to match rubygem_prefix [1], gem_name [2] and version [3] if present
204
- # and return it in rubygem_prefix(gem_name) form
205
- if name=/^(#{attributes[:gem_package_name_prefix]})-([^\s]+)\s*(.*)$/.match(dependency)
206
- "#{name[1]}(#{name[2]})#{name[3] ? " #{name[3]}" : ""}"
207
- else
208
- dependency
227
+ if !self.attributes[:rpm_verbatim_gem_dependencies?]
228
+ self.dependencies = self.dependencies.collect do |dependency|
229
+ # Tries to match rubygem_prefix [1], gem_name [2] and version [3] if present
230
+ # and return it in rubygem_prefix(gem_name) form
231
+ if name=/^(#{attributes[:gem_package_name_prefix]})-([^\s]+)\s*(.*)$/.match(dependency)
232
+ "#{name[1]}(#{name[2]})#{name[3] ? " #{name[3]}" : ""}"
233
+ else
234
+ dependency
235
+ end
209
236
  end
210
237
  end
211
238
  end
@@ -238,6 +265,21 @@ class FPM::Package::RPM < FPM::Package
238
265
  end.flatten
239
266
  end
240
267
 
268
+ setscript = proc do |scriptname|
269
+ script_path = self.attributes[scriptname]
270
+ # Skip scripts not set
271
+ next if script_path.nil?
272
+ if !File.exists?(script_path)
273
+ @logger.error("No such file (for #{scriptname.to_s}): #{script_path.inspect}")
274
+ script_errors << script_path
275
+ end
276
+ # Load the script into memory.
277
+ scripts[scriptname] = File.read(script_path)
278
+ end
279
+
280
+ setscript.call(:rpm_verifyscript)
281
+ setscript.call(:rpm_posttrans)
282
+ setscript.call(:rpm_pretrans)
241
283
  end # def converted
242
284
 
243
285
  def input(path)
@@ -264,6 +306,9 @@ class FPM::Package::RPM < FPM::Package
264
306
  self.scripts[:after_install] = tags[:postin]
265
307
  self.scripts[:before_remove] = tags[:preun]
266
308
  self.scripts[:after_remove] = tags[:postun]
309
+ self.scripts[:rpm_verifyscript] = tags[:verifyscript]
310
+ self.scripts[:rpm_posttrans] = tags[:posttrans]
311
+ self.scripts[:rpm_pretrans] = tags[:pretrans]
267
312
  # TODO(sissel): prefix these scripts above with a shebang line if there isn't one?
268
313
  # Also taking into account the value of tags[preinprog] etc, something like:
269
314
  # #!#{tags[:preinprog]}
@@ -309,12 +354,16 @@ class FPM::Package::RPM < FPM::Package
309
354
  args = ["rpmbuild", "-bb"]
310
355
 
311
356
  if %x{uname -m}.chomp != self.architecture
312
- args += [ '--target', self.architecture ]
357
+ rpm_target = self.architecture
313
358
  end
314
359
 
315
360
  # issue #309
316
361
  if !attributes[:rpm_os].nil?
317
362
  rpm_target = "#{architecture}-unknown-#{attributes[:rpm_os]}"
363
+ end
364
+
365
+ # issue #707
366
+ if !rpm_target.nil?
318
367
  args += ["--target", rpm_target]
319
368
  end
320
369
 
@@ -323,6 +372,7 @@ class FPM::Package::RPM < FPM::Package
323
372
  "--define", "_topdir #{build_path}",
324
373
  "--define", "_sourcedir #{build_path}",
325
374
  "--define", "_rpmdir #{build_path}/RPMS",
375
+ "--define", "_tmppath #{attributes[:workdir]}"
326
376
  ]
327
377
 
328
378
  args += ["--sign"] if attributes[:rpm_sign?]
data/lib/fpm/util.rb CHANGED
@@ -191,4 +191,36 @@ module FPM::Util
191
191
  # is already populated. even though this is anew round of copying.
192
192
  return @copied_entries ||= {}
193
193
  end # def copied_entries
194
+
195
+ def expand_pessimistic_constraints(constraint)
196
+ name, op, version = constraint.split(/\s+/)
197
+
198
+ if op == '~>'
199
+
200
+ new_lower_constraint = "#{name} >= #{version}"
201
+
202
+ version_components = version.split('.').collect { |v| v.to_i }
203
+
204
+ version_prefix = version_components[0..-3].join('.')
205
+ portion_to_work_with = version_components.last(2)
206
+
207
+ prefix = ''
208
+ unless version_prefix.empty?
209
+ prefix = version_prefix + '.'
210
+ end
211
+
212
+ one_to_increment = portion_to_work_with[0].to_i
213
+ incremented = one_to_increment + 1
214
+
215
+ new_version = ''+ incremented.to_s + '.0'
216
+
217
+ upper_version = prefix + new_version
218
+
219
+ new_upper_constraint = "#{name} < #{upper_version}"
220
+
221
+ return [new_lower_constraint,new_upper_constraint]
222
+ else
223
+ return [constraint]
224
+ end
225
+ end #def expand_pesimistic_constraints
194
226
  end # module FPM::Util
data/lib/fpm/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module FPM
2
- VERSION = "1.1.0"
2
+ VERSION = "1.2.0"
3
3
  end
data/templates/rpm.erb CHANGED
@@ -108,13 +108,16 @@ Obsoletes: <%= repl %>
108
108
  %clean
109
109
  # noop
110
110
 
111
- <%# This next section puts any %pre, %post, %preun, or %postun scripts %>
111
+ <%# This next section puts any %pre, %post, %preun, %postun, %verifyscript, %pretrans or %posttrans scripts %>
112
112
  <%
113
113
  scriptmap = {
114
114
  :before_install => "pre",
115
115
  :after_install => "post",
116
116
  :before_remove => "preun",
117
117
  :after_remove => "postun",
118
+ :rpm_verifyscript => "verifyscript",
119
+ :rpm_posttrans => "posttrans",
120
+ :rpm_pretrans => "pretrans"
118
121
  }
119
122
  scriptmap.each do |name, rpmname|
120
123
  -%>
data/templates/sh.erb CHANGED
@@ -163,8 +163,10 @@ function run_post_install(){
163
163
  if [ -r $AFTER_INSTALL ] ; then
164
164
  chmod +x $AFTER_INSTALL
165
165
  log "Running post install script"
166
- log $($AFTER_INSTALL)
167
- return $?
166
+ output=$($AFTER_INSTALL 2>&1)
167
+ errorlevel=$?
168
+ log $output
169
+ return $errorlevel
168
170
  fi
169
171
  return 0
170
172
  }
@@ -198,11 +200,20 @@ function revert_symlinks(){
198
200
  function clean_out_old_releases(){
199
201
  [ -n "$USE_FLAT_RELEASE_DIRECTORY" ] && return
200
202
 
201
- while [ $(ls -tr "${RELEASES_DIR}" | wc -l) -gt 2 ] ; do
202
- OLDEST_RELEASE=$(ls -tr "${RELEASES_DIR}" | head -1)
203
- log "Deleting old release '${OLDEST_RELEASE}'"
204
- rm -rf "${RELEASES_DIR}/${OLDEST_RELEASE}"
205
- done
203
+ if [ -n "$OLD_CURRENT_TARGET" ] ; then
204
+ # exclude old 'current' from deletions
205
+ while [ $(ls -tr "${RELEASES_DIR}" | grep -v ^$(basename "${OLD_CURRENT_TARGET}")$ | wc -l) -gt 2 ] ; do
206
+ OLDEST_RELEASE=$(ls -tr "${RELEASES_DIR}" | grep -v ^$(basename "${OLD_CURRENT_TARGET}")$ | head -1)
207
+ log "Deleting old release '${OLDEST_RELEASE}'"
208
+ rm -rf "${RELEASES_DIR}/${OLDEST_RELEASE}"
209
+ done
210
+ else
211
+ while [ $(ls -tr "${RELEASES_DIR}" | wc -l) -gt 2 ] ; do
212
+ OLDEST_RELEASE=$(ls -tr "${RELEASES_DIR}" | head -1)
213
+ log "Deleting old release '${OLDEST_RELEASE}'"
214
+ rm -rf "${RELEASES_DIR}/${OLDEST_RELEASE}"
215
+ done
216
+ fi
206
217
  }
207
218
 
208
219
  function print_usage(){
metadata CHANGED
@@ -1,181 +1,167 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fpm
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jordan Sissel
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-04-23 00:00:00.000000000 Z
11
+ date: 2014-07-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: 1.7.7
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - '>='
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: 1.7.7
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: cabin
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: 0.6.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: 0.6.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: backports
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - '>='
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: 2.6.2
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - '>='
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: 2.6.2
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: arr-pm
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ~>
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
61
  version: 0.0.9
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ~>
66
+ - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: 0.0.9
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: clamp
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - ~>
73
+ - - "~>"
74
74
  - !ruby/object:Gem::Version
75
75
  version: '0.6'
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - ~>
80
+ - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0.6'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: childprocess
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - '>='
87
+ - - ">="
88
88
  - !ruby/object:Gem::Version
89
89
  version: '0'
90
90
  type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - '>='
94
+ - - ">="
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: ffi
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - '>='
101
+ - - ">="
102
102
  - !ruby/object:Gem::Version
103
103
  version: '0'
104
104
  type: :runtime
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
- - - '>='
108
+ - - ">="
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: rspec
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
- - - '>='
115
+ - - "~>"
116
116
  - !ruby/object:Gem::Version
117
- version: '0'
117
+ version: 3.0.0
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
- - - '>='
122
+ - - "~>"
123
123
  - !ruby/object:Gem::Version
124
- version: '0'
124
+ version: 3.0.0
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: insist
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
- - - ~>
129
+ - - "~>"
130
130
  - !ruby/object:Gem::Version
131
131
  version: 0.0.5
132
132
  type: :development
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
- - - ~>
136
+ - - "~>"
137
137
  - !ruby/object:Gem::Version
138
138
  version: 0.0.5
139
- - !ruby/object:Gem::Dependency
140
- name: minitest
141
- requirement: !ruby/object:Gem::Requirement
142
- requirements:
143
- - - '>='
144
- - !ruby/object:Gem::Version
145
- version: '0'
146
- type: :development
147
- prerelease: false
148
- version_requirements: !ruby/object:Gem::Requirement
149
- requirements:
150
- - - '>='
151
- - !ruby/object:Gem::Version
152
- version: '0'
153
139
  - !ruby/object:Gem::Dependency
154
140
  name: pry
155
141
  requirement: !ruby/object:Gem::Requirement
156
142
  requirements:
157
- - - '>='
143
+ - - ">="
158
144
  - !ruby/object:Gem::Version
159
145
  version: '0'
160
146
  type: :development
161
147
  prerelease: false
162
148
  version_requirements: !ruby/object:Gem::Requirement
163
149
  requirements:
164
- - - '>='
150
+ - - ">="
165
151
  - !ruby/object:Gem::Version
166
152
  version: '0'
167
153
  - !ruby/object:Gem::Dependency
168
154
  name: stud
169
155
  requirement: !ruby/object:Gem::Requirement
170
156
  requirements:
171
- - - '>='
157
+ - - ">="
172
158
  - !ruby/object:Gem::Version
173
159
  version: '0'
174
160
  type: :development
175
161
  prerelease: false
176
162
  version_requirements: !ruby/object:Gem::Requirement
177
163
  requirements:
178
- - - '>='
164
+ - - ">="
179
165
  - !ruby/object:Gem::Version
180
166
  version: '0'
181
167
  description: Convert directories, rpms, python eggs, rubygems, and more to rpms, debs,
@@ -187,9 +173,15 @@ executables:
187
173
  extensions: []
188
174
  extra_rdoc_files: []
189
175
  files:
176
+ - CHANGELIST
177
+ - CONTRIBUTORS
178
+ - LICENSE
179
+ - bin/fpm
180
+ - lib/fpm.rb
190
181
  - lib/fpm/command.rb
191
182
  - lib/fpm/errors.rb
192
183
  - lib/fpm/namespace.rb
184
+ - lib/fpm/package.rb
193
185
  - lib/fpm/package/cpan.rb
194
186
  - lib/fpm/package/deb.rb
195
187
  - lib/fpm/package/dir.rb
@@ -210,23 +202,17 @@ files:
210
202
  - lib/fpm/package/solaris.rb
211
203
  - lib/fpm/package/tar.rb
212
204
  - lib/fpm/package/zip.rb
213
- - lib/fpm/package.rb
214
205
  - lib/fpm/util.rb
215
206
  - lib/fpm/version.rb
216
- - lib/fpm.rb
217
- - bin/fpm
218
- - templates/deb/ldconfig.sh.erb
219
207
  - templates/deb.erb
208
+ - templates/deb/ldconfig.sh.erb
220
209
  - templates/osxpkg.erb
221
- - templates/puppet/package/remove.pp.erb
222
210
  - templates/puppet/package.pp.erb
223
- - templates/rpm/filesystem_list
211
+ - templates/puppet/package/remove.pp.erb
224
212
  - templates/rpm.erb
213
+ - templates/rpm/filesystem_list
225
214
  - templates/sh.erb
226
215
  - templates/solaris.erb
227
- - LICENSE
228
- - CONTRIBUTORS
229
- - CHANGELIST
230
216
  homepage: https://github.com/jordansissel/fpm
231
217
  licenses:
232
218
  - MIT-like
@@ -238,17 +224,17 @@ require_paths:
238
224
  - lib
239
225
  required_ruby_version: !ruby/object:Gem::Requirement
240
226
  requirements:
241
- - - '>='
227
+ - - ">="
242
228
  - !ruby/object:Gem::Version
243
229
  version: '0'
244
230
  required_rubygems_version: !ruby/object:Gem::Requirement
245
231
  requirements:
246
- - - '>='
232
+ - - ">="
247
233
  - !ruby/object:Gem::Version
248
234
  version: '0'
249
235
  requirements: []
250
236
  rubyforge_project:
251
- rubygems_version: 2.1.11
237
+ rubygems_version: 2.2.2
252
238
  signing_key:
253
239
  specification_version: 4
254
240
  summary: fpm - package building and mangling