fpm 0.4.26 → 0.4.27
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.
- data/CHANGELIST +17 -0
- data/lib/fpm.rb +1 -0
- data/lib/fpm/package.rb +1 -1
- data/lib/fpm/package/deb.rb +19 -0
- data/lib/fpm/package/osxpkg.rb +165 -0
- data/lib/fpm/package/pyfpm/__init__.pyc +0 -0
- data/lib/fpm/package/pyfpm/get_metadata.py +50 -64
- data/lib/fpm/package/pyfpm/get_metadata.pyc +0 -0
- data/lib/fpm/package/python.rb +15 -3
- data/lib/fpm/package/rpm.rb +25 -2
- data/lib/fpm/util.rb +11 -2
- data/lib/fpm/version.rb +1 -1
- data/templates/deb.erb +11 -0
- data/templates/osxpkg.erb +11 -0
- metadata +37 -18
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
data/lib/fpm/package.rb
CHANGED
@@ -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
|
-
|
340
|
+
system("#{editor} #{Shellwords.escape(path)}")
|
341
341
|
|
342
342
|
if File.size(path) == 0
|
343
343
|
raise "Empty file after editing: #{path.inspect}"
|
data/lib/fpm/package/deb.rb
CHANGED
@@ -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
|
Binary file
|
@@ -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
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
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))
|
Binary file
|
data/lib/fpm/package/python.rb
CHANGED
@@ -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
|
-
|
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
|
-
|
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 = /^([
|
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
|
data/lib/fpm/package/rpm.rb
CHANGED
@@ -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
|
-
|
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
|
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)
|
data/lib/fpm/util.rb
CHANGED
@@ -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
|
-
|
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 #{
|
41
|
+
raise ProcessFailed.new("#{program} failed (exit code #{status.exitstatus})" \
|
33
42
|
". Full command was:#{args.inspect}")
|
34
43
|
end
|
35
44
|
return success
|
data/lib/fpm/version.rb
CHANGED
data/templates/deb.erb
CHANGED
@@ -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.
|
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:
|
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.
|
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.
|
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/
|
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/
|
168
|
-
- lib/fpm/package/
|
169
|
-
- lib/fpm/
|
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:
|