fpm-cookery 0.7.0 → 0.8.0
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/CHANGELOG.md +6 -0
- data/fpm-cookery.gemspec +2 -2
- data/lib/fpm/cookery/log.rb +18 -0
- data/lib/fpm/cookery/packager.rb +86 -53
- data/lib/fpm/cookery/path_helper.rb +4 -0
- data/lib/fpm/cookery/recipe.rb +1 -1
- data/lib/fpm/cookery/source_handler/git.rb +16 -2
- data/lib/fpm/cookery/version.rb +1 -1
- data/spec/path_helper_spec.rb +1 -0
- metadata +42 -17
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
# v0.8.0 (2012-05-23)
|
2
|
+
* Add /opt path helper.
|
3
|
+
* Use the new fpm API. (requires at least fpm-0.4.x)
|
4
|
+
* Show the fpm log output via cabin.
|
5
|
+
* Skip git fetch if the specified sha or tag exists.
|
6
|
+
|
1
7
|
# v0.7.0 (2011-11-26)
|
2
8
|
* Add hg (mercurial) source handler.
|
3
9
|
* Fix tags fetchting for the git source handler.
|
data/fpm-cookery.gemspec
CHANGED
@@ -18,9 +18,9 @@ Gem::Specification.new do |s|
|
|
18
18
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
19
|
s.require_paths = ["lib"]
|
20
20
|
|
21
|
-
s.add_development_dependency "fpm"
|
21
|
+
s.add_development_dependency "fpm", "~> 0.4"
|
22
22
|
s.add_development_dependency "minitest"
|
23
23
|
s.add_development_dependency "rake"
|
24
|
-
s.add_runtime_dependency "fpm"
|
24
|
+
s.add_runtime_dependency "fpm", "~> 0.4"
|
25
25
|
s.add_runtime_dependency "facter"
|
26
26
|
end
|
data/lib/fpm/cookery/log.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'fpm/cookery/log/output/null'
|
2
|
+
require 'cabin' # Via fpm.
|
2
3
|
|
3
4
|
module FPM
|
4
5
|
module Cookery
|
@@ -6,6 +7,10 @@ module FPM
|
|
6
7
|
@debug = false
|
7
8
|
@output = FPM::Cookery::Log::Output::Null.new
|
8
9
|
|
10
|
+
@channel = ::Cabin::Channel.get
|
11
|
+
@channel.subscribe(self)
|
12
|
+
@channel.level = :debug
|
13
|
+
|
9
14
|
class << self
|
10
15
|
def enable_debug(value = true)
|
11
16
|
@debug = value
|
@@ -38,6 +43,19 @@ module FPM
|
|
38
43
|
def puts(message)
|
39
44
|
@output.puts(message)
|
40
45
|
end
|
46
|
+
|
47
|
+
def <<(event)
|
48
|
+
level = event.fetch(:level, :info).downcase.to_sym
|
49
|
+
|
50
|
+
event.delete(:level)
|
51
|
+
|
52
|
+
data = event.clone
|
53
|
+
|
54
|
+
data.delete(:message)
|
55
|
+
data.delete(:timestamp)
|
56
|
+
|
57
|
+
send(level, "[FPM] #{event[:message]} #{data.to_json}")
|
58
|
+
end
|
41
59
|
end
|
42
60
|
end
|
43
61
|
end
|
data/lib/fpm/cookery/packager.rb
CHANGED
@@ -5,6 +5,9 @@ require 'fpm/cookery/utils'
|
|
5
5
|
require 'fpm/cookery/source_integrity_check'
|
6
6
|
require 'fpm/cookery/path'
|
7
7
|
require 'fpm/cookery/log'
|
8
|
+
require 'fpm/package/dir'
|
9
|
+
require 'fpm/package/deb'
|
10
|
+
require 'fpm/package/rpm'
|
8
11
|
|
9
12
|
module FPM
|
10
13
|
module Cookery
|
@@ -140,68 +143,98 @@ module FPM
|
|
140
143
|
maintainer = recipe.maintainer || begin
|
141
144
|
username = `git config --get user.name`.strip
|
142
145
|
useremail = `git config --get user.email`.strip
|
143
|
-
|
144
|
-
"#{username} <#{useremail}>"
|
146
|
+
|
147
|
+
username && useremail ? "#{username} <#{useremail}>" : nil
|
145
148
|
end
|
146
149
|
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
150
|
+
input = FPM::Package::Dir.new
|
151
|
+
|
152
|
+
input.name = recipe.name
|
153
|
+
input.version = version
|
154
|
+
input.url = recipe.homepage || recipe.url
|
155
|
+
input.maintainer = maintainer
|
156
|
+
input.category = recipe.section || 'optional'
|
157
|
+
input.epoch = epoch if epoch
|
158
|
+
input.description = recipe.description.strip if recipe.description
|
159
|
+
input.architecture = recipe.arch.to_s if recipe.arch
|
160
|
+
|
161
|
+
input.dependencies += recipe.depends
|
162
|
+
input.conflicts += recipe.conflicts
|
163
|
+
input.provides += recipe.provides
|
164
|
+
input.replaces += recipe.replaces
|
165
|
+
input.config_files += recipe.config_files
|
166
|
+
|
167
|
+
add_scripts(recipe, input)
|
168
|
+
remove_excluded_files(recipe)
|
169
|
+
|
170
|
+
input.attributes[:prefix] = '/'
|
171
|
+
input.attributes[:chdir] = recipe.destdir.to_s
|
172
|
+
input.attributes[:excludes] = [] # TODO replace remove_excluded_files() with this
|
173
|
+
input.input('.')
|
174
|
+
|
175
|
+
output_class = FPM::Package.types[@target]
|
176
|
+
|
177
|
+
output = input.convert(output_class)
|
178
|
+
|
179
|
+
begin
|
180
|
+
output.output(output.to_s)
|
181
|
+
rescue FPM::Package::FileAlreadyExists
|
182
|
+
Log.info "Removing existing package file: #{output.to_s}"
|
183
|
+
FileUtils.rm_f(output.to_s)
|
184
|
+
retry
|
185
|
+
ensure
|
186
|
+
input.cleanup if input
|
187
|
+
output.cleanup if output
|
188
|
+
Log.info "Created package: #{File.join(Dir.pwd, output.to_s)}"
|
189
|
+
end
|
190
|
+
end
|
191
|
+
end
|
182
192
|
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
193
|
+
def add_scripts(recipe, input)
|
194
|
+
error = false
|
195
|
+
|
196
|
+
# Map script names to fpm method names.
|
197
|
+
script_map = {
|
198
|
+
'pre_install' => :before_install,
|
199
|
+
'post_install' => :after_install,
|
200
|
+
'pre_uninstall' => :before_remove,
|
201
|
+
'post_uninstall' => :after_remove
|
202
|
+
}
|
203
|
+
|
204
|
+
script_map.each do |script, fpm_script|
|
205
|
+
unless recipe.send(script).nil?
|
206
|
+
script_file = FPM::Cookery::Path.new(recipe.send(script))
|
207
|
+
|
208
|
+
# If the script file is an absolute path, just use that path.
|
209
|
+
# Otherwise consider the location relative to the recipe.
|
210
|
+
unless script_file.absolute?
|
211
|
+
script_file = File.expand_path("../#{script_file.to_s}", recipe.filename)
|
189
212
|
end
|
190
|
-
end
|
191
213
|
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
214
|
+
if File.exists?(script_file)
|
215
|
+
input.scripts[fpm_script] = File.read(script_file.to_s)
|
216
|
+
else
|
217
|
+
Log.error "#{script} script '#{script_file}' is missing"
|
218
|
+
error = true
|
197
219
|
end
|
198
220
|
end
|
221
|
+
end
|
199
222
|
|
200
|
-
|
223
|
+
exit(1) if error
|
224
|
+
end
|
201
225
|
|
202
|
-
|
203
|
-
|
204
|
-
|
226
|
+
# Remove all excluded files from the destdir so they do not end up in the
|
227
|
+
# package.
|
228
|
+
def remove_excluded_files(recipe)
|
229
|
+
Dir.chdir(recipe.destdir.to_s) do
|
230
|
+
Dir['**/*'].each do |file|
|
231
|
+
recipe.exclude.each do |ex|
|
232
|
+
if File.fnmatch(ex, file)
|
233
|
+
Log.info "Exclude file: #{file}"
|
234
|
+
FileUtils.rm_f(file)
|
235
|
+
end
|
236
|
+
end
|
237
|
+
end
|
205
238
|
end
|
206
239
|
end
|
207
240
|
end
|
data/lib/fpm/cookery/recipe.rb
CHANGED
@@ -9,10 +9,16 @@ module FPM
|
|
9
9
|
NAME = :git
|
10
10
|
|
11
11
|
def fetch
|
12
|
+
rev = options[:sha] || options[:tag]
|
13
|
+
|
12
14
|
if local_path.exist?
|
13
15
|
Dir.chdir(local_path) do
|
14
|
-
|
15
|
-
|
16
|
+
if rev and has_rev?(rev)
|
17
|
+
Log.info("Skipping fetch, rev #{rev} exists.")
|
18
|
+
else
|
19
|
+
git('fetch', url)
|
20
|
+
git('fetch', '--tags', url)
|
21
|
+
end
|
16
22
|
end
|
17
23
|
else
|
18
24
|
Dir.chdir(cachedir) do
|
@@ -53,6 +59,14 @@ module FPM
|
|
53
59
|
Log.debug "git #{command} #{args.join(' ')}"
|
54
60
|
safesystem('git', command, *args)
|
55
61
|
end
|
62
|
+
|
63
|
+
def has_rev?(rev)
|
64
|
+
Log.debug "git show #{rev} >/dev/null 2>&1"
|
65
|
+
safesystem("git show #{rev} >/dev/null 2>&1")
|
66
|
+
true
|
67
|
+
rescue
|
68
|
+
false
|
69
|
+
end
|
56
70
|
end
|
57
71
|
end
|
58
72
|
end
|
data/lib/fpm/cookery/version.rb
CHANGED
data/spec/path_helper_spec.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fpm-cookery
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.8.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,22 +9,27 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2012-05-23 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: fpm
|
16
|
-
requirement:
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
|
-
- -
|
19
|
+
- - ~>
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version: '0'
|
21
|
+
version: '0.4'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements:
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0.4'
|
25
30
|
- !ruby/object:Gem::Dependency
|
26
31
|
name: minitest
|
27
|
-
requirement:
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
28
33
|
none: false
|
29
34
|
requirements:
|
30
35
|
- - ! '>='
|
@@ -32,10 +37,15 @@ dependencies:
|
|
32
37
|
version: '0'
|
33
38
|
type: :development
|
34
39
|
prerelease: false
|
35
|
-
version_requirements:
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
36
46
|
- !ruby/object:Gem::Dependency
|
37
47
|
name: rake
|
38
|
-
requirement:
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
39
49
|
none: false
|
40
50
|
requirements:
|
41
51
|
- - ! '>='
|
@@ -43,21 +53,31 @@ dependencies:
|
|
43
53
|
version: '0'
|
44
54
|
type: :development
|
45
55
|
prerelease: false
|
46
|
-
version_requirements:
|
47
|
-
- !ruby/object:Gem::Dependency
|
48
|
-
name: fpm
|
49
|
-
requirement: &81075040 !ruby/object:Gem::Requirement
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
50
57
|
none: false
|
51
58
|
requirements:
|
52
59
|
- - ! '>='
|
53
60
|
- !ruby/object:Gem::Version
|
54
61
|
version: '0'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: fpm
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ~>
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0.4'
|
55
70
|
type: :runtime
|
56
71
|
prerelease: false
|
57
|
-
version_requirements:
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ~>
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0.4'
|
58
78
|
- !ruby/object:Gem::Dependency
|
59
79
|
name: facter
|
60
|
-
requirement:
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
61
81
|
none: false
|
62
82
|
requirements:
|
63
83
|
- - ! '>='
|
@@ -65,7 +85,12 @@ dependencies:
|
|
65
85
|
version: '0'
|
66
86
|
type: :runtime
|
67
87
|
prerelease: false
|
68
|
-
version_requirements:
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
69
94
|
description: A tool for building software packages with fpm.
|
70
95
|
email:
|
71
96
|
- bernd@tuneafish.de
|
@@ -134,7 +159,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
134
159
|
version: '0'
|
135
160
|
requirements: []
|
136
161
|
rubyforge_project: fpm-cookery
|
137
|
-
rubygems_version: 1.8.
|
162
|
+
rubygems_version: 1.8.24
|
138
163
|
signing_key:
|
139
164
|
specification_version: 3
|
140
165
|
summary: A tool for building software packages with fpm.
|