fpm 0.4.0 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELIST CHANGED
@@ -1,9 +1,17 @@
1
- 0.4.0 (???)
1
+ 0.4.1 (March 19, 2012)
2
+ - Fix fpm so it works in ruby 1.8 again.
3
+ Tests run, and passing:
4
+ rvm 1.8.7,1.9.2,1.9.3 do bundle exec rspec
5
+
6
+ 0.4.0 (March 18, 2012)
2
7
  - Complete rewrite of pretty much everything.
3
8
  * Otherwise, the 'fpm' command functionality should be the same
4
9
  * Please let me know if something broke!
5
10
  - Now has an API (see examples/api directory)
6
11
  - Also has a proper test suite
12
+ - Updated the rpm spec generator to disable all the ways I've found rpmbuild
13
+ to molest packages. This means that fpm-generated rpms will no longer
14
+ strip libraries, move files around, randomly mutate jar files, etc.
7
15
  - Add --license and --vendor settings (via Pieter Loubser)
8
16
  - python support: try to name python packages sanely. Some pypi packages
9
17
  are literally called 'python-foo' so make sure we generate packages named
@@ -9,4 +9,4 @@ Michael Blume
9
9
  Pierre-Yves Ritschard
10
10
  sabowski
11
11
  Thomas Haggett
12
-
12
+ Pieter Loubser
@@ -150,9 +150,6 @@ class FPM::Command < Clamp::Command
150
150
  " and directories you want to include in the package. For others, like " \
151
151
  "'gem', it specifies the packages to download and use as the gem input",
152
152
  :attribute_name => :args
153
- def settings
154
- @settings ||= {}
155
- end
156
153
 
157
154
  FPM::Package.types.each do |name, klass|
158
155
  klass.apply_options(self)
@@ -0,0 +1,11 @@
1
+ # Copied from https://raw.github.com/marcandre/backports/master/lib/backports/1.9.3/io.rb
2
+ # Also Hacked just to make it work
3
+ # This is necessary until a newer version of backports (> 2.3.0) is available
4
+ class << IO
5
+ # Standard in Ruby 1.9.3 See official documentation[http://ruby-doc.org/core-1.9.3/IO.html#method-c-write]
6
+ def write(name, string, offset = nil, options = Backports::Undefined)
7
+ File.open(name, "w") do |fd|
8
+ fd.write(string)
9
+ end
10
+ end unless method_defined? :write
11
+ end
@@ -1,6 +1,7 @@
1
1
  require "fpm/namespace" # local
2
2
  require "fpm/util" # local
3
3
  require "tmpdir" # stdlib
4
+ require "backports" # gem 'backports'
4
5
  require "socket" # stdlib, for Socket.gethostname
5
6
  require "shellwords" # stdlib, for Shellwords.escape
6
7
  require "cabin" # gem "cabin"
@@ -16,6 +17,7 @@ class FPM::Package
16
17
 
17
18
  # This class is raised when a file already exists when trying to write.
18
19
  class FileAlreadyExists < StandardError
20
+ # Get a human-readable error message
19
21
  def to_s
20
22
  return "File already exists, refusing to continue: #{super}"
21
23
  end # def to_s
@@ -221,7 +223,7 @@ class FPM::Package
221
223
  end # def output
222
224
 
223
225
  def staging_path(path=nil)
224
- @staging_path ||= ::Dir.mktmpdir(File.join(::Dir.pwd, "package-#{type}-staging"))
226
+ @staging_path ||= ::Dir.mktmpdir("package-#{type}-staging", ::Dir.pwd)
225
227
 
226
228
  if path.nil?
227
229
  return @staging_path
@@ -231,7 +233,7 @@ class FPM::Package
231
233
  end # def staging_path
232
234
 
233
235
  def build_path(path=nil)
234
- @build_path ||= ::Dir.mktmpdir(File.join(::Dir.pwd, "package-#{type}-build"))
236
+ @build_path ||= ::Dir.mktmpdir("package-#{type}-build", ::Dir.pwd)
235
237
 
236
238
  if path.nil?
237
239
  return @build_path
@@ -268,7 +270,10 @@ class FPM::Package
268
270
  # Find will print the path you're searching first, so skip it and return
269
271
  # the rest. Also trim the leading path such that '#{staging_path}/' is removed
270
272
  # from the path before returning.
271
- return Find.find(staging_path) \
273
+ #
274
+ # Wrapping Find.find in an Enumerator is required for sane operation in ruby 1.8.7,
275
+ # but requires the 'backports' gem (which is used in other places in fpm)
276
+ return Enumerator.new { |y| Find.find(staging_path) { |path| y << path } } \
272
277
  .select { |path| path != staging_path } \
273
278
  .collect { |path| path[staging_path.length + 1.. -1] }
274
279
  end # def files
@@ -3,6 +3,8 @@ require "fpm/namespace"
3
3
  require "fpm/package"
4
4
  require "fpm/errors"
5
5
  require "fpm/util"
6
+ require "backports"
7
+ require "fpm/monkeypatches" # until backports > 2.3.0
6
8
  require "fileutils"
7
9
 
8
10
  # Support for debian packages (.deb files)
@@ -74,7 +74,7 @@ class FPM::Package::Dir < FPM::Package
74
74
  def clone(source, destination)
75
75
  # Copy all files from 'path' into staging_path
76
76
 
77
- Find.find(source).each do |file|
77
+ Find.find(source) do |file|
78
78
  next if source == file && File.directory?(file) # ignore the directory itself
79
79
  target = File.join(destination, file)
80
80
  copy(file, target)
@@ -128,7 +128,10 @@ class FPM::Package::Gem < FPM::Package
128
128
  self.description = description_options.find { |d| !(d.nil? or d.strip.empty?) }
129
129
 
130
130
  # Upstream rpms seem to do this, might as well share.
131
- self.provides << "rubygem(#{self.name})"
131
+ # TODO(sissel): Figure out how to hint this only to rpm?
132
+ # maybe something like attributes[:rpm_provides] for rpm specific stuff?
133
+ # Or just ignore it all together.
134
+ #self.provides << "rubygem(#{self.name})"
132
135
 
133
136
  # By default, we'll usually automatically provide this, but in the case that we are
134
137
  # composing multiple packages, it's best to explicitly include it in the provides list.
@@ -2,6 +2,7 @@ require "fpm/package"
2
2
  require "backports"
3
3
  require "fileutils"
4
4
  require "find"
5
+ require "fpm/monkeypatches" # until backports > 2.3.0
5
6
  require "arr-pm/file" # gem 'arr-pm'
6
7
 
7
8
  # RPM Package type.
@@ -4,7 +4,12 @@ require "fpm/util"
4
4
  require "fileutils"
5
5
  require "fpm/package/dir"
6
6
 
7
+ # Use a tarball as a package.
8
+ #
9
+ # This provides no metadata. Both input and output are supported.
7
10
  class FPM::Package::Tar < FPM::Package
11
+
12
+ # Input a tarball. Compressed tarballs should be OK.
8
13
  def input(input_path)
9
14
  # use part of the filename as the package name
10
15
  self.name = File.basename(input_path).split(".").first
@@ -37,6 +42,10 @@ class FPM::Package::Tar < FPM::Package
37
42
  dir.cleanup_build
38
43
  end # def input
39
44
 
45
+ # Output a tarball.
46
+ #
47
+ # If the output path ends predictably (like in .tar.gz) it will try to obey
48
+ # the compression type.
40
49
  def output(output_path)
41
50
  # Unpack the tarball to the staging path
42
51
  args = ["-cf", output_path, "-C", staging_path, "."]
@@ -47,6 +56,7 @@ class FPM::Package::Tar < FPM::Package
47
56
  safesystem("tar", *args)
48
57
  end # def output
49
58
 
59
+ # Generate the proper tar flags based on the path name.
50
60
  def tar_compression_flag(path)
51
61
  case path
52
62
  when /\.tar\.bz2$/
metadata CHANGED
@@ -1,154 +1,152 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: fpm
3
- version: !ruby/object:Gem::Version
4
- version: 0.4.0
3
+ version: !ruby/object:Gem::Version
4
+ hash: 13
5
5
  prerelease:
6
+ segments:
7
+ - 0
8
+ - 4
9
+ - 1
10
+ version: 0.4.1
6
11
  platform: ruby
7
- authors:
12
+ authors:
8
13
  - Jordan Sissel
9
14
  autorequire:
10
15
  bindir: bin
11
16
  cert_chain: []
12
- date: 2012-03-19 00:00:00.000000000 Z
13
- dependencies:
14
- - !ruby/object:Gem::Dependency
17
+
18
+ date: 2012-03-19 00:00:00 Z
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
15
21
  name: json
16
- requirement: !ruby/object:Gem::Requirement
17
- none: false
18
- requirements:
19
- - - ! '>='
20
- - !ruby/object:Gem::Version
21
- version: '0'
22
- type: :runtime
23
22
  prerelease: false
24
- version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
- requirements:
27
- - - ! '>='
28
- - !ruby/object:Gem::Version
29
- version: '0'
30
- - !ruby/object:Gem::Dependency
31
- name: cabin
32
- requirement: !ruby/object:Gem::Requirement
33
- none: false
34
- requirements:
35
- - - ~>
36
- - !ruby/object:Gem::Version
37
- version: 0.4.3
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ hash: 3
29
+ segments:
30
+ - 0
31
+ version: "0"
38
32
  type: :runtime
33
+ version_requirements: *id001
34
+ - !ruby/object:Gem::Dependency
35
+ name: cabin
39
36
  prerelease: false
40
- version_requirements: !ruby/object:Gem::Requirement
37
+ requirement: &id002 !ruby/object:Gem::Requirement
41
38
  none: false
42
- requirements:
39
+ requirements:
43
40
  - - ~>
44
- - !ruby/object:Gem::Version
41
+ - !ruby/object:Gem::Version
42
+ hash: 9
43
+ segments:
44
+ - 0
45
+ - 4
46
+ - 3
45
47
  version: 0.4.3
46
- - !ruby/object:Gem::Dependency
47
- name: backports
48
- requirement: !ruby/object:Gem::Requirement
49
- none: false
50
- requirements:
51
- - - '='
52
- - !ruby/object:Gem::Version
53
- version: 2.3.0
54
48
  type: :runtime
49
+ version_requirements: *id002
50
+ - !ruby/object:Gem::Dependency
51
+ name: backports
55
52
  prerelease: false
56
- version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
- requirements:
59
- - - '='
60
- - !ruby/object:Gem::Version
53
+ requirement: &id003 !ruby/object:Gem::Requirement
54
+ none: false
55
+ requirements:
56
+ - - "="
57
+ - !ruby/object:Gem::Version
58
+ hash: 3
59
+ segments:
60
+ - 2
61
+ - 3
62
+ - 0
61
63
  version: 2.3.0
62
- - !ruby/object:Gem::Dependency
63
- name: arr-pm
64
- requirement: !ruby/object:Gem::Requirement
65
- none: false
66
- requirements:
67
- - - ~>
68
- - !ruby/object:Gem::Version
69
- version: 0.0.7
70
64
  type: :runtime
65
+ version_requirements: *id003
66
+ - !ruby/object:Gem::Dependency
67
+ name: arr-pm
71
68
  prerelease: false
72
- version_requirements: !ruby/object:Gem::Requirement
69
+ requirement: &id004 !ruby/object:Gem::Requirement
73
70
  none: false
74
- requirements:
71
+ requirements:
75
72
  - - ~>
76
- - !ruby/object:Gem::Version
73
+ - !ruby/object:Gem::Version
74
+ hash: 17
75
+ segments:
76
+ - 0
77
+ - 0
78
+ - 7
77
79
  version: 0.0.7
78
- - !ruby/object:Gem::Dependency
79
- name: clamp
80
- requirement: !ruby/object:Gem::Requirement
81
- none: false
82
- requirements:
83
- - - ! '>='
84
- - !ruby/object:Gem::Version
85
- version: '0'
86
80
  type: :runtime
81
+ version_requirements: *id004
82
+ - !ruby/object:Gem::Dependency
83
+ name: clamp
87
84
  prerelease: false
88
- version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
- requirements:
91
- - - ! '>='
92
- - !ruby/object:Gem::Version
93
- version: '0'
94
- - !ruby/object:Gem::Dependency
85
+ requirement: &id005 !ruby/object:Gem::Requirement
86
+ none: false
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ hash: 3
91
+ segments:
92
+ - 0
93
+ version: "0"
94
+ type: :runtime
95
+ version_requirements: *id005
96
+ - !ruby/object:Gem::Dependency
95
97
  name: rush
96
- requirement: !ruby/object:Gem::Requirement
97
- none: false
98
- requirements:
99
- - - ! '>='
100
- - !ruby/object:Gem::Version
101
- version: '0'
102
- type: :development
103
98
  prerelease: false
104
- version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
- requirements:
107
- - - ! '>='
108
- - !ruby/object:Gem::Version
109
- version: '0'
110
- - !ruby/object:Gem::Dependency
111
- name: rspec
112
- requirement: !ruby/object:Gem::Requirement
113
- none: false
114
- requirements:
115
- - - ! '>='
116
- - !ruby/object:Gem::Version
117
- version: '0'
99
+ requirement: &id006 !ruby/object:Gem::Requirement
100
+ none: false
101
+ requirements:
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ hash: 3
105
+ segments:
106
+ - 0
107
+ version: "0"
118
108
  type: :development
109
+ version_requirements: *id006
110
+ - !ruby/object:Gem::Dependency
111
+ name: rspec
119
112
  prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- none: false
122
- requirements:
123
- - - ! '>='
124
- - !ruby/object:Gem::Version
125
- version: '0'
126
- - !ruby/object:Gem::Dependency
127
- name: insist
128
- requirement: !ruby/object:Gem::Requirement
129
- none: false
130
- requirements:
131
- - - ~>
132
- - !ruby/object:Gem::Version
133
- version: 0.0.3
113
+ requirement: &id007 !ruby/object:Gem::Requirement
114
+ none: false
115
+ requirements:
116
+ - - ">="
117
+ - !ruby/object:Gem::Version
118
+ hash: 3
119
+ segments:
120
+ - 0
121
+ version: "0"
134
122
  type: :development
123
+ version_requirements: *id007
124
+ - !ruby/object:Gem::Dependency
125
+ name: insist
135
126
  prerelease: false
136
- version_requirements: !ruby/object:Gem::Requirement
127
+ requirement: &id008 !ruby/object:Gem::Requirement
137
128
  none: false
138
- requirements:
129
+ requirements:
139
130
  - - ~>
140
- - !ruby/object:Gem::Version
141
- version: 0.0.3
142
- description: Convert directories, rpms, python eggs, rubygems, and more to rpms, debs,
143
- solaris packages and more. Win at package management without wasting pointless hours
144
- debugging bad rpm specs!
131
+ - !ruby/object:Gem::Version
132
+ hash: 21
133
+ segments:
134
+ - 0
135
+ - 0
136
+ - 5
137
+ version: 0.0.5
138
+ type: :development
139
+ version_requirements: *id008
140
+ description: Convert directories, rpms, python eggs, rubygems, and more to rpms, debs, solaris packages and more. Win at package management without wasting pointless hours debugging bad rpm specs!
145
141
  email: jls@semicomplete.com
146
- executables:
142
+ executables:
147
143
  - fpm
148
144
  - fpm-npm
149
145
  extensions: []
146
+
150
147
  extra_rdoc_files: []
151
- files:
148
+
149
+ files:
152
150
  - lib/fpm/errors.rb
153
151
  - lib/fpm/util.rb
154
152
  - lib/fpm/command.rb
@@ -166,6 +164,7 @@ files:
166
164
  - lib/fpm/package/dir.rb
167
165
  - lib/fpm/package/puppet.rb
168
166
  - lib/fpm/package/solaris.rb
167
+ - lib/fpm/monkeypatches.rb
169
168
  - lib/fpm/package.rb
170
169
  - lib/fpm/namespace.rb
171
170
  - lib/fpm.rb
@@ -181,28 +180,37 @@ files:
181
180
  - CHANGELIST
182
181
  homepage: https://github.com/jordansissel/fpm
183
182
  licenses: []
183
+
184
184
  post_install_message:
185
185
  rdoc_options: []
186
- require_paths:
186
+
187
+ require_paths:
187
188
  - lib
188
189
  - lib
189
- required_ruby_version: !ruby/object:Gem::Requirement
190
+ required_ruby_version: !ruby/object:Gem::Requirement
190
191
  none: false
191
- requirements:
192
- - - ! '>='
193
- - !ruby/object:Gem::Version
194
- version: '0'
195
- required_rubygems_version: !ruby/object:Gem::Requirement
192
+ requirements:
193
+ - - ">="
194
+ - !ruby/object:Gem::Version
195
+ hash: 3
196
+ segments:
197
+ - 0
198
+ version: "0"
199
+ required_rubygems_version: !ruby/object:Gem::Requirement
196
200
  none: false
197
- requirements:
198
- - - ! '>='
199
- - !ruby/object:Gem::Version
200
- version: '0'
201
+ requirements:
202
+ - - ">="
203
+ - !ruby/object:Gem::Version
204
+ hash: 3
205
+ segments:
206
+ - 0
207
+ version: "0"
201
208
  requirements: []
209
+
202
210
  rubyforge_project:
203
- rubygems_version: 1.8.18
211
+ rubygems_version: 1.8.19
204
212
  signing_key:
205
213
  specification_version: 3
206
214
  summary: fpm - package building and mangling
207
215
  test_files: []
208
- has_rdoc:
216
+