fpm-cookery 0.10.0 → 0.11.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 +3 -0
- data/lib/fpm/cookery/recipe.rb +2 -1
- data/lib/fpm/cookery/source.rb +41 -0
- data/lib/fpm/cookery/source_handler/local_path.rb +29 -0
- data/lib/fpm/cookery/source_handler/template.rb +4 -0
- data/lib/fpm/cookery/source_handler.rb +16 -14
- data/lib/fpm/cookery/version.rb +1 -1
- data/spec/recipe_spec.rb +110 -31
- data/spec/source_spec.rb +48 -0
- metadata +7 -4
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
# v0.11.0 (2012-08-20)
|
2
|
+
* Add source handler to handle local source directories via file:// urls.
|
3
|
+
|
1
4
|
# v0.10.0 (2012-08-12)
|
2
5
|
* Add support for shar and bin files to curl source handler. (brandonmartin)
|
3
6
|
* Support an optional basename parameter for the `install` helper.
|
data/lib/fpm/cookery/recipe.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'forwardable'
|
2
2
|
require 'fileutils'
|
3
3
|
require 'fpm/cookery/facts'
|
4
|
+
require 'fpm/cookery/source'
|
4
5
|
require 'fpm/cookery/source_handler'
|
5
6
|
require 'fpm/cookery/utils'
|
6
7
|
require 'fpm/cookery/path_helper'
|
@@ -79,7 +80,7 @@ module FPM
|
|
79
80
|
|
80
81
|
def initialize(filename)
|
81
82
|
@filename = Path.new(filename).expand_path
|
82
|
-
@source_handler = SourceHandler.new(source, spec, cachedir, builddir)
|
83
|
+
@source_handler = SourceHandler.new(Source.new(source, spec), cachedir, builddir)
|
83
84
|
|
84
85
|
# Set some defaults.
|
85
86
|
vendor || self.class.vendor('fpm')
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'uri'
|
2
|
+
|
3
|
+
module FPM
|
4
|
+
module Cookery
|
5
|
+
class Source
|
6
|
+
attr_reader :provider, :options
|
7
|
+
|
8
|
+
def initialize(url, options = nil)
|
9
|
+
options ||= {}
|
10
|
+
|
11
|
+
@url = URI(url.to_s)
|
12
|
+
@provider = options[:with]
|
13
|
+
@options = options
|
14
|
+
end
|
15
|
+
|
16
|
+
def provider?
|
17
|
+
!!@provider
|
18
|
+
end
|
19
|
+
|
20
|
+
def local?
|
21
|
+
@url.scheme.to_s.downcase == 'file'
|
22
|
+
end
|
23
|
+
|
24
|
+
def url
|
25
|
+
@url.to_s
|
26
|
+
end
|
27
|
+
|
28
|
+
def path
|
29
|
+
@url.path
|
30
|
+
end
|
31
|
+
|
32
|
+
def to_s
|
33
|
+
@url.to_s
|
34
|
+
end
|
35
|
+
|
36
|
+
def to_str
|
37
|
+
@url.to_s
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'fpm/cookery/source_handler/template'
|
2
|
+
require 'fpm/cookery/log'
|
3
|
+
require 'fileutils'
|
4
|
+
|
5
|
+
module FPM
|
6
|
+
module Cookery
|
7
|
+
class SourceHandler
|
8
|
+
class LocalPath < FPM::Cookery::SourceHandler::Template
|
9
|
+
CHECKSUM = false
|
10
|
+
NAME = :local_path
|
11
|
+
|
12
|
+
def fetch
|
13
|
+
# No need to fetch anything. The files are on the disk already.
|
14
|
+
Log.info "Local path: #{source.path}"
|
15
|
+
@local_path = source.path
|
16
|
+
end
|
17
|
+
|
18
|
+
def extract
|
19
|
+
extracted_source = (builddir/File.basename(local_path)).to_s
|
20
|
+
|
21
|
+
FileUtils.rm_rf(extracted_source)
|
22
|
+
FileUtils.cp_r(source.path, extracted_source)
|
23
|
+
|
24
|
+
extracted_source
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -3,44 +3,46 @@ require 'fpm/cookery/source_handler/curl'
|
|
3
3
|
require 'fpm/cookery/source_handler/svn'
|
4
4
|
require 'fpm/cookery/source_handler/git'
|
5
5
|
require 'fpm/cookery/source_handler/hg'
|
6
|
+
require 'fpm/cookery/source_handler/local_path'
|
6
7
|
require 'fpm/cookery/log'
|
7
8
|
|
8
9
|
module FPM
|
9
10
|
module Cookery
|
10
11
|
class SourceHandler
|
11
12
|
DEFAULT_HANDLER = :curl
|
13
|
+
LOCAL_HANDLER = :local_path
|
12
14
|
|
13
15
|
extend Forwardable
|
14
16
|
def_delegators :@handler, :fetch, :extract, :local_path, :checksum?
|
15
17
|
|
16
18
|
attr_reader :source_url
|
17
19
|
|
18
|
-
def initialize(
|
19
|
-
|
20
|
-
# Test cases for individual recipe attributes
|
21
|
-
# are not setting spec before hand (due to delegation chain?)
|
22
|
-
# Additionally, one test actually has options being sent as a String
|
23
|
-
if (options.nil? || options.class == String || options.has_key?(:with) == false)
|
24
|
-
@source_provider = DEFAULT_HANDLER
|
25
|
-
else
|
26
|
-
@source_provider = options[:with]
|
27
|
-
end
|
28
|
-
@source_url = source_url
|
29
|
-
@options = options
|
20
|
+
def initialize(source, cachedir, builddir)
|
21
|
+
@source = source
|
30
22
|
@cachedir = cachedir
|
31
23
|
@builddir = builddir
|
24
|
+
|
25
|
+
if @source.provider?
|
26
|
+
@source_provider = @source.provider
|
27
|
+
elsif @source.local?
|
28
|
+
@source_provider = LOCAL_HANDLER
|
29
|
+
else
|
30
|
+
@source_provider = DEFAULT_HANDLER
|
31
|
+
end
|
32
|
+
|
32
33
|
@handler = get_source_handler(@source_provider)
|
33
34
|
end
|
34
35
|
|
35
36
|
private
|
36
37
|
def get_source_handler(provider)
|
37
38
|
klass = handler_to_class(provider)
|
38
|
-
|
39
|
+
# XXX Refactor handler to avoid passing the options.
|
40
|
+
klass.new(@source, @source.options, @cachedir, @builddir)
|
39
41
|
end
|
40
42
|
|
41
43
|
def handler_to_class(provider)
|
42
44
|
begin
|
43
|
-
self.class.const_get(provider.to_s.capitalize)
|
45
|
+
self.class.const_get(provider.to_s.split('_').map(&:capitalize).join)
|
44
46
|
rescue NameError
|
45
47
|
Log.error "Specified provider #{provider} does not exist."
|
46
48
|
exit(1)
|
data/lib/fpm/cookery/version.rb
CHANGED
data/spec/recipe_spec.rb
CHANGED
@@ -51,52 +51,131 @@ describe "Recipe" do
|
|
51
51
|
#############################################################################
|
52
52
|
# Recipe attributes
|
53
53
|
#############################################################################
|
54
|
-
def
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
54
|
+
def check_attribute(attr, value, expect = nil)
|
55
|
+
expect ||= value
|
56
|
+
|
57
|
+
klass.send(attr, value)
|
58
|
+
|
59
|
+
klass.send(attr).must_equal expect
|
60
|
+
recipe.send(attr).must_equal expect
|
61
|
+
end
|
62
|
+
|
63
|
+
describe "#arch" do
|
64
|
+
it "can be set" do
|
65
|
+
check_attribute(:arch, 'i386')
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
describe "#description" do
|
70
|
+
it "can be set" do
|
71
|
+
check_attribute(:description, 'A nice program.')
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
describe "#homepage" do
|
76
|
+
it "can be set" do
|
77
|
+
check_attribute(:homepage, 'http://example.com/')
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
describe "#license" do
|
82
|
+
it "can be set" do
|
83
|
+
check_attribute(:license, 'MIT')
|
84
|
+
end
|
65
85
|
end
|
66
86
|
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
+
describe "#maintainer" do
|
88
|
+
it "can be set" do
|
89
|
+
check_attribute(:maintainer, 'John Doe <john@example.com>')
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
describe "#sha256" do
|
94
|
+
it "can be set" do
|
95
|
+
check_attribute(:sha256, '123456789abcdef')
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
describe "#sha1" do
|
100
|
+
it "can be set" do
|
101
|
+
check_attribute(:sha1, '123456789abcdef')
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
describe "#md5" do
|
106
|
+
it "can be set" do
|
107
|
+
check_attribute(:md5, '123456789abcdef')
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
describe "#name" do
|
112
|
+
it "can be set" do
|
113
|
+
check_attribute(:name, 'redis')
|
114
|
+
end
|
115
|
+
end
|
87
116
|
|
88
117
|
describe "#revision" do
|
118
|
+
it "can be set with a string" do
|
119
|
+
check_attribute(:revision, '12')
|
120
|
+
end
|
121
|
+
|
89
122
|
it "sets a default revision" do
|
90
123
|
recipe.revision.must_equal 0
|
91
124
|
end
|
92
125
|
end
|
93
126
|
|
127
|
+
describe "#section" do
|
128
|
+
it "can be set" do
|
129
|
+
check_attribute(:section, 'lang')
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
describe "#spec" do
|
134
|
+
it "can be set" do
|
135
|
+
check_attribute(:spec, {:foo => true})
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
94
139
|
describe "#vendor" do
|
140
|
+
it "can be set" do
|
141
|
+
check_attribute(:vendor, 'myvendor')
|
142
|
+
end
|
143
|
+
|
95
144
|
it "sets a default vendor" do
|
96
145
|
recipe.vendor.must_equal 'fpm'
|
97
146
|
end
|
98
147
|
end
|
99
148
|
|
149
|
+
describe "#version" do
|
150
|
+
it "can be set" do
|
151
|
+
check_attribute(:version, '1.2')
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
155
|
+
describe "#pre_install" do
|
156
|
+
it "can be set" do
|
157
|
+
check_attribute(:pre_install, 'preinstall')
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
161
|
+
describe "#post_install" do
|
162
|
+
it "can be set" do
|
163
|
+
check_attribute(:post_install, 'postinstall')
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
167
|
+
describe "#pre_uninstall" do
|
168
|
+
it "can be set" do
|
169
|
+
check_attribute(:pre_uninstall, 'preuninstall')
|
170
|
+
end
|
171
|
+
end
|
172
|
+
|
173
|
+
describe "#post_uninstall" do
|
174
|
+
it "can be set" do
|
175
|
+
check_attribute(:post_uninstall, 'postuninstall')
|
176
|
+
end
|
177
|
+
end
|
178
|
+
|
100
179
|
def self.spec_recipe_attribute_list(name, list)
|
101
180
|
class_eval %Q{
|
102
181
|
describe "##{name}" do
|
data/spec/source_spec.rb
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'fpm/cookery/source'
|
3
|
+
|
4
|
+
describe "Source" do
|
5
|
+
describe "#provider?" do
|
6
|
+
context "with a provider set" do
|
7
|
+
it "returns true" do
|
8
|
+
source = FPM::Cookery::Source.new('http://example.com/', :with => :git)
|
9
|
+
|
10
|
+
source.provider?.must_equal true
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
context "without a provider set" do
|
15
|
+
it "returns false" do
|
16
|
+
source = FPM::Cookery::Source.new('http://example.com/')
|
17
|
+
|
18
|
+
source.provider?.must_equal false
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
describe "#local?" do
|
24
|
+
context "with a file:// url" do
|
25
|
+
it "returns true" do
|
26
|
+
source = FPM::Cookery::Source.new('file:///tmp')
|
27
|
+
|
28
|
+
source.local?.must_equal true
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
context "with no file:// url" do
|
33
|
+
it "returns false" do
|
34
|
+
source = FPM::Cookery::Source.new('https://www.example.com/')
|
35
|
+
|
36
|
+
source.local?.must_equal false
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
describe "#path" do
|
42
|
+
it "returns the url path" do
|
43
|
+
source = FPM::Cookery::Source.new('file:///opt/src/foo')
|
44
|
+
|
45
|
+
source.path.must_equal '/opt/src/foo'
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
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.11.0
|
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: 2012-08-
|
12
|
+
date: 2012-08-20 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: fpm
|
@@ -121,10 +121,12 @@ files:
|
|
121
121
|
- lib/fpm/cookery/path.rb
|
122
122
|
- lib/fpm/cookery/path_helper.rb
|
123
123
|
- lib/fpm/cookery/recipe.rb
|
124
|
+
- lib/fpm/cookery/source.rb
|
124
125
|
- lib/fpm/cookery/source_handler.rb
|
125
126
|
- lib/fpm/cookery/source_handler/curl.rb
|
126
127
|
- lib/fpm/cookery/source_handler/git.rb
|
127
128
|
- lib/fpm/cookery/source_handler/hg.rb
|
129
|
+
- lib/fpm/cookery/source_handler/local_path.rb
|
128
130
|
- lib/fpm/cookery/source_handler/svn.rb
|
129
131
|
- lib/fpm/cookery/source_handler/template.rb
|
130
132
|
- lib/fpm/cookery/source_integrity_check.rb
|
@@ -139,6 +141,7 @@ files:
|
|
139
141
|
- spec/path_spec.rb
|
140
142
|
- spec/recipe_spec.rb
|
141
143
|
- spec/source_integrity_check_spec.rb
|
144
|
+
- spec/source_spec.rb
|
142
145
|
- spec/spec_helper.rb
|
143
146
|
homepage: ''
|
144
147
|
licenses: []
|
@@ -154,7 +157,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
154
157
|
version: '0'
|
155
158
|
segments:
|
156
159
|
- 0
|
157
|
-
hash: -
|
160
|
+
hash: -1591651962376197617
|
158
161
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
159
162
|
none: false
|
160
163
|
requirements:
|
@@ -163,7 +166,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
163
166
|
version: '0'
|
164
167
|
segments:
|
165
168
|
- 0
|
166
|
-
hash: -
|
169
|
+
hash: -1591651962376197617
|
167
170
|
requirements: []
|
168
171
|
rubyforge_project: fpm-cookery
|
169
172
|
rubygems_version: 1.8.24
|