omnibus 5.0.0 → 5.1.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.
- checksums.yaml +4 -4
- data/.rspec +2 -0
- data/.travis.yml +1 -0
- data/CHANGELOG.md +26 -0
- data/Gemfile +3 -0
- data/MAINTAINERS.md +1 -0
- data/appveyor.yml +1 -1
- data/bin/omnibus +5 -0
- data/lib/omnibus/builder.rb +165 -26
- data/lib/omnibus/digestable.rb +4 -2
- data/lib/omnibus/fetcher.rb +18 -5
- data/lib/omnibus/fetchers/git_fetcher.rb +38 -22
- data/lib/omnibus/fetchers/net_fetcher.rb +106 -37
- data/lib/omnibus/fetchers/path_fetcher.rb +13 -12
- data/lib/omnibus/file_syncer.rb +33 -14
- data/lib/omnibus/generator_files/README.md.erb +1 -1
- data/lib/omnibus/generator_files/package_scripts/postinst.erb +3 -3
- data/lib/omnibus/generator_files/package_scripts/postrm.erb +1 -1
- data/lib/omnibus/generator_files/package_scripts/preinst.erb +1 -1
- data/lib/omnibus/generator_files/package_scripts/prerm.erb +3 -3
- data/lib/omnibus/git_cache.rb +20 -7
- data/lib/omnibus/health_check.rb +144 -12
- data/lib/omnibus/packagers/bff.rb +57 -5
- data/lib/omnibus/packagers/deb.rb +2 -2
- data/lib/omnibus/packagers/pkg.rb +2 -2
- data/lib/omnibus/packagers/solaris.rb +18 -6
- data/lib/omnibus/project.rb +1 -1
- data/lib/omnibus/s3_cache.rb +8 -2
- data/lib/omnibus/software.rb +152 -18
- data/lib/omnibus/sugarable.rb +1 -5
- data/lib/omnibus/util.rb +1 -1
- data/lib/omnibus/version.rb +1 -1
- data/omnibus.gemspec +4 -1
- data/resources/bff/config.erb +7 -0
- data/resources/deb/md5sums.erb +1 -1
- data/spec/functional/builder_spec.rb +89 -2
- data/spec/functional/fetchers/git_fetcher_spec.rb +44 -37
- data/spec/functional/fetchers/net_fetcher_spec.rb +36 -5
- data/spec/functional/fetchers/path_fetcher_spec.rb +28 -28
- data/spec/unit/builder_spec.rb +143 -11
- data/spec/unit/fetchers/git_fetcher_spec.rb +23 -59
- data/spec/unit/fetchers/net_fetcher_spec.rb +151 -63
- data/spec/unit/fetchers/path_fetcher_spec.rb +4 -35
- data/spec/unit/git_cache_spec.rb +13 -14
- data/spec/unit/health_check_spec.rb +90 -0
- data/spec/unit/library_spec.rb +1 -1
- data/spec/unit/packagers/bff_spec.rb +126 -3
- data/spec/unit/packagers/deb_spec.rb +8 -3
- data/spec/unit/packagers/pkg_spec.rb +19 -19
- data/spec/unit/packagers/solaris_spec.rb +13 -1
- data/spec/unit/software_spec.rb +242 -38
- metadata +7 -6
- data/lib/omnibus/generator_files/package_scripts/makeselfinst.erb +0 -0
@@ -21,6 +21,8 @@ module Omnibus
|
|
21
21
|
end
|
22
22
|
|
23
23
|
subject { described_class.new(manifest_entry, project_dir, build_dir) }
|
24
|
+
|
25
|
+
let(:revision) { shellout!('git rev-parse HEAD', cwd: project_dir).stdout.strip }
|
24
26
|
|
25
27
|
describe '#fetch_required?' do
|
26
28
|
context 'when the repo is not cloned' do
|
@@ -32,15 +34,16 @@ module Omnibus
|
|
32
34
|
context 'when the repo is cloned' do
|
33
35
|
before { subject.fetch }
|
34
36
|
|
35
|
-
context 'when the
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
37
|
+
context 'when the revision is not available' do
|
38
|
+
let(:manifest_entry) do
|
39
|
+
double(ManifestEntry,
|
40
|
+
name: 'software',
|
41
|
+
locked_version: 'abcdefabcdef5d66ed866b2c3eb418426e6382b0',
|
42
|
+
described_version: version,
|
43
|
+
locked_source: source)
|
44
|
+
end
|
43
45
|
|
46
|
+
it 'return true' do
|
44
47
|
expect(subject.fetch_required?).to be_truthy
|
45
48
|
end
|
46
49
|
end
|
@@ -60,37 +63,49 @@ module Omnibus
|
|
60
63
|
end
|
61
64
|
|
62
65
|
describe '#clean' do
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
66
|
+
before do
|
67
|
+
subject.fetch
|
68
|
+
end
|
69
|
+
|
70
|
+
it 'returns true' do
|
71
|
+
expect(subject.clean).to be_truthy
|
72
|
+
end
|
69
73
|
|
74
|
+
context 'when the project directory has extra files in it' do
|
70
75
|
it 'cleans the git repo' do
|
76
|
+
create_file("#{project_dir}/file_a")
|
77
|
+
create_file("#{project_dir}/.file_b")
|
71
78
|
subject.clean
|
72
79
|
expect("#{project_dir}/file_a").to_not be_a_file
|
73
80
|
expect("#{project_dir}/.file_b").to_not be_a_file
|
74
81
|
end
|
75
|
-
|
76
|
-
it 'returns true' do
|
77
|
-
expect(subject.clean).to be_truthy
|
78
|
-
end
|
79
82
|
end
|
80
83
|
|
81
|
-
context 'when the project directory
|
84
|
+
context 'when the project directory is at a different version' do
|
82
85
|
before do
|
83
|
-
|
86
|
+
# Dirty the project_dir by giving it a conflicting commit.
|
87
|
+
create_file("#{project_dir}/file_a") { 'some new file' }
|
88
|
+
create_file("#{project_dir}/configure") { 'LALALALA' }
|
89
|
+
shellout!('git add .', cwd: project_dir)
|
90
|
+
shellout!('git commit -am "Some commit"', cwd: project_dir)
|
91
|
+
create_file("#{project_dir}/.file_b")
|
84
92
|
end
|
85
93
|
|
86
|
-
it '
|
87
|
-
|
94
|
+
it 'checks out the right version' do
|
95
|
+
subject.clean
|
96
|
+
expect(revision).to eq(manifest_entry.locked_version)
|
97
|
+
end
|
98
|
+
|
99
|
+
it 'resets the working tree' do
|
100
|
+
subject.clean
|
101
|
+
expect("#{project_dir}/file_a").to_not be_a_file
|
102
|
+
expect("#{project_dir}/.file_b").to_not be_a_file
|
103
|
+
expect(File.read("#{project_dir}/configure")).to_not match('LA')
|
88
104
|
end
|
89
105
|
end
|
90
106
|
end
|
91
107
|
|
92
108
|
describe '#fetch' do
|
93
|
-
let(:revision) { shellout!('git rev-parse HEAD', cwd: project_dir).stdout.strip }
|
94
109
|
let(:version) { 'v1.2.4' }
|
95
110
|
let(:remote) { remote_git_repo('zlib', annotated_tags: [version]) }
|
96
111
|
let(:manifest_entry) do
|
@@ -108,11 +123,6 @@ module Omnibus
|
|
108
123
|
subject.fetch
|
109
124
|
expect("#{project_dir}/.git").to be_a_directory
|
110
125
|
end
|
111
|
-
|
112
|
-
it 'fetches the locked_version from the manifest' do
|
113
|
-
subject.fetch
|
114
|
-
expect(revision).to eq(manifest_entry.locked_version)
|
115
|
-
end
|
116
126
|
end
|
117
127
|
|
118
128
|
|
@@ -173,18 +183,15 @@ module Omnibus
|
|
173
183
|
end
|
174
184
|
|
175
185
|
describe '#version_for_cache' do
|
176
|
-
|
177
|
-
|
178
|
-
it 'includes the revision' do
|
179
|
-
expect(subject.version_for_cache).to eq("revision:#{revision}")
|
186
|
+
it 'includes the resolved revision' do
|
187
|
+
expect(subject.version_for_cache).to eq('revision:45ded6d3b1a35d66ed866b2c3eb418426e6382b0')
|
180
188
|
end
|
181
189
|
|
182
|
-
it '
|
183
|
-
|
190
|
+
it 'not use the current version on disk after fetching' do
|
191
|
+
expect(subject.version_for_cache).to eq('revision:45ded6d3b1a35d66ed866b2c3eb418426e6382b0')
|
184
192
|
subject.fetch
|
185
|
-
|
186
|
-
expect(
|
187
|
-
expect(subject.version_for_cache).not_to eq("revision:#{before_fetch}")
|
193
|
+
expect(subject.version_for_cache).to eq('revision:45ded6d3b1a35d66ed866b2c3eb418426e6382b0')
|
194
|
+
expect(revision).to_not eq('revision:45ded6d3b1a35d66ed866b2c3eb418426e6382b0')
|
188
195
|
end
|
189
196
|
end
|
190
197
|
end
|
@@ -1,6 +1,14 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
module Omnibus
|
4
|
+
module RSpec
|
5
|
+
module OhaiHelpers
|
6
|
+
# Turn off the mandatory Ohai helper.
|
7
|
+
def stub_ohai(options = {}, &block)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
4
12
|
describe NetFetcher do
|
5
13
|
include_examples 'a software', 'zlib'
|
6
14
|
|
@@ -119,6 +127,34 @@ module Omnibus
|
|
119
127
|
expect(subject.clean).to be(false)
|
120
128
|
end
|
121
129
|
end
|
130
|
+
|
131
|
+
context 'when the source has read-only files' do
|
132
|
+
let(:source_url) { 'http://dl.bintray.com/oneclick/OpenKnapsack/x86/openssl-1.0.0q-x86-windows.tar.lzma' }
|
133
|
+
let(:source_md5) { '577dbe528415c6f178a9431fd0554df4' }
|
134
|
+
|
135
|
+
it 'extracts the asset without crashing' do
|
136
|
+
subject.clean
|
137
|
+
expect(extracted).to_not be_a_file
|
138
|
+
subject.clean
|
139
|
+
expect(extracted).to_not be_a_file
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
context 'when the source has broken symlinks' do
|
144
|
+
let(:source_url) { 'http://www.openssl.org/source/openssl-1.0.1q.tar.gz' }
|
145
|
+
let(:source_md5) { '54538d0cdcb912f9bc2b36268388205e' }
|
146
|
+
|
147
|
+
let(:source) do
|
148
|
+
{ url: source_url, md5: source_md5, extract: :lax_tar }
|
149
|
+
end
|
150
|
+
|
151
|
+
it 'extracts the asset without crashing' do
|
152
|
+
subject.clean
|
153
|
+
expect(extracted).to_not be_a_file
|
154
|
+
subject.clean
|
155
|
+
expect(extracted).to_not be_a_file
|
156
|
+
end
|
157
|
+
end
|
122
158
|
end
|
123
159
|
|
124
160
|
describe '#fetch' do
|
@@ -218,11 +254,6 @@ module Omnibus
|
|
218
254
|
expect(retry_count).to eq(Omnibus::Config.fetcher_retries)
|
219
255
|
end
|
220
256
|
|
221
|
-
it 'extracts the file' do
|
222
|
-
fetch!
|
223
|
-
expect(extracted).to be_a_directory
|
224
|
-
end
|
225
|
-
|
226
257
|
context 'when the file is less than 10240 bytes' do
|
227
258
|
let(:source_url) { 'https://downloads.chef.io/packages-chef-io-public.key' }
|
228
259
|
let(:source_md5) { '369efc3a19b9118cdf51c7e87a34f266' }
|
@@ -55,45 +55,45 @@ module Omnibus
|
|
55
55
|
end
|
56
56
|
end
|
57
57
|
|
58
|
-
describe
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
create_file("#{project_dir}/file_a")
|
66
|
-
end
|
58
|
+
describe "#fetch" do
|
59
|
+
before do
|
60
|
+
create_file("#{source_path}/file_a")
|
61
|
+
create_file("#{source_path}/file_b")
|
62
|
+
create_file("#{source_path}/.file_c")
|
63
|
+
remove_file("#{source_path}/file_d")
|
67
64
|
|
68
|
-
|
69
|
-
|
65
|
+
create_file("#{project_dir}/file_a")
|
66
|
+
remove_file("#{project_dir}/file_b")
|
67
|
+
remove_file("#{project_dir}/.file_c")
|
68
|
+
create_file("#{project_dir}/file_d")
|
69
|
+
end
|
70
70
|
|
71
|
-
|
72
|
-
|
73
|
-
expect("#{project_dir}/.file_c").to be_a_file
|
74
|
-
end
|
71
|
+
it 'fetches new files' do
|
72
|
+
subject.fetch
|
75
73
|
|
76
|
-
|
77
|
-
|
78
|
-
|
74
|
+
expect("#{project_dir}/file_a").to be_a_file
|
75
|
+
expect("#{project_dir}/file_b").to be_a_file
|
76
|
+
expect("#{project_dir}/.file_c").to be_a_file
|
79
77
|
end
|
80
78
|
|
81
|
-
|
82
|
-
|
83
|
-
remove_directory(project_dir)
|
84
|
-
end
|
79
|
+
it 'removes extraneous files' do
|
80
|
+
subject.fetch
|
85
81
|
|
86
|
-
|
87
|
-
|
88
|
-
|
82
|
+
expect("#{project_dir}/file_d").to_not be_a_file
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
describe '#clean' do
|
87
|
+
it 'returns true' do
|
88
|
+
expect(subject.clean).to be_truthy
|
89
89
|
end
|
90
90
|
end
|
91
91
|
|
92
92
|
describe '#version_for_cache' do
|
93
93
|
before do
|
94
|
-
create_file("#{
|
95
|
-
create_file("#{
|
96
|
-
create_file("#{
|
94
|
+
create_file("#{source_path}/file_a")
|
95
|
+
create_file("#{source_path}/file_b")
|
96
|
+
create_file("#{source_path}/.file_c")
|
97
97
|
end
|
98
98
|
|
99
99
|
let(:sha) { '69553b23b84e69e095b4a231877b38022b1ffb41ae0ecbba6bb2625410c49f7e' }
|
data/spec/unit/builder_spec.rb
CHANGED
@@ -5,22 +5,32 @@ module Omnibus
|
|
5
5
|
let(:software) do
|
6
6
|
double(Software,
|
7
7
|
name: 'chefdk',
|
8
|
-
install_dir:
|
9
|
-
project_dir:
|
8
|
+
install_dir: project_dir,
|
9
|
+
project_dir: project_dir,
|
10
10
|
)
|
11
11
|
end
|
12
12
|
|
13
|
+
let(:project_dir) { on_windows ? 'C:/opscode/chefdk' : '/opt/chefdk' }
|
14
|
+
let(:on_windows) { false }
|
15
|
+
let(:msys_bash) { "C:\\opscode\\chefdk\\embedded\\msys\\1.0\\bin\\bash.exe" }
|
16
|
+
|
17
|
+
def run_build_command
|
18
|
+
subject.send(:build_commands)[0].run(subject)
|
19
|
+
end
|
20
|
+
|
13
21
|
subject { described_class.new(software) }
|
14
22
|
|
15
|
-
|
16
|
-
|
17
|
-
|
23
|
+
before do
|
24
|
+
allow(subject).to receive(:windows?).and_return(on_windows)
|
25
|
+
allow(subject).to receive(:windows_safe_path) do |*args|
|
26
|
+
path = File.join(*args)
|
27
|
+
path.gsub!(File::SEPARATOR, '\\') if on_windows
|
18
28
|
end
|
19
29
|
end
|
20
30
|
|
21
|
-
describe '#
|
31
|
+
describe '#command' do
|
22
32
|
it 'is a DSL method' do
|
23
|
-
expect(subject).to have_exposed_method(:
|
33
|
+
expect(subject).to have_exposed_method(:command)
|
24
34
|
end
|
25
35
|
end
|
26
36
|
|
@@ -108,6 +118,12 @@ module Omnibus
|
|
108
118
|
end
|
109
119
|
end
|
110
120
|
|
121
|
+
describe '#update_config_guess' do
|
122
|
+
it 'is a DSL method' do
|
123
|
+
expect(subject).to have_exposed_method(:update_config_guess)
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
111
127
|
describe '#windows_safe_path' do
|
112
128
|
it 'is a DSL method' do
|
113
129
|
expect(subject).to have_exposed_method(:windows_safe_path)
|
@@ -131,10 +147,14 @@ module Omnibus
|
|
131
147
|
allow(subject).to receive(:command)
|
132
148
|
end
|
133
149
|
|
150
|
+
it 'is a DSL method' do
|
151
|
+
expect(subject).to have_exposed_method(:make)
|
152
|
+
end
|
153
|
+
|
134
154
|
context 'when :bin is present' do
|
135
155
|
it 'uses the custom bin' do
|
136
156
|
expect(subject).to receive(:command)
|
137
|
-
.with('/path/to/make',
|
157
|
+
.with('/path/to/make', in_msys_bash: true)
|
138
158
|
subject.make(bin: '/path/to/make')
|
139
159
|
end
|
140
160
|
end
|
@@ -148,7 +168,7 @@ module Omnibus
|
|
148
168
|
|
149
169
|
it 'uses gmake and sets MAKE=gmake' do
|
150
170
|
expect(subject).to receive(:command)
|
151
|
-
.with('gmake', env: { 'MAKE' => 'gmake' })
|
171
|
+
.with('gmake', env: { 'MAKE' => 'gmake' }, in_msys_bash: true)
|
152
172
|
subject.make
|
153
173
|
end
|
154
174
|
end
|
@@ -161,26 +181,138 @@ module Omnibus
|
|
161
181
|
|
162
182
|
it 'uses make' do
|
163
183
|
expect(subject).to receive(:command)
|
164
|
-
.with('make',
|
184
|
+
.with('make', in_msys_bash: true)
|
165
185
|
subject.make
|
166
186
|
end
|
167
187
|
end
|
168
188
|
|
169
189
|
it 'accepts 0 options' do
|
190
|
+
expect(subject).to receive(:command)
|
191
|
+
.with('make', in_msys_bash: true)
|
170
192
|
expect { subject.make }.to_not raise_error
|
171
193
|
end
|
172
194
|
|
173
195
|
it 'accepts an additional command string' do
|
196
|
+
expect(subject).to receive(:command)
|
197
|
+
.with('make install', in_msys_bash: true)
|
174
198
|
expect { subject.make('install') }.to_not raise_error
|
175
199
|
end
|
176
200
|
|
177
201
|
it 'persists given options' do
|
178
202
|
expect(subject).to receive(:command)
|
179
|
-
.with(
|
203
|
+
.with('make', timeout: 3600, in_msys_bash: true)
|
180
204
|
subject.make(timeout: 3600)
|
181
205
|
end
|
182
206
|
end
|
183
207
|
|
208
|
+
describe '#configure' do
|
209
|
+
before do
|
210
|
+
allow(subject).to receive(:command)
|
211
|
+
end
|
212
|
+
|
213
|
+
it 'is a DSL method' do
|
214
|
+
expect(subject).to have_exposed_method(:configure)
|
215
|
+
end
|
216
|
+
|
217
|
+
context 'on 64-bit windows' do
|
218
|
+
let(:on_windows) { true }
|
219
|
+
let(:windows_i386) { false }
|
220
|
+
|
221
|
+
before do
|
222
|
+
allow(subject).to receive(:windows_arch_i386?)
|
223
|
+
.and_return(windows_i386)
|
224
|
+
end
|
225
|
+
|
226
|
+
it 'invokes appends platform host to the options' do
|
227
|
+
expect(subject).to receive(:command)
|
228
|
+
.with("./configure --host=x86_64-w64-mingw32 --prefix=#{project_dir}/embedded", in_msys_bash: true)
|
229
|
+
subject.configure()
|
230
|
+
end
|
231
|
+
end
|
232
|
+
|
233
|
+
context 'when :bin is present' do
|
234
|
+
it 'uses the custom bin' do
|
235
|
+
expect(subject).to receive(:command)
|
236
|
+
.with("/path/to/configure --prefix=#{project_dir}/embedded", in_msys_bash: true)
|
237
|
+
subject.configure(bin: '/path/to/configure')
|
238
|
+
end
|
239
|
+
end
|
240
|
+
|
241
|
+
context 'when :prefix is present' do
|
242
|
+
it 'emits non-empty prefix' do
|
243
|
+
expect(subject).to receive(:command)
|
244
|
+
.with("./configure --prefix=/some/prefix", in_msys_bash: true)
|
245
|
+
subject.configure(prefix: '/some/prefix')
|
246
|
+
end
|
247
|
+
|
248
|
+
it 'omits prefix if empty' do
|
249
|
+
expect(subject).to receive(:command)
|
250
|
+
.with("./configure", in_msys_bash: true)
|
251
|
+
subject.configure(prefix: '')
|
252
|
+
end
|
253
|
+
end
|
254
|
+
|
255
|
+
it 'accepts 0 options' do
|
256
|
+
expect(subject).to receive(:command)
|
257
|
+
.with("./configure --prefix=#{project_dir}/embedded", in_msys_bash: true)
|
258
|
+
expect { subject.configure }.to_not raise_error
|
259
|
+
end
|
260
|
+
|
261
|
+
it 'accepts an additional command string' do
|
262
|
+
expect(subject).to receive(:command)
|
263
|
+
.with("./configure --prefix=#{project_dir}/embedded --myopt", in_msys_bash: true)
|
264
|
+
expect { subject.configure('--myopt') }.to_not raise_error
|
265
|
+
end
|
266
|
+
|
267
|
+
it 'persists given options' do
|
268
|
+
expect(subject).to receive(:command)
|
269
|
+
.with("./configure --prefix=#{project_dir}/embedded", timeout: 3600, in_msys_bash: true)
|
270
|
+
subject.configure(timeout: 3600)
|
271
|
+
end
|
272
|
+
end
|
273
|
+
|
274
|
+
describe '#patch' do
|
275
|
+
before do
|
276
|
+
allow(subject).to receive(:find_file)
|
277
|
+
.with('config/patches', 'good_patch')
|
278
|
+
.and_return(
|
279
|
+
[ ["#{project_dir}/patch_location1/good_patch", "#{project_dir}/patch_location2/good_patch"],
|
280
|
+
"#{project_dir}/patch_location2/good_patch" ])
|
281
|
+
end
|
282
|
+
|
283
|
+
it 'is a DSL method' do
|
284
|
+
expect(subject).to have_exposed_method(:patch)
|
285
|
+
end
|
286
|
+
|
287
|
+
it 'invokes patch with patch level 1 unless specified' do
|
288
|
+
expect { subject.patch(source: 'good_patch') }.to_not raise_error
|
289
|
+
expect(subject).to receive(:shellout!)
|
290
|
+
.with("patch -p1 -i #{project_dir}/patch_location2/good_patch", in_msys_bash: true)
|
291
|
+
run_build_command
|
292
|
+
end
|
293
|
+
|
294
|
+
it 'invokes patch with patch level provided' do
|
295
|
+
expect { subject.patch(source: 'good_patch', plevel: 0) }.to_not raise_error
|
296
|
+
expect(subject).to receive(:shellout!)
|
297
|
+
.with("patch -p0 -i #{project_dir}/patch_location2/good_patch", in_msys_bash: true)
|
298
|
+
run_build_command
|
299
|
+
end
|
300
|
+
|
301
|
+
it 'invokes patch differently if target is provided' do
|
302
|
+
expect { subject.patch(source: 'good_patch', target: 'target/path') }.to_not raise_error
|
303
|
+
expect(subject).to receive(:shellout!)
|
304
|
+
.with("cat #{project_dir}/patch_location2/good_patch | patch -p1 target/path", in_msys_bash: true)
|
305
|
+
run_build_command
|
306
|
+
end
|
307
|
+
|
308
|
+
it 'persists other options' do
|
309
|
+
expect { subject.patch(source: 'good_patch', timeout:3600) }.to_not raise_error
|
310
|
+
expect(subject).to receive(:shellout!)
|
311
|
+
.with("patch -p1 -i #{project_dir}/patch_location2/good_patch", timeout: 3600, in_msys_bash: true)
|
312
|
+
run_build_command
|
313
|
+
end
|
314
|
+
end
|
315
|
+
|
184
316
|
describe "#shasum" do
|
185
317
|
let(:build_step) do
|
186
318
|
Proc.new {
|