omnibus 1.3.0 → 2.0.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +4 -1
- data/.rubocop.yml +30 -0
- data/.travis.yml +14 -3
- data/CHANGELOG.md +72 -49
- data/Gemfile +8 -5
- data/NOTICE +2 -2
- data/README.md +65 -7
- data/Rakefile +12 -3
- data/bin/makeself-header.sh +1 -1
- data/bin/makeself.sh +2 -2
- data/bin/omnibus +2 -2
- data/functional/fixtures/mac_pkg/files/mac_pkg/Resources/background.png +0 -0
- data/functional/fixtures/mac_pkg/files/mac_pkg/Resources/license.html +1 -0
- data/functional/fixtures/mac_pkg/files/mac_pkg/Resources/welcome.html +1 -0
- data/functional/fixtures/mac_pkg/package-scripts/functional-test-project/postinstall +4 -0
- data/functional/packagers/mac_pkg_spec.rb +72 -0
- data/lib/omnibus/artifact.rb +11 -13
- data/lib/omnibus/build_version.rb +18 -21
- data/lib/omnibus/builder.rb +37 -48
- data/lib/omnibus/clean_tasks.rb +3 -5
- data/lib/omnibus/cli/application.rb +46 -53
- data/lib/omnibus/cli/base.rb +16 -19
- data/lib/omnibus/cli/build.rb +13 -13
- data/lib/omnibus/cli/cache.rb +13 -15
- data/lib/omnibus/cli/release.rb +4 -9
- data/lib/omnibus/cli.rb +2 -4
- data/lib/omnibus/config.rb +43 -23
- data/lib/omnibus/exceptions.rb +35 -1
- data/lib/omnibus/fetcher.rb +9 -13
- data/lib/omnibus/fetchers/git_fetcher.rb +15 -19
- data/lib/omnibus/fetchers/net_fetcher.rb +34 -38
- data/lib/omnibus/fetchers/path_fetcher.rb +7 -9
- data/lib/omnibus/fetchers/s3_cache_fetcher.rb +3 -4
- data/lib/omnibus/fetchers.rb +3 -3
- data/lib/omnibus/health_check.rb +126 -127
- data/lib/omnibus/library.rb +11 -12
- data/lib/omnibus/overrides.rb +6 -8
- data/lib/omnibus/package_release.rb +20 -22
- data/lib/omnibus/packagers/mac_pkg.rb +285 -0
- data/lib/omnibus/project.rb +215 -110
- data/lib/omnibus/reports.rb +16 -24
- data/lib/omnibus/s3_cacher.rb +15 -21
- data/lib/omnibus/software.rb +178 -88
- data/lib/omnibus/util.rb +25 -13
- data/lib/omnibus/version.rb +2 -2
- data/lib/omnibus.rb +11 -13
- data/omnibus.gemspec +20 -18
- data/spec/artifact_spec.rb +55 -52
- data/spec/build_version_spec.rb +121 -129
- data/spec/config_spec.rb +40 -0
- data/spec/data/projects/chefdk.rb +41 -0
- data/spec/data/projects/sample.rb +10 -0
- data/spec/data/software/erchef.rb +12 -12
- data/spec/data/software/zlib.rb +67 -0
- data/spec/fetchers/git_fetcher_spec.rb +55 -48
- data/spec/fetchers/net_fetcher_spec.rb +72 -78
- data/spec/omnibus_spec.rb +59 -0
- data/spec/overrides_spec.rb +64 -64
- data/spec/package_release_spec.rb +65 -64
- data/spec/packagers/mac_pkg_spec.rb +261 -0
- data/spec/project_spec.rb +138 -0
- data/spec/s3_cacher_spec.rb +9 -10
- data/spec/software_spec.rb +71 -50
- data/spec/spec_helper.rb +14 -7
- metadata +68 -60
- data/.rspec +0 -1
- data/.yardopts +0 -6
- data/spec/software_dirs_spec.rb +0 -34
data/lib/omnibus/cli/cache.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
#
|
2
|
-
# Copyright:: Copyright (c) 2013
|
2
|
+
# Copyright:: Copyright (c) 2013-2014 Chef Software, Inc.
|
3
3
|
# License:: Apache License, Version 2.0
|
4
4
|
#
|
5
5
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
@@ -21,40 +21,38 @@ require 'omnibus/s3_cacher'
|
|
21
21
|
module Omnibus
|
22
22
|
module CLI
|
23
23
|
class Cache < Base
|
24
|
-
|
25
24
|
class_option :path,
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
25
|
+
aliases: [:p],
|
26
|
+
type: :string,
|
27
|
+
default: Dir.pwd,
|
28
|
+
desc: 'Path to the Omnibus project root.'
|
30
29
|
|
31
30
|
namespace :cache
|
32
31
|
|
33
|
-
desc
|
32
|
+
desc 'existing', 'List source packages which exist in the cache'
|
34
33
|
def existing
|
35
|
-
S3Cache.new.list.each {|s| puts s.name}
|
34
|
+
S3Cache.new.list.each { |s| puts s.name }
|
36
35
|
end
|
37
36
|
|
38
|
-
desc
|
37
|
+
desc 'list', 'List all cached files (by S3 key)'
|
39
38
|
def list
|
40
|
-
S3Cache.new.list_by_key.each {|k| puts k}
|
39
|
+
S3Cache.new.list_by_key.each { |k| puts k }
|
41
40
|
end
|
42
41
|
|
43
|
-
desc
|
42
|
+
desc 'missing', 'Lists source packages that are required but not yet cached'
|
44
43
|
def missing
|
45
|
-
S3Cache.new.missing.each {|s| puts s.name}
|
44
|
+
S3Cache.new.missing.each { |s| puts s.name }
|
46
45
|
end
|
47
46
|
|
48
|
-
desc
|
47
|
+
desc 'fetch', 'Fetches missing source packages to local tmp dir'
|
49
48
|
def fetch
|
50
49
|
S3Cache.new.fetch_missing
|
51
50
|
end
|
52
51
|
|
53
|
-
desc
|
52
|
+
desc 'populate', 'Populate the S3 Cache'
|
54
53
|
def populate
|
55
54
|
S3Cache.new.populate
|
56
55
|
end
|
57
|
-
|
58
56
|
end
|
59
57
|
end
|
60
58
|
end
|
data/lib/omnibus/cli/release.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
#
|
2
|
-
# Copyright:: Copyright (c) 2013
|
2
|
+
# Copyright:: Copyright (c) 2013-2014 Chef Software, Inc.
|
3
3
|
# License:: Apache License, Version 2.0
|
4
4
|
#
|
5
5
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
@@ -22,28 +22,23 @@ require 'json'
|
|
22
22
|
|
23
23
|
module Omnibus
|
24
24
|
module CLI
|
25
|
-
|
26
|
-
|
27
25
|
class Release < Base
|
28
|
-
|
29
26
|
namespace :release
|
30
27
|
|
31
28
|
def initialize(args, options, config)
|
32
29
|
super(args, options, config)
|
33
30
|
end
|
34
31
|
|
35
|
-
desc
|
36
|
-
option :public, :
|
32
|
+
desc 'package PATH', 'Upload a single package to S3'
|
33
|
+
option :public, type: :boolean, default: false, desc: 'Make S3 object publicly readable'
|
37
34
|
def package(path)
|
38
35
|
access_policy = options[:public] ? :public_read : :private
|
39
36
|
|
40
|
-
uploader = PackageRelease.new(path, :
|
37
|
+
uploader = PackageRelease.new(path, access: access_policy) do |uploaded_item|
|
41
38
|
say("Uploaded #{uploaded_item}", :green)
|
42
39
|
end
|
43
40
|
uploader.release
|
44
41
|
end
|
45
|
-
|
46
42
|
end
|
47
43
|
end
|
48
44
|
end
|
49
|
-
|
data/lib/omnibus/cli.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
#
|
2
|
-
# Copyright:: Copyright (c) 2012
|
2
|
+
# Copyright:: Copyright (c) 2012-2014 Chef Software, Inc.
|
3
3
|
# License:: Apache License, Version 2.0
|
4
4
|
#
|
5
5
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
@@ -21,15 +21,13 @@ require 'omnibus/cli/build'
|
|
21
21
|
|
22
22
|
module Omnibus
|
23
23
|
module CLI
|
24
|
-
|
25
24
|
class Error < StandardError
|
26
25
|
attr_reader :original
|
27
26
|
|
28
|
-
def initialize(msg, original=nil)
|
27
|
+
def initialize(msg, original = nil)
|
29
28
|
super(msg)
|
30
29
|
@original = original
|
31
30
|
end
|
32
31
|
end
|
33
|
-
|
34
32
|
end
|
35
33
|
end
|
data/lib/omnibus/config.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
#
|
2
|
-
# Copyright:: Copyright (c) 2012
|
2
|
+
# Copyright:: Copyright (c) 2012-2014 Chef Software, Inc.
|
3
3
|
# License:: Apache License, Version 2.0
|
4
4
|
#
|
5
5
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
@@ -20,7 +20,6 @@ require 'omnibus/exceptions'
|
|
20
20
|
require 'json'
|
21
21
|
|
22
22
|
module Omnibus
|
23
|
-
|
24
23
|
# Global configuration object for Omnibus runs.
|
25
24
|
#
|
26
25
|
# @todo Write a {http://yardoc.org/guides/extending-yard/writing-handlers.html
|
@@ -39,7 +38,7 @@ module Omnibus
|
|
39
38
|
# Defaults to `"/var/cache/omnibus/cache"`.
|
40
39
|
#
|
41
40
|
# @return [String]
|
42
|
-
cache_dir
|
41
|
+
default :cache_dir, '/var/cache/omnibus/cache'
|
43
42
|
|
44
43
|
# @!attribute [rw] source_dir
|
45
44
|
# The absolute path to the directory on the virtual machine where
|
@@ -48,7 +47,7 @@ module Omnibus
|
|
48
47
|
# Defaults to `"/var/cache/omnibus/src"`.
|
49
48
|
#
|
50
49
|
# @return [String]
|
51
|
-
source_dir
|
50
|
+
default :source_dir, '/var/cache/omnibus/src'
|
52
51
|
|
53
52
|
# @!attribute [rw] build_dir
|
54
53
|
# The absolute path to the directory on the virtual machine where
|
@@ -57,7 +56,7 @@ module Omnibus
|
|
57
56
|
# Defaults to `"/var/cache/omnibus/build"`.
|
58
57
|
#
|
59
58
|
# @return [String]
|
60
|
-
build_dir
|
59
|
+
default :build_dir, '/var/cache/omnibus/build'
|
61
60
|
|
62
61
|
# @!attribute [rw] package_dir
|
63
62
|
# The absolute path to the directory on the virtual machine where
|
@@ -66,7 +65,18 @@ module Omnibus
|
|
66
65
|
# Defaults to `"/var/cache/omnibus/pkg"`.
|
67
66
|
#
|
68
67
|
# @return [String]
|
69
|
-
package_dir
|
68
|
+
default :package_dir, '/var/cache/omnibus/pkg'
|
69
|
+
|
70
|
+
# @!attribute [rw] package_tmp
|
71
|
+
# The absolute path to the directory on the virtual machine where
|
72
|
+
# packagers will store intermediate packaging products. Some packaging
|
73
|
+
# methods (notably fpm) handle this internally so not all packagers will
|
74
|
+
# use this setting.
|
75
|
+
#
|
76
|
+
# Defaults to `"/var/cache/omnibus/pkg-tmp"`.
|
77
|
+
#
|
78
|
+
# @return [String]
|
79
|
+
default :package_tmp, '/var/cache/omnibus/pkg-tmp'
|
70
80
|
|
71
81
|
# @!attribute [rw] project_dir
|
72
82
|
# The relative path of the directory containing {Omnibus::Project}
|
@@ -75,7 +85,7 @@ module Omnibus
|
|
75
85
|
# Defaults to `"config/projects"`.
|
76
86
|
#
|
77
87
|
# @return [String]
|
78
|
-
project_dir
|
88
|
+
default :project_dir, 'config/projects'
|
79
89
|
|
80
90
|
# @!attribute [rw] software_dir
|
81
91
|
# The relative path of the directory containing {Omnibus::Software}
|
@@ -84,7 +94,7 @@ module Omnibus
|
|
84
94
|
# Defaults to `"config/software"`.
|
85
95
|
#
|
86
96
|
# @return [String]
|
87
|
-
software_dir
|
97
|
+
default :software_dir, 'config/software'
|
88
98
|
|
89
99
|
# @!attribute [rw] project_root
|
90
100
|
# The root directory in which to look for {Omnibus::Project} and
|
@@ -93,7 +103,7 @@ module Omnibus
|
|
93
103
|
# Defaults to the current working directory.
|
94
104
|
#
|
95
105
|
# @return [String]
|
96
|
-
project_root Dir.pwd
|
106
|
+
default :project_root, Dir.pwd
|
97
107
|
|
98
108
|
# @!attribute [rw] install_dir
|
99
109
|
# Installation directory
|
@@ -104,7 +114,7 @@ module Omnibus
|
|
104
114
|
# {Omnibus::Project#install_path}
|
105
115
|
#
|
106
116
|
# @return [String]
|
107
|
-
install_dir
|
117
|
+
default :install_dir, '/opt/chef'
|
108
118
|
|
109
119
|
# @!endgroup
|
110
120
|
|
@@ -118,7 +128,7 @@ module Omnibus
|
|
118
128
|
# Defaults to `false`.
|
119
129
|
#
|
120
130
|
# @return [Boolean]
|
121
|
-
use_s3_caching false
|
131
|
+
default :use_s3_caching, false
|
122
132
|
|
123
133
|
# @!attribute [rw] s3_bucket
|
124
134
|
# The name of the S3 bucket you want to cache software artifacts in.
|
@@ -126,7 +136,7 @@ module Omnibus
|
|
126
136
|
# Defaults to `nil`. Must be set if {#use_s3_caching} is `true`.
|
127
137
|
#
|
128
138
|
# @return [String, nil]
|
129
|
-
s3_bucket nil
|
139
|
+
default :s3_bucket, nil
|
130
140
|
|
131
141
|
# @!attribute [rw] s3_access_key
|
132
142
|
# The S3 access key to use with S3 caching.
|
@@ -134,7 +144,7 @@ module Omnibus
|
|
134
144
|
# Defaults to `nil`. Must be set if {#use_s3_caching} is `true`.
|
135
145
|
#
|
136
146
|
# @return [String, nil]
|
137
|
-
s3_access_key nil
|
147
|
+
default :s3_access_key, nil
|
138
148
|
|
139
149
|
# @!attribute [rw] s3_secret_key
|
140
150
|
# The S3 secret key to use with S3 caching.
|
@@ -142,7 +152,7 @@ module Omnibus
|
|
142
152
|
# Defaults to `nil`. Must be set if {#use_s3_caching} is `true.`
|
143
153
|
#
|
144
154
|
# @return [String, nil]
|
145
|
-
s3_secret_key nil
|
155
|
+
default :s3_secret_key, nil
|
146
156
|
|
147
157
|
# @!endgroup
|
148
158
|
|
@@ -154,7 +164,7 @@ module Omnibus
|
|
154
164
|
# Defaults to `nil`. Must be set to use `release package` command.
|
155
165
|
#
|
156
166
|
# @return [String, nil]
|
157
|
-
release_s3_bucket nil
|
167
|
+
default :release_s3_bucket, nil
|
158
168
|
|
159
169
|
# @!attribute [rw] release_s3_access_key
|
160
170
|
# The S3 access key to use for S3 artifact release.
|
@@ -162,7 +172,7 @@ module Omnibus
|
|
162
172
|
# Defaults to `nil`. Must be set to use `release package` command.
|
163
173
|
#
|
164
174
|
# @return [String, nil]
|
165
|
-
release_s3_access_key nil
|
175
|
+
default :release_s3_access_key, nil
|
166
176
|
|
167
177
|
# @!attribute [rw] release_s3_secret_key
|
168
178
|
# The S3 secret key to use for S3 artifact release
|
@@ -170,7 +180,7 @@ module Omnibus
|
|
170
180
|
# Defaults to `nil`. Must be set to use `release package` command.
|
171
181
|
#
|
172
182
|
# @return [String, nil]
|
173
|
-
release_s3_secret_key nil
|
183
|
+
default :release_s3_secret_key, nil
|
174
184
|
|
175
185
|
# @!endgroup
|
176
186
|
|
@@ -179,12 +189,23 @@ module Omnibus
|
|
179
189
|
# @!attribute [rw] override_file
|
180
190
|
#
|
181
191
|
# @return [Boolean]
|
182
|
-
override_file nil
|
192
|
+
default :override_file, nil
|
193
|
+
|
194
|
+
# @!attribute [rw] software_gem
|
195
|
+
#
|
196
|
+
# The gem to pull software definitions from. This is just the name of the gem, which is used
|
197
|
+
# to find the path to your software definitions, and you must also specify this gem in the
|
198
|
+
# Gemfile of your project repo in order to include the gem in your bundle.
|
199
|
+
#
|
200
|
+
# Defaults to "omnibus-software".
|
201
|
+
#
|
202
|
+
# @return [String, nil]
|
203
|
+
default :software_gem, 'omnibus-software'
|
183
204
|
|
184
205
|
# @!attribute [rw] solaris_compiler
|
185
206
|
#
|
186
207
|
# @return [String, nil]
|
187
|
-
solaris_compiler nil
|
208
|
+
default :solaris_compiler, nil
|
188
209
|
|
189
210
|
# @!endgroup
|
190
211
|
|
@@ -193,7 +214,7 @@ module Omnibus
|
|
193
214
|
# @!attribute [rw] append_timestamp
|
194
215
|
#
|
195
216
|
# @return [Boolean]
|
196
|
-
append_timestamp true
|
217
|
+
default :append_timestamp, true
|
197
218
|
|
198
219
|
# # @!endgroup
|
199
220
|
|
@@ -202,7 +223,7 @@ module Omnibus
|
|
202
223
|
# @! attribute [rw] build_retries
|
203
224
|
#
|
204
225
|
# @return [Integer, nil]
|
205
|
-
build_retries 3
|
226
|
+
default :build_retries, 3
|
206
227
|
|
207
228
|
# @!group Validation Methods
|
208
229
|
|
@@ -220,12 +241,11 @@ module Omnibus
|
|
220
241
|
def self.valid_s3_config?
|
221
242
|
if use_s3_caching
|
222
243
|
unless s3_bucket
|
223
|
-
|
244
|
+
fail InvalidS3Configuration.new(s3_bucket, s3_access_key, s3_secret_key)
|
224
245
|
end
|
225
246
|
end
|
226
247
|
end
|
227
248
|
|
228
249
|
# @!endgroup
|
229
|
-
|
230
250
|
end # Config
|
231
251
|
end # Omnibus
|
data/lib/omnibus/exceptions.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
module Omnibus
|
2
|
-
|
3
2
|
class InvalidS3Configuration < RuntimeError
|
4
3
|
def initialize(s3_bucket, s3_access_key, s3_secret_key)
|
5
4
|
@s3_bucket, @s3_access_key, @s3_secret_key = s3_bucket, s3_access_key, s3_secret_key
|
@@ -91,6 +90,7 @@ module Omnibus
|
|
91
90
|
"""
|
92
91
|
end
|
93
92
|
end
|
93
|
+
|
94
94
|
# Raise this error if a needed Project configuration value has not
|
95
95
|
# been set.
|
96
96
|
class MissingProjectConfiguration < RuntimeError
|
@@ -111,6 +111,26 @@ module Omnibus
|
|
111
111
|
end
|
112
112
|
end
|
113
113
|
|
114
|
+
# Raise this error if a needed Software configuration value has not
|
115
|
+
# been set.
|
116
|
+
class MissingSoftwareConfiguration < RuntimeError
|
117
|
+
def initialize(software_name, parameter_name, sample_value)
|
118
|
+
@software_name, @parameter_name, @sample_value = software, parameter_name, sample_value
|
119
|
+
end
|
120
|
+
|
121
|
+
def to_s
|
122
|
+
"""
|
123
|
+
You are attempting to build software #{@sofware_name}, but have not specified
|
124
|
+
a value for '#{@parameter_name}'!
|
125
|
+
|
126
|
+
Please add code similar to the following to your software DSL file:
|
127
|
+
|
128
|
+
#{@parameter_name} '#{@sample_value}'
|
129
|
+
|
130
|
+
"""
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
114
134
|
class MissingPatch < RuntimeError
|
115
135
|
def initialize(patch_name, search_paths)
|
116
136
|
@patch_name, @search_paths = patch_name, search_paths
|
@@ -155,4 +175,18 @@ module Omnibus
|
|
155
175
|
"""
|
156
176
|
end
|
157
177
|
end
|
178
|
+
|
179
|
+
class MissingMacPkgResource < StandardError
|
180
|
+
def initialize(missing_file_paths)
|
181
|
+
@missing_file_paths = missing_file_paths
|
182
|
+
end
|
183
|
+
|
184
|
+
def to_s
|
185
|
+
<<-E
|
186
|
+
Your omnibus repo is missing the following files required to build Mac
|
187
|
+
packages:
|
188
|
+
#{@missing_file_paths.map { |p| "* #{p}" }.join("\n ")}
|
189
|
+
E
|
190
|
+
end
|
191
|
+
end
|
158
192
|
end
|
data/lib/omnibus/fetcher.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
#
|
2
|
-
# Copyright:: Copyright (c) 2012
|
2
|
+
# Copyright:: Copyright (c) 2012-2014 Chef Software, Inc.
|
3
3
|
# License:: Apache License, Version 2.0
|
4
4
|
#
|
5
5
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
@@ -18,7 +18,6 @@
|
|
18
18
|
require 'pp'
|
19
19
|
|
20
20
|
module Omnibus
|
21
|
-
|
22
21
|
# Base class for classes that fetch project sources from the internet.
|
23
22
|
#
|
24
23
|
# @abstract Subclass and override the {#clean}, {#description},
|
@@ -27,7 +26,6 @@ module Omnibus
|
|
27
26
|
# @todo Is this class supposed to be abstract or not? Pretty sure
|
28
27
|
# it's supposed to be abstract
|
29
28
|
class Fetcher
|
30
|
-
|
31
29
|
# Given an error and a fetcher that generated the error, print a
|
32
30
|
# formatted report of the error and stacktrace, along with fetcher
|
33
31
|
# details to stderr.
|
@@ -43,7 +41,6 @@ module Omnibus
|
|
43
41
|
# since we're already outputting the real error and stacktrace
|
44
42
|
# here.
|
45
43
|
class ErrorReporter
|
46
|
-
|
47
44
|
def initialize(error, fetcher)
|
48
45
|
@error, @fetcher = error, fetcher
|
49
46
|
end
|
@@ -61,14 +58,14 @@ module Omnibus
|
|
61
58
|
# parameters (presumably the kind of fetcher and the software it
|
62
59
|
# is fetching?),
|
63
60
|
def explain(why)
|
64
|
-
$stderr.puts
|
61
|
+
$stderr.puts '* ' * 40
|
65
62
|
$stderr.puts why
|
66
|
-
$stderr.puts
|
63
|
+
$stderr.puts 'Fetcher params:'
|
67
64
|
$stderr.puts indent(@fetcher.description, 2)
|
68
|
-
$stderr.puts
|
65
|
+
$stderr.puts 'Exception:'
|
69
66
|
$stderr.puts indent("#{e.class}: #{e.message.strip}", 2)
|
70
|
-
Array(e.backtrace).each {|l| $stderr.puts indent(l, 4) }
|
71
|
-
$stderr.puts
|
67
|
+
Array(e.backtrace).each { |l| $stderr.puts indent(l, 4) }
|
68
|
+
$stderr.puts '* ' * 40
|
72
69
|
end
|
73
70
|
|
74
71
|
private
|
@@ -82,9 +79,8 @@ module Omnibus
|
|
82
79
|
# @param n [Fixnum] the number of " " characters to indent each line.
|
83
80
|
# @return [String]
|
84
81
|
def indent(string, n)
|
85
|
-
string.split("\n").map {|l|
|
82
|
+
string.split("\n").map { |l| ' '.rjust(n) << l }.join("\n")
|
86
83
|
end
|
87
|
-
|
88
84
|
end
|
89
85
|
|
90
86
|
class UnsupportedSourceLocation < ArgumentError
|
@@ -129,11 +125,11 @@ module Omnibus
|
|
129
125
|
elsif software.source[:path]
|
130
126
|
PathFetcher.new(software)
|
131
127
|
else
|
132
|
-
|
128
|
+
fail UnsupportedSourceLocation, "Don't know how to fetch software project #{software}"
|
133
129
|
end
|
134
130
|
end
|
135
131
|
|
136
|
-
def self.name(name=NULL_ARG)
|
132
|
+
def self.name(name = NULL_ARG)
|
137
133
|
@name = name unless name.equal?(NULL_ARG)
|
138
134
|
@name
|
139
135
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
#
|
2
|
-
# Copyright:: Copyright (c) 2012
|
2
|
+
# Copyright:: Copyright (c) 2012-2014 Chef Software, Inc.
|
3
3
|
# License:: Apache License, Version 2.0
|
4
4
|
#
|
5
5
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
@@ -16,10 +16,8 @@
|
|
16
16
|
#
|
17
17
|
|
18
18
|
module Omnibus
|
19
|
-
|
20
19
|
# Fetcher implementation for projects in git.
|
21
20
|
class GitFetcher < Fetcher
|
22
|
-
|
23
21
|
name :git
|
24
22
|
|
25
23
|
attr_reader :source
|
@@ -34,7 +32,7 @@ module Omnibus
|
|
34
32
|
end
|
35
33
|
|
36
34
|
def description
|
37
|
-
|
35
|
+
<<-E
|
38
36
|
repo URI: #{@source[:git]}
|
39
37
|
local location: #{@project_dir}
|
40
38
|
E
|
@@ -47,9 +45,9 @@ E
|
|
47
45
|
|
48
46
|
def clean
|
49
47
|
if existing_git_clone?
|
50
|
-
log
|
51
|
-
clean_cmd =
|
52
|
-
shell = Mixlib::ShellOut.new(clean_cmd, :
|
48
|
+
log 'cleaning existing build'
|
49
|
+
clean_cmd = 'git clean -fdx'
|
50
|
+
shell = Mixlib::ShellOut.new(clean_cmd, live_stream: STDOUT, cwd: project_dir)
|
53
51
|
shell.run_command
|
54
52
|
shell.error!
|
55
53
|
end
|
@@ -76,7 +74,7 @@ E
|
|
76
74
|
raise
|
77
75
|
else
|
78
76
|
# Deal with github failing all the time :(
|
79
|
-
time_to_sleep = 5 * (2
|
77
|
+
time_to_sleep = 5 * (2**retries)
|
80
78
|
retries += 1
|
81
79
|
log "git clone/fetch failed for #{@source} #{retries} time(s), retrying in #{time_to_sleep}s"
|
82
80
|
sleep(time_to_sleep)
|
@@ -87,9 +85,9 @@ E
|
|
87
85
|
private
|
88
86
|
|
89
87
|
def clone
|
90
|
-
puts
|
88
|
+
puts 'cloning the source from git'
|
91
89
|
clone_cmd = "git clone #{@source[:git]} #{project_dir}"
|
92
|
-
shell = Mixlib::ShellOut.new(clone_cmd, :
|
90
|
+
shell = Mixlib::ShellOut.new(clone_cmd, live_stream: STDOUT)
|
93
91
|
shell.run_command
|
94
92
|
shell.error!
|
95
93
|
end
|
@@ -98,7 +96,7 @@ E
|
|
98
96
|
sha_ref = target_revision
|
99
97
|
|
100
98
|
checkout_cmd = "git checkout #{sha_ref}"
|
101
|
-
shell = Mixlib::ShellOut.new(checkout_cmd, :
|
99
|
+
shell = Mixlib::ShellOut.new(checkout_cmd, live_stream: STDOUT, cwd: project_dir)
|
102
100
|
shell.run_command
|
103
101
|
shell.error!
|
104
102
|
end
|
@@ -106,7 +104,7 @@ E
|
|
106
104
|
def fetch_updates
|
107
105
|
puts "fetching updates and resetting to revision #{target_revision}"
|
108
106
|
fetch_cmd = "git fetch origin && git fetch origin --tags && git reset --hard #{target_revision}"
|
109
|
-
shell = Mixlib::ShellOut.new(fetch_cmd, :
|
107
|
+
shell = Mixlib::ShellOut.new(fetch_cmd, live_stream: STDOUT, cwd: project_dir)
|
110
108
|
shell.run_command
|
111
109
|
shell.error!
|
112
110
|
end
|
@@ -121,8 +119,8 @@ E
|
|
121
119
|
|
122
120
|
def current_revision
|
123
121
|
@current_rev ||= begin
|
124
|
-
rev_cmd =
|
125
|
-
shell = Mixlib::ShellOut.new(rev_cmd, :
|
122
|
+
rev_cmd = 'git rev-parse HEAD'
|
123
|
+
shell = Mixlib::ShellOut.new(rev_cmd, live_stream: STDOUT, cwd: project_dir)
|
126
124
|
shell.run_command
|
127
125
|
shell.error!
|
128
126
|
output = shell.stdout
|
@@ -154,13 +152,11 @@ E
|
|
154
152
|
# tags. We take care to only return exact matches in
|
155
153
|
# process_remote_list.
|
156
154
|
cmd = "git ls-remote origin #{ref}*"
|
157
|
-
shell = Mixlib::ShellOut.new(cmd, :
|
155
|
+
shell = Mixlib::ShellOut.new(cmd, live_stream: STDOUT, cwd: project_dir)
|
158
156
|
shell.run_command
|
159
157
|
shell.error!
|
160
158
|
commit_ref = process_remote_list(shell.stdout, ref)
|
161
|
-
|
162
|
-
raise "Could not parse SHA reference"
|
163
|
-
end
|
159
|
+
fail 'Could not parse SHA reference' unless commit_ref
|
164
160
|
commit_ref
|
165
161
|
rescue Exception => e
|
166
162
|
if retries >= 3
|
@@ -168,7 +164,7 @@ E
|
|
168
164
|
raise
|
169
165
|
else
|
170
166
|
# Deal with github failing all the time :(
|
171
|
-
time_to_sleep = 5 * (2
|
167
|
+
time_to_sleep = 5 * (2**retries)
|
172
168
|
retries += 1
|
173
169
|
log "git ls-remote failed for #{@source} #{retries} time(s), retrying in #{time_to_sleep}s"
|
174
170
|
sleep(time_to_sleep)
|