fpm 0.4.30 → 0.4.31

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 CHANGED
@@ -1,3 +1,10 @@
1
+ 0.4.31 (March 21, 2013)
2
+ - rpm: new flag --rpm-use-file-permissions which try to create an rpm
3
+ that has file ownership/modes that exactly mirror how they are on
4
+ the filesystem at package time. (#377, patch by Paul Rhodes)
5
+ - general: remove empty directories only when they match the exclude
6
+ pattern (#323, patch by Pranay Kanwar)
7
+
1
8
  0.4.30 (March 21, 2013)
2
9
  - Solaris: --solaris-user and --solaris-group flags to specify
3
10
  the owner of files in a package. (#342, patch by Derek Olsen)
@@ -1,6 +1,7 @@
1
1
  require "fpm/namespace" # local
2
2
  require "fpm/util" # local
3
3
  require "pathname" # stdlib
4
+ require "find"
4
5
  require "tmpdir" # stdlib
5
6
  require "backports" # gem 'backports'
6
7
  require "socket" # stdlib, for Socket.gethostname
@@ -361,43 +362,20 @@ class FPM::Package
361
362
  installdir = staging_path
362
363
  end
363
364
 
364
- exclude_path = proc do |file|
365
- FileUtils.remove_entry_secure(staging_path(file))
366
- Pathname.new(staging_path(file)).parent.ascend do |d|
367
- if (::Dir.entries(d) - %w[ . .. ]).empty?
368
- ::Dir.rmdir(d)
369
- @logger.info("Deleting empty directory left by removing exluded file", :path => d)
370
- else
365
+ Find.find(staging_path) do |path|
366
+ match_path = path.sub("#{staging_path}/", '')
367
+
368
+ attributes[:excludes].each do |wildcard|
369
+ @logger.debug("Checking path against wildcard", :path => path, :wildcard => wildcard)
370
+
371
+ if File.fnmatch(wildcard, match_path)
372
+ @logger.info("Removing excluded path", :path => path, :matches => wildcard)
373
+ FileUtils.remove_entry_secure(path)
374
+ Find.prune
371
375
  break
372
376
  end
373
377
  end
374
- end # exclude_path
375
-
376
- attributes[:excludes].each do |wildcard|
377
- @logger.debug("Checking for things to exclude", :wildcard => wildcard)
378
- files.each do |file|
379
- @logger.debug("Checking path against wildcard", :path => file, :wildcard => wildcard)
380
- if File.fnmatch(wildcard, file)
381
- @logger.info("Removing excluded file", :path => file, :matches => wildcard)
382
- exclude_path.call(file)
383
- next
384
- end
385
-
386
- @logger.debug("Checking if path is a child of an excluded directory",
387
- :path => file, :wildcard => wildcard,
388
- :directory? => File.directory?(staging_path(wildcard)))
389
- if File.directory?(staging_path(wildcard))
390
- # issue #248, if the excludes entry is a directory, ignore that
391
- # directory and anything inside it.
392
- exclude_re = Regexp.new("^#{Regexp.escape(wildcard)}($|/)")
393
- if exclude_re.match(file)
394
- @logger.info("Removing excluded file which has a parent excluded directory",
395
- :path => file, :excluded => wildcard)
396
- exclude_path.call(file)
397
- end
398
- end
399
- end
400
- end # files.each
378
+ end
401
379
  end # def exclude
402
380
 
403
381
 
@@ -28,6 +28,9 @@ class FPM::Package::RPM < FPM::Package
28
28
  "bzip2" => "w9.bzdio"
29
29
  } unless defined?(COMPRESSION_MAP)
30
30
 
31
+ option "--use-file-permissions", :flag,
32
+ "Use existing file permissions when defining ownership and modes"
33
+
31
34
  option "--user", "USER",
32
35
  "Set the user to USER in the %files section.",
33
36
  :default => 'root' do |value|
@@ -80,6 +83,17 @@ class FPM::Package::RPM < FPM::Package
80
83
 
81
84
  private
82
85
 
86
+ def rpm_file_entry(file)
87
+ return file unless attributes[:rpm_use_file_permissions?]
88
+
89
+ stat = File.stat( file.gsub(/\"/, '') )
90
+ user = Etc.getpwuid(stat.uid).name
91
+ group = Etc.getgrgid(stat.gid).name
92
+ mode = stat.mode
93
+ return sprintf("%%attr(%o, %s, %s) %s\n", mode & 4095 , user, group, file)
94
+ end
95
+
96
+
83
97
  # Handle any architecture naming conversions.
84
98
  # For example, debian calls amd64 what redhat calls x86_64, this
85
99
  # method fixes those types of things.
@@ -1,3 +1,3 @@
1
1
  module FPM
2
- VERSION = "0.4.30"
2
+ VERSION = "0.4.31"
3
3
  end
@@ -119,11 +119,11 @@ cp <%= source_safe %> <%= target_safe %>
119
119
  <% end -%>
120
120
  <% subdirs = [] -%>
121
121
  <% directories.each do |path| -%>
122
- %dir <%= File.join(prefix, path) %>
122
+ %dir <%= rpm_file_entry(File.join(prefix, path)) %>
123
123
  <%# We need to include hidden directories, but exclude . and .. -%>
124
124
  <% ::Dir.glob("#{path}/**/*/", File::FNM_DOTMATCH) do |subdir| -%>
125
125
  <% next if File.basename(subdir) =~ /^\.+$/ -%>
126
- %dir <%= File.join(prefix, subdir) %>
126
+ %dir <%= rpm_file_entry(File.join(prefix, subdir)) %>
127
127
  <% subdirs << subdir -%>
128
128
  <% end -%>
129
129
  <% end -%>
@@ -146,6 +146,7 @@ cp <%= source_safe %> <%= target_safe %>
146
146
  .collect { |f| f.gsub("*", "[*]") } \
147
147
  .collect { |f| f.gsub("?", "[?]") } \
148
148
  .collect { |f| f.gsub("%", "[%]") } \
149
+ .map { |f| rpm_file_entry(f) } \
149
150
  .join("\n")
150
151
  #.collect { |f| File.join(prefix, f) } \
151
152
  %>
metadata CHANGED
@@ -1,169 +1,169 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: fpm
3
- version: !ruby/object:Gem::Version
4
- version: 0.4.30
3
+ version: !ruby/object:Gem::Version
4
+ hash: 49
5
5
  prerelease:
6
+ segments:
7
+ - 0
8
+ - 4
9
+ - 31
10
+ version: 0.4.31
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: 2013-03-21 00:00:00.000000000 Z
13
- dependencies:
14
- - !ruby/object:Gem::Dependency
17
+
18
+ date: 2013-03-21 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: 1.7.7
22
- type: :runtime
23
22
  prerelease: false
24
- version_requirements: !ruby/object:Gem::Requirement
23
+ requirement: &id001 !ruby/object:Gem::Requirement
25
24
  none: false
26
- requirements:
25
+ requirements:
27
26
  - - ~>
28
- - !ruby/object:Gem::Version
27
+ - !ruby/object:Gem::Version
28
+ hash: 5
29
+ segments:
30
+ - 1
31
+ - 7
32
+ - 7
29
33
  version: 1.7.7
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.6.0
38
34
  type: :runtime
35
+ version_requirements: *id001
36
+ - !ruby/object:Gem::Dependency
37
+ name: cabin
39
38
  prerelease: false
40
- version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
- requirements:
43
- - - ! '>='
44
- - !ruby/object:Gem::Version
39
+ requirement: &id002 !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ">="
43
+ - !ruby/object:Gem::Version
44
+ hash: 7
45
+ segments:
46
+ - 0
47
+ - 6
48
+ - 0
45
49
  version: 0.6.0
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.6.2
54
50
  type: :runtime
51
+ version_requirements: *id002
52
+ - !ruby/object:Gem::Dependency
53
+ name: backports
55
54
  prerelease: false
56
- version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
- requirements:
59
- - - '='
60
- - !ruby/object:Gem::Version
55
+ requirement: &id003 !ruby/object:Gem::Requirement
56
+ none: false
57
+ requirements:
58
+ - - "="
59
+ - !ruby/object:Gem::Version
60
+ hash: 19
61
+ segments:
62
+ - 2
63
+ - 6
64
+ - 2
61
65
  version: 2.6.2
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.8
70
66
  type: :runtime
67
+ version_requirements: *id003
68
+ - !ruby/object:Gem::Dependency
69
+ name: arr-pm
71
70
  prerelease: false
72
- version_requirements: !ruby/object:Gem::Requirement
71
+ requirement: &id004 !ruby/object:Gem::Requirement
73
72
  none: false
74
- requirements:
73
+ requirements:
75
74
  - - ~>
76
- - !ruby/object:Gem::Version
75
+ - !ruby/object:Gem::Version
76
+ hash: 15
77
+ segments:
78
+ - 0
79
+ - 0
80
+ - 8
77
81
  version: 0.0.8
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.3.1
86
82
  type: :runtime
83
+ version_requirements: *id004
84
+ - !ruby/object:Gem::Dependency
85
+ name: clamp
87
86
  prerelease: false
88
- version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
- requirements:
91
- - - '='
92
- - !ruby/object:Gem::Version
87
+ requirement: &id005 !ruby/object:Gem::Requirement
88
+ none: false
89
+ requirements:
90
+ - - "="
91
+ - !ruby/object:Gem::Version
92
+ hash: 17
93
+ segments:
94
+ - 0
95
+ - 3
96
+ - 1
93
97
  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
98
  type: :runtime
99
+ version_requirements: *id005
100
+ - !ruby/object:Gem::Dependency
101
+ name: open4
103
102
  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
103
+ requirement: &id006 !ruby/object:Gem::Requirement
104
+ none: false
105
+ requirements:
106
+ - - ">="
107
+ - !ruby/object:Gem::Version
108
+ hash: 3
109
+ segments:
110
+ - 0
111
+ version: "0"
112
+ type: :runtime
113
+ version_requirements: *id006
114
+ - !ruby/object:Gem::Dependency
111
115
  name: rush
112
- requirement: !ruby/object:Gem::Requirement
113
- none: false
114
- requirements:
115
- - - ! '>='
116
- - !ruby/object:Gem::Version
117
- version: '0'
118
- type: :development
119
116
  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: rspec
128
- requirement: !ruby/object:Gem::Requirement
129
- none: false
130
- requirements:
131
- - - ! '>='
132
- - !ruby/object:Gem::Version
133
- version: '0'
117
+ requirement: &id007 !ruby/object:Gem::Requirement
118
+ none: false
119
+ requirements:
120
+ - - ">="
121
+ - !ruby/object:Gem::Version
122
+ hash: 3
123
+ segments:
124
+ - 0
125
+ version: "0"
134
126
  type: :development
127
+ version_requirements: *id007
128
+ - !ruby/object:Gem::Dependency
129
+ name: rspec
135
130
  prerelease: false
136
- version_requirements: !ruby/object:Gem::Requirement
137
- none: false
138
- requirements:
139
- - - ! '>='
140
- - !ruby/object:Gem::Version
141
- version: '0'
142
- - !ruby/object:Gem::Dependency
143
- name: insist
144
- requirement: !ruby/object:Gem::Requirement
145
- none: false
146
- requirements:
147
- - - ~>
148
- - !ruby/object:Gem::Version
149
- version: 0.0.5
131
+ requirement: &id008 !ruby/object:Gem::Requirement
132
+ none: false
133
+ requirements:
134
+ - - ">="
135
+ - !ruby/object:Gem::Version
136
+ hash: 3
137
+ segments:
138
+ - 0
139
+ version: "0"
150
140
  type: :development
141
+ version_requirements: *id008
142
+ - !ruby/object:Gem::Dependency
143
+ name: insist
151
144
  prerelease: false
152
- version_requirements: !ruby/object:Gem::Requirement
145
+ requirement: &id009 !ruby/object:Gem::Requirement
153
146
  none: false
154
- requirements:
147
+ requirements:
155
148
  - - ~>
156
- - !ruby/object:Gem::Version
149
+ - !ruby/object:Gem::Version
150
+ hash: 21
151
+ segments:
152
+ - 0
153
+ - 0
154
+ - 5
157
155
  version: 0.0.5
158
- description: Convert directories, rpms, python eggs, rubygems, and more to rpms, debs,
159
- solaris packages and more. Win at package management without wasting pointless hours
160
- debugging bad rpm specs!
156
+ type: :development
157
+ version_requirements: *id009
158
+ 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!
161
159
  email: jls@semicomplete.com
162
- executables:
160
+ executables:
163
161
  - fpm
164
162
  extensions: []
163
+
165
164
  extra_rdoc_files: []
166
- files:
165
+
166
+ files:
167
167
  - lib/fpm.rb
168
168
  - lib/fpm/errors.rb
169
169
  - lib/fpm/namespace.rb
@@ -184,8 +184,8 @@ files:
184
184
  - lib/fpm/package/gem.rb
185
185
  - lib/fpm/package/rpm.rb
186
186
  - lib/fpm/util.rb
187
- - lib/fpm/package.rb
188
187
  - lib/fpm/command.rb
188
+ - lib/fpm/package.rb
189
189
  - lib/fpm/version.rb
190
190
  - bin/fpm
191
191
  - templates/deb.erb
@@ -199,28 +199,37 @@ files:
199
199
  - CHANGELIST
200
200
  homepage: https://github.com/jordansissel/fpm
201
201
  licenses: []
202
+
202
203
  post_install_message:
203
204
  rdoc_options: []
204
- require_paths:
205
+
206
+ require_paths:
205
207
  - lib
206
208
  - lib
207
- required_ruby_version: !ruby/object:Gem::Requirement
209
+ required_ruby_version: !ruby/object:Gem::Requirement
208
210
  none: false
209
- requirements:
210
- - - ! '>='
211
- - !ruby/object:Gem::Version
212
- version: '0'
213
- required_rubygems_version: !ruby/object:Gem::Requirement
211
+ requirements:
212
+ - - ">="
213
+ - !ruby/object:Gem::Version
214
+ hash: 3
215
+ segments:
216
+ - 0
217
+ version: "0"
218
+ required_rubygems_version: !ruby/object:Gem::Requirement
214
219
  none: false
215
- requirements:
216
- - - ! '>='
217
- - !ruby/object:Gem::Version
218
- version: '0'
220
+ requirements:
221
+ - - ">="
222
+ - !ruby/object:Gem::Version
223
+ hash: 3
224
+ segments:
225
+ - 0
226
+ version: "0"
219
227
  requirements: []
228
+
220
229
  rubyforge_project:
221
- rubygems_version: 1.8.24
230
+ rubygems_version: 1.8.25
222
231
  signing_key:
223
232
  specification_version: 3
224
233
  summary: fpm - package building and mangling
225
234
  test_files: []
226
- has_rdoc:
235
+