fpm 0.4.26 → 0.4.27

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELIST CHANGED
@@ -1,3 +1,20 @@
1
+ 0.4.27 (January 16, 2013)
2
+ - Make all fpm output go through the logger (#329; patch by jaybuff)
3
+ - New package type: osxpkg, for building packages installable on OS X. (#332,
4
+ patch by Timothy Sutton)
5
+ - Fix crash bug when converting rpms to something else (#316, #325; patch by
6
+ rtucker-mozilla)
7
+ - deb: Add --deb-field for setting a custom field in the control file.
8
+ For more information on this setting, see section 5.7 "User-defined fields"
9
+ of the debian policy manual:
10
+ http://www.debian.org/doc/debian-policy/ch-controlfields.html#s5.7
11
+ - deb: Add --deb-recommends and --deb-suggests (#285, #310; patch by Pranay
12
+ Kanwar)
13
+ - python to rpm: convert "!=" dependency operators in python to "Conflicts"
14
+ in rpm. (#263, #312; patch by Pranay Kanwar)
15
+ - python: fix bug - ignore blank lines in requirements.txt (#312, patch by
16
+ Pranay Kanwar)
17
+
1
18
  0.4.26 (December 27, 2012)
2
19
  - rpm: add --rpm-sign flag to sign packages using the 'rpmbuild --sign' flag.
3
20
  (#311, Patch by Pranay Kanwar)
data/lib/fpm.rb CHANGED
@@ -6,3 +6,4 @@ require "fpm/package/gem"
6
6
  require "fpm/package/deb"
7
7
  require "fpm/package/rpm"
8
8
  require "fpm/package/python"
9
+ require "fpm/package/osxpkg"
@@ -337,7 +337,7 @@ class FPM::Package
337
337
  def edit_file(path)
338
338
  editor = ENV['FPM_EDITOR'] || ENV['EDITOR'] || 'vi'
339
339
  @logger.info("Launching editor", :file => path)
340
- safesystem("#{editor} #{Shellwords.escape(path)}")
340
+ system("#{editor} #{Shellwords.escape(path)}")
341
341
 
342
342
  if File.size(path) == 0
343
343
  raise "Empty file after editing: #{path.inspect}"
@@ -77,6 +77,25 @@ class FPM::Package::Deb < FPM::Package
77
77
  File.expand_path(file)
78
78
  end
79
79
 
80
+ option "--recommends", "PACKAGE", "Add PACKAGE to Recommends" do |pkg|
81
+ @recommends ||= []
82
+ @recommends << pkg
83
+ next @recommends
84
+ end
85
+
86
+ option "--suggests", "PACKAGE", "Add PACKAGE to Suggests" do |pkg|
87
+ @suggests ||= []
88
+ @suggests << pkg
89
+ next @suggests
90
+ end
91
+
92
+ option "--field", "'FIELD: VALUE'", "Add custom field to the control file" do |fv|
93
+ @custom_fields ||= {}
94
+ field, value = fv.split(/: */, 2)
95
+ @custom_fields[field] = value
96
+ next @custom_fields
97
+ end
98
+
80
99
  def initialize(*args)
81
100
  super(*args)
82
101
  attributes[:deb_priority] = "extra"
@@ -0,0 +1,165 @@
1
+ require "fpm/package"
2
+ require "fpm/util"
3
+ require "fileutils"
4
+ require "fpm/package/dir"
5
+ require 'tempfile' # stdlib
6
+ require 'pathname' # stdlib
7
+ require 'rexml/document' # stdlib
8
+
9
+ # Use an OS X pkg built with pkgbuild.
10
+ #
11
+ # Supports input and output. Requires pkgbuild and (for input) pkgutil, part of a
12
+ # standard OS X install in 10.7 and higher.
13
+ class FPM::Package::OSXpkg < FPM::Package
14
+
15
+ # Map of what scripts are named.
16
+ SCRIPT_MAP = {
17
+ :before_install => "preinstall",
18
+ :after_install => "postinstall",
19
+ } unless defined?(SCRIPT_MAP)
20
+
21
+ POSTINSTALL_ACTIONS = [ "logout", "restart", "shutdown" ]
22
+ OWNERSHIP_OPTIONS = ["recommended", "preserve", "preserve-other"]
23
+
24
+ option "--identifier-prefix", "IDENTIFIER_PREFIX",
25
+ "Reverse domain prefix prepended to package identifier, " \
26
+ "ie. 'org.great.my'. If this is omitted, the identifer " \
27
+ "will be the package name."
28
+ option "--payload-free", :flag, "Define no payload, assumes use of script options.",
29
+ :default => false
30
+ option "--ownership", "OWNERSHIP",
31
+ "--ownership option passed to pkgbuild. Defaults to 'recommended'. " \
32
+ "See pkgbuild(1).", :default => 'recommended' do |value|
33
+ if !OWNERSHIP_OPTIONS.include?(value)
34
+ raise ArgumentError, "osxpkg-ownership value of '#{value}' is invalid. " \
35
+ "Must be one of #{OWNERSHIP_OPTIONS.join(", ")}"
36
+ end
37
+ value
38
+ end
39
+
40
+ option "--postinstall-action", "POSTINSTALL_ACTION",
41
+ "Post-install action provided in package metadata. " \
42
+ "Optionally one of '#{POSTINSTALL_ACTIONS.join("', '")}'." do |value|
43
+ if !POSTINSTALL_ACTIONS.include?(value)
44
+ raise ArgumentError, "osxpkg-postinstall-action value of '#{value}' is invalid. " \
45
+ "Must be one of #{POSTINSTALL_ACTIONS.join(", ")}"
46
+ end
47
+ value
48
+ end
49
+
50
+ dont_obsolete_paths = []
51
+ option "--dont-obsolete", "DONT_OBSOLETE_PATH",
52
+ "A file path for which to 'dont-obsolete' in the built PackageInfo. " \
53
+ "Can be specified multiple times." do |path|
54
+ dont_obsolete_paths << path
55
+ end
56
+
57
+ private
58
+ # return the identifier by prepending the reverse-domain prefix
59
+ # to the package name, else return just the name
60
+ def identifier
61
+ identifier = name.dup
62
+ if self.attributes[:osxpkg_identifier_prefix]
63
+ identifier.insert(0, "#{self.attributes[:osxpkg_identifier_prefix]}.")
64
+ end
65
+ identifier
66
+ end # def identifier
67
+
68
+ # scripts_path and write_scripts cribbed from deb.rb
69
+ def scripts_path(path=nil)
70
+ @scripts_path ||= build_path("Scripts")
71
+ FileUtils.mkdir(@scripts_path) if !File.directory?(@scripts_path)
72
+
73
+ if path.nil?
74
+ return @scripts_path
75
+ else
76
+ return File.join(@scripts_path, path)
77
+ end
78
+ end # def scripts_path
79
+
80
+ def write_scripts
81
+ SCRIPT_MAP.each do |scriptname, filename|
82
+ next unless script?(scriptname)
83
+
84
+ with(scripts_path(filename)) do |pkgscript|
85
+ @logger.info("Writing pkg script", :source => filename, :target => pkgscript)
86
+ File.write(pkgscript, script(scriptname))
87
+ # scripts are required to be executable
88
+ File.chmod(0755, pkgscript)
89
+ end
90
+ end
91
+ end # def write_scripts
92
+
93
+ # Returns path of a processed template PackageInfo given to 'pkgbuild --info'
94
+ # note: '--info' is undocumented:
95
+ # http://managingosx.wordpress.com/2012/07/05/stupid-tricks-with-pkgbuild
96
+ def pkginfo_template_path
97
+ pkginfo_template = Tempfile.open("fpm-PackageInfo")
98
+ pkginfo_data = template("osxpkg.erb").result(binding)
99
+ pkginfo_template.write(pkginfo_data)
100
+ pkginfo_template.close
101
+ pkginfo_template.path
102
+ end # def write_pkginfo_template
103
+
104
+ # Extract name and version from PackageInfo XML
105
+ def extract_info(package)
106
+ with(build_path("expand")) do |path|
107
+ doc = REXML::Document.new File.open(File.join(path, "PackageInfo"))
108
+ pkginfo_elem = doc.elements["pkg-info"]
109
+ identifier = pkginfo_elem.attribute("identifier").value
110
+ self.version = pkginfo_elem.attribute("version").value
111
+ # set name to the last dot element of the identifier
112
+ self.name = identifier.split(".").last
113
+ @logger.info("inferring name #{self.name} from pkg-id #{identifier}")
114
+ end
115
+ end # def extract_info
116
+
117
+ # Take a flat package as input
118
+ def input(input_path)
119
+ # TODO: Fail if it's a Distribution pkg or old-fashioned
120
+ expand_dir = File.join(build_path, "expand")
121
+ # expand_dir must not already exist for pkgutil --expand
122
+ safesystem("pkgutil --expand #{input_path} #{expand_dir}")
123
+
124
+ extract_info(input_path)
125
+
126
+ # extract Payload
127
+ safesystem("tar -xz -f #{expand_dir}/Payload -C #{staging_path}")
128
+ end # def input
129
+
130
+ # Output a pkgbuild pkg.
131
+ def output(output_path)
132
+ output_check(output_path)
133
+ raise FileAlreadyExists.new(output_path) if File.exists?(output_path)
134
+
135
+ temp_info = pkginfo_template_path
136
+
137
+ args = ["--identifier", identifier,
138
+ "--info", temp_info,
139
+ "--version", version.to_s,
140
+ "--ownership", attributes[:osxpkg_ownership]]
141
+
142
+ if self.attributes[:osxpkg_payload_free?]
143
+ args << "--nopayload"
144
+ else
145
+ args += ["--root", staging_path]
146
+ end
147
+
148
+ if attributes[:before_install_given?] or attributes[:after_install_given?]
149
+ write_scripts
150
+ args += ["--scripts", scripts_path]
151
+ end
152
+ args << output_path
153
+
154
+ safesystem("pkgbuild", *args)
155
+ FileUtils.remove_file(temp_info)
156
+ end # def output
157
+
158
+ def to_s(format=nil)
159
+ return super("NAME-VERSION.pkg") if format.nil?
160
+ return super(format)
161
+ end # def to_s
162
+
163
+ public(:input, :output, :identifier, :to_s)
164
+
165
+ end # class FPM::Package::OSXpkg
@@ -1,76 +1,62 @@
1
1
  from distutils.core import Command
2
- import re
3
- import time
4
2
  import pkg_resources
5
3
  try:
6
4
  import json
7
5
  except ImportError:
8
6
  import simplejson as json
9
7
 
8
+
10
9
  # Note, the last time I coded python daily was at Google, so it's entirely
11
10
  # possible some of my techniques below are outdated or bad.
12
11
  # If you have fixes, let me know.
13
12
 
14
-
15
13
  class get_metadata(Command):
16
- description = "get package metadata"
17
- user_options = []
18
-
19
- def initialize_options(self):
20
- pass
21
- # def initialize_options
22
-
23
- def finalize_options(self):
24
- pass
25
- # def finalize_options
26
-
27
- def run(self):
28
- #print type(self.distribution)
29
- #for i in sorted(dir(self.distribution)):
30
- #if i.startswith("_"):
31
- #continue
32
- ###print "%s: %r" % (i, self.__getattr__(i))
33
- #print "%s" % i
34
-
35
- data = {
36
- "name": self.distribution.get_name(),
37
- "version": self.distribution.get_version(),
38
- "author": "%s <%s>" % (self.distribution.get_author(),
39
- self.distribution.get_author_email()),
40
- "description": self.distribution.get_description(),
41
- "license": self.distribution.get_license(),
42
- "url": self.distribution.get_url(),
43
- }
44
-
45
- # If there are python C/extension modules, we'll want to build a native
46
- # arch package.
47
- if self.distribution.has_ext_modules():
48
- data["architecture"] = "native"
49
- else:
50
- data["architecture"] = "all"
51
- # end if
52
-
53
- final_deps = []
54
- if getattr(self.distribution, 'install_requires', None):
55
- for dep in pkg_resources.parse_requirements(self.distribution.install_requires):
56
- # add all defined specs to the dependecy list separately.
57
- if dep.specs:
58
- for operator, version in dep.specs:
59
- final_deps.append("%s %s %s" % (
60
- dep.project_name,
61
- "=" if operator == "==" else operator,
62
- version
63
- ))
64
- else:
65
- final_deps.append(dep.project_name)
66
-
67
- data["dependencies"] = final_deps
68
-
69
- #print json.dumps(data, indent=2)
70
- if hasattr(json, 'dumps'):
71
- print(json.dumps(data, indent=2))
72
- else:
73
- # For Python 2.5 and Debian's python-json
74
- print(json.write(data))
75
- # def run
76
- # class list_dependencies
14
+ description = "get package metadata"
15
+ user_options = []
16
+
17
+ def initialize_options(self):
18
+ pass
19
+
20
+ def finalize_options(self):
21
+ pass
22
+
23
+ def run(self):
24
+ data = {
25
+ "name": self.distribution.get_name(),
26
+ "version": self.distribution.get_version(),
27
+ "author": "%s <%s>" % (
28
+ self.distribution.get_author(),
29
+ self.distribution.get_author_email()
30
+ ),
31
+ "description": self.distribution.get_description(),
32
+ "license": self.distribution.get_license(),
33
+ "url": self.distribution.get_url(),
34
+ }
35
+
36
+ if self.distribution.has_ext_modules():
37
+ data["architecture"] = "native"
38
+ else:
39
+ data["architecture"] = "all"
40
+
41
+ final_deps = []
42
+ if getattr(self.distribution, 'install_requires', None):
43
+ for dep in pkg_resources.parse_requirements(
44
+ self.distribution.install_requires):
45
+ # add all defined specs to the dependecy list separately.
46
+ if dep.specs:
47
+ for operator, version in dep.specs:
48
+ final_deps.append("%s %s %s" % (
49
+ dep.project_name,
50
+ (lambda x: "=" if x == "==" else x)(operator),
51
+ version
52
+ ))
53
+ else:
54
+ final_deps.append(dep.project_name)
55
+
56
+ data["dependencies"] = final_deps
57
+
58
+ if hasattr(json, 'dumps'):
59
+ print(json.dumps(data, indent=2))
60
+ else:
61
+ # For Python 2.5 and Debian's python-json
62
+ print(json.write(data))
@@ -43,6 +43,11 @@ class FPM::Package::Python < FPM::Package
43
43
  option "--fix-dependencies", :flag, "Should the package dependencies be " \
44
44
  "prefixed?", :default => true
45
45
 
46
+ option "--downcase-name", :flag, "Should the target package name be in " \
47
+ "lowercase?", :default => true
48
+ option "--downcase-dependencies", :flag, "Should the package dependencies " \
49
+ "be in lowercase?", :default => true
50
+
46
51
  option "--install-bin", "BIN_PATH", "The path to where python scripts " \
47
52
  "should be installed to.", :default => "/usr/bin"
48
53
  option "--install-lib", "LIB_PATH", "The path to where python libs " \
@@ -105,12 +110,12 @@ class FPM::Package::Python < FPM::Package
105
110
 
106
111
  if attributes[:python_pip].nil?
107
112
  # no pip, use easy_install
108
- puts "EASY_INSTALL"
113
+ @logger.debug("no pip, defaulting to easy_install", :easy_install => attributes[:python_easyinstall])
109
114
  safesystem(attributes[:python_easyinstall], "-i",
110
115
  attributes[:python_pypi], "--editable", "-U",
111
116
  "--build-directory", target, want_pkg)
112
117
  else
113
- puts "PIP PIP CHEERIOS"
118
+ @logger.debug("using pip", :pip => attributes[:python_pip])
114
119
  safesystem(attributes[:python_pip], "install", "--no-install",
115
120
  "-U", "--build", target, want_pkg)
116
121
  end
@@ -169,6 +174,9 @@ class FPM::Package::Python < FPM::Package
169
174
  self.name = metadata["name"]
170
175
  end
171
176
 
177
+ # convert python-Foo to python-foo if flag is set
178
+ self.name = self.name.downcase if attributes[:python_downcase_name?]
179
+
172
180
  requirements_txt = File.join(setup_dir, "requirements.txt")
173
181
  if File.exists?(requirements_txt)
174
182
  @logger.info("Found requirements.txt, using it instead of setup.py " \
@@ -182,13 +190,14 @@ class FPM::Package::Python < FPM::Package
182
190
  # requirements.txt can have dependencies, flags, and comments.
183
191
  # We only want the comments, so remove comment and flag lines.
184
192
  metadata["dependencies"] = File.read(requirements_txt).split("\n") \
193
+ .reject { |l| l =~ /^\s*$/ } \
185
194
  .reject { |l| l =~ /^\s*#/ } \
186
195
  .reject { |l| l =~ /^-/ } \
187
196
  .map(&:strip)
188
197
  end
189
198
 
190
199
  self.dependencies += metadata["dependencies"].collect do |dep|
191
- dep_re = /^([^<>= ]+)\s*(?:([<>=]{1,2})\s*(.*))?$/
200
+ dep_re = /^([^<>!= ]+)\s*(?:([<>!=]{1,2})\s*(.*))?$/
192
201
  match = dep_re.match(dep)
193
202
  if match.nil?
194
203
  @logger.error("Unable to parse dependency", :dependency => dep)
@@ -199,6 +208,9 @@ class FPM::Package::Python < FPM::Package
199
208
  # become 'python-foo' (depending on what the python_package_name_prefix
200
209
  # is)
201
210
  name = fix_name(name) if attributes[:python_fix_dependencies?]
211
+
212
+ # convert dependencies from python-Foo to python-foo
213
+ name = name.downcase if attributes[:python_downcase_dependencies?]
202
214
  "#{name} #{cmp} #{version}"
203
215
  end
204
216
  end # def load_package_info
@@ -143,6 +143,19 @@ class FPM::Package::RPM < FPM::Package
143
143
  end
144
144
  #self.provides << "rubygem(#{self.name})"
145
145
  end
146
+
147
+ # Convert != dependency as Conflict =, as rpm doesn't understand !=
148
+ if origin == FPM::Package::Python
149
+ self.dependencies = self.dependencies.select do |dep|
150
+ name, op, version = dep.split(/\s+/)
151
+ dep_ok = true
152
+ if op == '!='
153
+ self.conflicts << "#{name} = #{version}"
154
+ dep_ok = false
155
+ end
156
+ dep_ok
157
+ end
158
+ end
146
159
  end # def converted
147
160
 
148
161
  def input(path)
@@ -187,7 +200,15 @@ class FPM::Package::RPM < FPM::Package
187
200
  #input.replaces += replaces
188
201
 
189
202
  self.config_files += rpm.config_files
190
- self.directories += rpm.directories
203
+
204
+ # rpms support '%dir' things for specifying empty directories to package,
205
+ # but the rpm header itself doesn't actually record this information.
206
+ # so there's no 'directories' to copy, so don't try to merge in the
207
+ # 'directories' feature.
208
+ # TODO(sissel): If you want this feature, we'll have to find scan
209
+ # the extracted rpm for empty directories. I'll wait until someone asks for
210
+ # this feature
211
+ #self.directories += rpm.directories
191
212
 
192
213
  # Extract to the staging directory
193
214
  rpm.extract(staging_path)
@@ -249,7 +270,9 @@ class FPM::Package::RPM < FPM::Package
249
270
  # The default epoch value must be 1 (backward compatibility for rpms built
250
271
  # with fpm 0.4.3 and older)
251
272
  def epoch
252
- return @epoch || "1"
273
+ return 1 if @epoch.nil?
274
+ return nil if @epoch.empty?
275
+ return @epoch
253
276
  end # def epoch
254
277
 
255
278
  def to_s(format=nil)
@@ -1,4 +1,5 @@
1
1
  require "fpm/namespace"
2
+ require "open4"
2
3
 
3
4
  # Some utility functions
4
5
  module FPM::Util
@@ -27,9 +28,17 @@ module FPM::Util
27
28
  end
28
29
 
29
30
  @logger.debug("Running command", :args => args)
30
- success = system(*args)
31
+
32
+ status = Open4::popen4(*args) do |pid, stdin, stdout, stderr|
33
+ stdin.close
34
+
35
+ @logger.debug("Process is running", :pid => pid)
36
+ @logger.pipe(stdout => :info, stderr => :error)
37
+ end
38
+ success = (status.exitstatus == 0)
39
+
31
40
  if !success
32
- raise ProcessFailed.new("#{program} failed (exit code #{$?.exitstatus})" \
41
+ raise ProcessFailed.new("#{program} failed (exit code #{status.exitstatus})" \
33
42
  ". Full command was:#{args.inspect}")
34
43
  end
35
44
  return success
@@ -1,3 +1,3 @@
1
1
  module FPM
2
- VERSION = "0.4.26"
2
+ VERSION = "0.4.27"
3
3
  end
@@ -22,6 +22,12 @@ Provides: <%= provides.map {|p| p.split(" ").first}.join ", " %>
22
22
  <% if !replaces.empty? -%>
23
23
  Replaces: <%= replaces.join(", ") %>
24
24
  <% end -%>
25
+ <% if attributes[:deb_recommends_given?] -%>
26
+ Recommends: <%= attributes[:deb_recommends].collect { |d| fix_dependency(d) }.flatten.join(", ") %>
27
+ <% end -%>
28
+ <% if attributes[:deb_suggests_given?] -%>
29
+ Suggests: <%= attributes[:deb_suggests].collect { |d| fix_dependency(d) }.flatten.join(", ") %>
30
+ <% end -%>
25
31
  Section: <%= category %>
26
32
  Priority: <%= attributes[:deb_priority] %>
27
33
  Homepage: <%= url or "http://nourlgiven.example.com/" %>
@@ -31,3 +37,8 @@ Description: <%= firstline %>
31
37
  <% if remainder.any? -%>
32
38
  <%= remainder.collect { |l| l =~ /^ *$/ ? " ." : " #{l}" }.join("\n") %>
33
39
  <% end -%>
40
+ <% if attributes[:deb_field_given?] -%>
41
+ <% attributes[:deb_field].each do |field, value| -%>
42
+ <%= field %>: <%= value %>
43
+ <% end -%>
44
+ <% end -%>
@@ -0,0 +1,11 @@
1
+ <pkg-info
2
+ <% if !attributes[:osxpkg_postinstall_action].nil? -%>postinstall-action="<%= attributes[:osxpkg_postinstall_action] %>"<% end -%>
3
+ >
4
+ <% if !attributes[:osxpkg_dont_obsolete].nil? -%>
5
+ <dont-obsolete>
6
+ <% attributes[:osxpkg_dont_obsolete].each do |filepath| -%>
7
+ <file path="<%= filepath %>"/>
8
+ <% end -%>
9
+ </dont-obsolete>
10
+ <% end -%>
11
+ </pkg-info>
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fpm
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.26
4
+ version: 0.4.27
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-12-27 00:00:00.000000000 Z
12
+ date: 2013-01-16 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: json
@@ -32,17 +32,17 @@ dependencies:
32
32
  requirement: !ruby/object:Gem::Requirement
33
33
  none: false
34
34
  requirements:
35
- - - ~>
35
+ - - ! '>='
36
36
  - !ruby/object:Gem::Version
37
- version: 0.4.3
37
+ version: 0.5.0
38
38
  type: :runtime
39
39
  prerelease: false
40
40
  version_requirements: !ruby/object:Gem::Requirement
41
41
  none: false
42
42
  requirements:
43
- - - ~>
43
+ - - ! '>='
44
44
  - !ruby/object:Gem::Version
45
- version: 0.4.3
45
+ version: 0.5.0
46
46
  - !ruby/object:Gem::Dependency
47
47
  name: backports
48
48
  requirement: !ruby/object:Gem::Requirement
@@ -91,6 +91,22 @@ dependencies:
91
91
  - - '='
92
92
  - !ruby/object:Gem::Version
93
93
  version: 0.3.1
94
+ - !ruby/object:Gem::Dependency
95
+ name: open4
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ type: :runtime
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
94
110
  - !ruby/object:Gem::Dependency
95
111
  name: rush
96
112
  requirement: !ruby/object:Gem::Requirement
@@ -152,31 +168,33 @@ files:
152
168
  - lib/fpm/command.rb
153
169
  - lib/fpm/namespace.rb
154
170
  - lib/fpm/package.rb
171
+ - lib/fpm/errors.rb
172
+ - lib/fpm/version.rb
173
+ - lib/fpm/package/gem.rb
174
+ - lib/fpm/package/dir.rb
175
+ - lib/fpm/package/pyfpm/__init__.pyc
155
176
  - lib/fpm/package/pyfpm/get_metadata.pyc
156
177
  - lib/fpm/package/pyfpm/get_metadata.py
157
- - lib/fpm/package/pyfpm/__init__.pyc
158
178
  - lib/fpm/package/pyfpm/__init__.py
159
- - lib/fpm/package/tar.rb
179
+ - lib/fpm/package/osxpkg.rb
180
+ - lib/fpm/package/npm.rb
181
+ - lib/fpm/package/pear.rb
160
182
  - lib/fpm/package/deb.rb
161
- - lib/fpm/package/dir.rb
162
- - lib/fpm/package/puppet.rb
163
- - lib/fpm/package/gem.rb
164
183
  - lib/fpm/package/python.rb
165
- - lib/fpm/package/solaris.rb
166
184
  - lib/fpm/package/rpm.rb
167
- - lib/fpm/package/npm.rb
168
- - lib/fpm/package/pear.rb
169
- - lib/fpm/version.rb
170
- - lib/fpm/errors.rb
185
+ - lib/fpm/package/puppet.rb
186
+ - lib/fpm/package/tar.rb
187
+ - lib/fpm/package/solaris.rb
171
188
  - lib/fpm/util.rb
172
189
  - lib/fpm.rb
173
190
  - bin/fpm-npm
174
191
  - bin/fpm
175
- - templates/solaris.erb
176
- - templates/rpm.erb
177
192
  - templates/deb.erb
193
+ - templates/rpm.erb
194
+ - templates/solaris.erb
178
195
  - templates/puppet/package/remove.pp.erb
179
196
  - templates/puppet/package.pp.erb
197
+ - templates/osxpkg.erb
180
198
  - LICENSE
181
199
  - CONTRIBUTORS
182
200
  - CHANGELIST
@@ -206,3 +224,4 @@ signing_key:
206
224
  specification_version: 3
207
225
  summary: fpm - package building and mangling
208
226
  test_files: []
227
+ has_rdoc: