fpm 0.4.30 → 0.4.31

Sign up to get free protection for your applications and to get access to all the features.
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
+