omnibus 1.3.0 → 2.0.0.rc1
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 +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)
|