omnibus 3.1.0 → 3.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6f254e32b62632576547008173adf8f36379a0e5
4
- data.tar.gz: b70de72741324c2e54d43ec75b96ffac86d87ae1
3
+ metadata.gz: 47494584e1a03e4d60e11d7e184ef6fdacfb3fcf
4
+ data.tar.gz: 6afbd1c06cb80f127ed9d1ef153e6cc66e41a41f
5
5
  SHA512:
6
- metadata.gz: caafe9673d611c76b973ef63fffc557cc103d28881207b971a31fd7db59e15e3056df5e188b5010a334a1a3d9901ac7ac893803cfd9e9638b6eea69f65fc81a5
7
- data.tar.gz: e16d7149c5e098e47ee46791590f94fd7b3e510e8bec736aa4d89b0cfbd24fe00fb29a4aa29ede52aef2b99b91c950f38b4314a138fd4e8408b78475427d2391
6
+ metadata.gz: 909e063a81130bc42ddcda0ec238276768b40a12089b26e9ef98ae422ab1ec19cc2b9a888964ef22930d7ce77293dfd2696d4dd8b8d9a2a8ec617d8c88e38f1f
7
+ data.tar.gz: 627dbb3379bf4642618770455455a977cdf7256c6d97c0e88d50ec999defc77ad532616cb782fe41295fc227613ee672df82718e1b530b837623ac6b5f33e19b
data/CHANGELOG.md CHANGED
@@ -1,6 +1,19 @@
1
1
  Omnibus Ruby CHANGELOG
2
2
  ======================
3
3
 
4
+ v3.1.1 (May 20, 2014)
5
+ ---------------------
6
+ - Update project generators to use new APIs. The old project generators created a project that issued deprecation warnings!
7
+ - Stream build output to the debug logger. Specifying `--log-level debug` now includes **all** the build output as if you had run the command manually.
8
+ - Deprecate the `OMNIBUS_APPEND_TIMESTAMP` environment variable in favor of the command line flag. This is only a deprecation, but the `OMNIBUS_APPEND_TIMESTAMP` will be removed in the next major release.
9
+ - Fix a bug in `windows_safe_path` to always return a string
10
+ - Add a `Config.base_dir` configuration value for easy tuning
11
+ - Remove the use of `Omnibus.root` in `BuildVersion#initializer`. This removes the many deprecation warnings that print on each software load.
12
+ - Output the current command in debug output when shelling out
13
+ - Output the current environment in debug output when shelling out
14
+ - Change the information that is displayed at different log levels with respect to shelling out. In `warn` mode, Omnibus will only display warnings/deprecations; you will not see any build commands or output. In `info` mode, Omnibus will display the commands and environment that are being used; you will not see the output from the build (unless it fails). In `debug` mode, Omnibus will display the commands, environment, and output (livestream) from commands.
15
+
16
+
4
17
  v3.1.0 (May 14, 2014)
5
18
  -------------------------
6
19
  ### New Features
@@ -44,3 +44,23 @@ Feature: Backwards-compatible deprecated commands
44
44
  """
45
45
  The project generator has been renamed to 'omnibus new'. Please use 'omnibus new' in the future.
46
46
  """
47
+
48
+ Scenario: When OMNIBUS_APPEND_TIMESTAMP is given (true)
49
+ * I set the environment variables to:
50
+ | variable | value |
51
+ | OMNIBUS_APPEND_TIMESTAMP | true |
52
+ * I run `omnibus build hamlet`
53
+ * the output should contain:
54
+ """
55
+ The environment variable 'OMNIBUS_APPEND_TIMESTAMP' is deprecated. Please use '--override append_timestamp:true' instead.
56
+ """
57
+
58
+ Scenario: When OMNIBUS_APPEND_TIMESTAMP is given (false)
59
+ * I set the environment variables to:
60
+ | variable | value |
61
+ | OMNIBUS_APPEND_TIMESTAMP | false |
62
+ * I run `omnibus build hamlet`
63
+ * the output should contain:
64
+ """
65
+ The environment variable 'OMNIBUS_APPEND_TIMESTAMP' is deprecated. Please use '--override append_timestamp:false' instead.
66
+ """
@@ -62,7 +62,7 @@ module Omnibus
62
62
  # Create a new BuildVersion
63
63
  #
64
64
  # @param [String] path Path from which to read git version information
65
- def initialize(path = Omnibus.root)
65
+ def initialize(path = Omnibus.project_root)
66
66
  @path = path
67
67
  end
68
68
 
@@ -79,12 +79,9 @@ module Omnibus
79
79
  #
80
80
  # MAJOR.MINOR.PATCH-PRERELEASE+TIMESTAMP.git.COMMITS_SINCE.GIT_SHA
81
81
  #
82
- # By default, a timestamp is incorporated into the build component
83
- # of version string (see
84
- # {Omnibus::BuildVersion::TIMESTAMP_FORMAT}). This can be
85
- # disabled by setting the environment variable
86
- # `OMNIBUS_APPEND_TIMESTAMP` to a "falsey" value (e.g. "false",
87
- # "f", "no", "n", "0")
82
+ # By default, a timestamp is incorporated into the build component of
83
+ # version string (see {Omnibus::BuildVersion::TIMESTAMP_FORMAT}). This
84
+ # option is configurable via the {Omnibus::Config}.
88
85
  #
89
86
  # @example 11.0.0-alpha.1+20121218164140.git.207.694b062
90
87
  # @return [String]
@@ -114,7 +111,9 @@ module Omnibus
114
111
  # variable to a 'falsey' value (ie false, f, no, n or 0).
115
112
  #
116
113
  # format: YYYYMMDDHHMMSS example: 20130131123345
117
- build_version_items << build_start_time.strftime(TIMESTAMP_FORMAT) if append_timestamp?
114
+ if Config.append_timestamp
115
+ build_version_items << build_start_time.strftime(TIMESTAMP_FORMAT)
116
+ end
118
117
 
119
118
  # We'll append the git describe information unless we are sitting right
120
119
  # on an annotated tag.
@@ -144,7 +143,7 @@ module Omnibus
144
143
  # @return [String]
145
144
  def git_describe
146
145
  @git_describe ||= begin
147
- cmd = quiet_shellout('git describe --tags', cwd: @path)
146
+ cmd = shellout('git describe --tags', cwd: @path)
148
147
 
149
148
  if cmd.exitstatus == 0
150
149
  cmd.stdout.chomp
@@ -288,18 +287,5 @@ module Omnibus
288
287
  version_regexp = /^(\d+)\.(\d+)\.(\d+)/
289
288
  version_regexp.match(git_describe)[1..3]
290
289
  end
291
-
292
- #
293
- # @todo Remove this environment variable madness and just use the CLI
294
- #
295
- def append_timestamp?
296
- if ENV['OMNIBUS_APPEND_TIMESTAMP'] && (ENV['OMNIBUS_APPEND_TIMESTAMP'] =~ (/^(false|f|no|n|0)$/i))
297
- false
298
- elsif ENV['OMNIBUS_APPEND_TIMESTAMP'] && (ENV['OMNIBUS_APPEND_TIMESTAMP'] =~ (/^(true|t|yes|y|1)$/i))
299
- true
300
- else
301
- Omnibus::Config.append_timestamp
302
- end
303
- end
304
290
  end
305
291
  end
@@ -251,7 +251,7 @@ module Omnibus
251
251
  cwd: project_dir,
252
252
  timeout: 5400,
253
253
  }
254
- options[:live_stream] = STDOUT if ENV['DEBUG']
254
+ options[:live_stream] = log.live_stream(:debug)
255
255
  if cmd_args.last.is_a? Hash
256
256
  cmd_options = cmd_args.last
257
257
  cmd_args[cmd_args.size - 1] = options.merge(cmd_options)
@@ -23,8 +23,25 @@
23
23
  module Omnibus
24
24
  class Command::Base
25
25
  class << self
26
+ include Util
27
+
26
28
  alias_method :old_dispatch, :dispatch
27
29
  def dispatch(m, args, options, config)
30
+ # Handle OMNIBUS_APPEND_TIMESTAMP environment
31
+ if ENV.key?('OMNIBUS_APPEND_TIMESTAMP')
32
+ value = ENV.delete('OMNIBUS_APPEND_TIMESTAMP')
33
+
34
+ if truthy?(value)
35
+ warn("The environment variable 'OMNIBUS_APPEND_TIMESTAMP' is deprecated. Please use '--override append_timestamp:true' instead.")
36
+ args += %(--override append_timestamp:true)
37
+ elsif falsey?(value)
38
+ warn("The environment variable 'OMNIBUS_APPEND_TIMESTAMP' is deprecated. Please use '--override append_timestamp:false' instead.")
39
+ args += %(--override append_timestamp:false)
40
+ else
41
+ raise "Unknown value for OMNIBUS_APPEND_TIMESTAMP: #{value.inspect}!"
42
+ end
43
+ end
44
+
28
45
  # Handle old --timestamp
29
46
  if args.include?('--timestamp') || args.include?('-t')
30
47
  warn("The '--timestamp' option has been deprecated! Please use '--override append_timestamp:true' instead.")
@@ -25,19 +25,26 @@ module Omnibus
25
25
  # it out twice, which I'm doing now for benefit of viewers of the Yard docs.
26
26
  class Config
27
27
  extend Mixlib::Config
28
+ extend Util
28
29
 
29
- # Converts a given path to a platform specific path based on windows or
30
- # linux.
31
- def self.platformize_omnibus_path(path)
30
+ # @!group Directory Configuration Parameters
31
+
32
+ # @!attribute [rw] base_dir
33
+ # The "base" directory where Omnibus will store it's data. Other paths are
34
+ # dynamically constructed from this value.
35
+ #
36
+ # Defaults to `"C:\omnibus-ruby"` on Windows
37
+ # Defaults to `"/var/cache/omnibus"` on other platforms
38
+ #
39
+ # @return [String]
40
+ default(:base_dir) do
32
41
  if Ohai.platform == 'windows'
33
- File.join('C:\\omnibus-ruby', path).gsub(File::SEPARATOR, File::ALT_SEPARATOR)
42
+ 'C:\\omnibus-ruby'
34
43
  else
35
- File.join('/var/cache/omnibus', path)
44
+ '/var/cache/omnibus'
36
45
  end
37
46
  end
38
47
 
39
- # @!group Directory Configuration Parameters
40
-
41
48
  # @!attribute [rw] cache_dir
42
49
  # The absolute path to the directory on the virtual machine where
43
50
  # code will be cached.
@@ -45,7 +52,7 @@ module Omnibus
45
52
  # Defaults to `"/var/cache/omnibus/cache"`.
46
53
  #
47
54
  # @return [String]
48
- default(:cache_dir) { platformize_omnibus_path('cache') }
55
+ default(:cache_dir) { windows_safe_path(base_dir, 'cache') }
49
56
 
50
57
  # @!attribute [rw] install_path_cache_dir
51
58
  # The absolute path to the directory on the virtual machine where
@@ -54,7 +61,7 @@ module Omnibus
54
61
  # Defaults to `"/var/cache/omnibus/cache/install_path"`.
55
62
  #
56
63
  # @return [String]
57
- default(:install_path_cache_dir) { platformize_omnibus_path('cache/install_path') }
64
+ default(:install_path_cache_dir) { windows_safe_path(base_dir, 'cache', 'install_path') }
58
65
 
59
66
  # @!attribute [rw] source_dir
60
67
  # The absolute path to the directory on the virtual machine where
@@ -63,7 +70,7 @@ module Omnibus
63
70
  # Defaults to `"/var/cache/omnibus/src"`.
64
71
  #
65
72
  # @return [String]
66
- default(:source_dir) { platformize_omnibus_path('src') }
73
+ default(:source_dir) { windows_safe_path(base_dir, 'src') }
67
74
 
68
75
  # @!attribute [rw] build_dir
69
76
  # The absolute path to the directory on the virtual machine where
@@ -72,7 +79,7 @@ module Omnibus
72
79
  # Defaults to `"/var/cache/omnibus/build"`.
73
80
  #
74
81
  # @return [String]
75
- default(:build_dir) { platformize_omnibus_path('build') }
82
+ default(:build_dir) { windows_safe_path(base_dir, 'build') }
76
83
 
77
84
  # @!attribute [rw] package_dir
78
85
  # The absolute path to the directory on the virtual machine where
@@ -81,7 +88,7 @@ module Omnibus
81
88
  # Defaults to `"/var/cache/omnibus/pkg"`.
82
89
  #
83
90
  # @return [String]
84
- default(:package_dir) { platformize_omnibus_path('pkg') }
91
+ default(:package_dir) { windows_safe_path(base_dir, 'pkg') }
85
92
 
86
93
  # @!attribute [rw] package_tmp
87
94
  # The absolute path to the directory on the virtual machine where
@@ -92,7 +99,7 @@ module Omnibus
92
99
  # Defaults to `"/var/cache/omnibus/pkg-tmp"`.
93
100
  #
94
101
  # @return [String]
95
- default(:package_tmp) { platformize_omnibus_path('pkg-tmp') }
102
+ default(:package_tmp) { windows_safe_path(base_dir, 'pkg-tmp') }
96
103
 
97
104
  # @!attribute [rw] project_dir
98
105
  # The relative path of the directory containing {Omnibus::Project}
@@ -44,7 +44,7 @@ module Omnibus
44
44
  def clean
45
45
  if existing_git_clone?
46
46
  log.info(log_key) { 'Cleaning existing build' }
47
- quiet_shellout!('git clean -fdx', cwd: project_dir)
47
+ shellout!('git clean -fdx', cwd: project_dir)
48
48
  end
49
49
  rescue Exception => e
50
50
  ErrorReporter.new(e, self).explain("Failed to clean git repository '#{@source[:git]}'")
@@ -91,12 +91,12 @@ module Omnibus
91
91
 
92
92
  def clone
93
93
  log.info(log_key) { 'Cloning the source from git' }
94
- quiet_shellout!("git clone #{@source[:git]} #{project_dir}")
94
+ shellout!("git clone #{@source[:git]} #{project_dir}")
95
95
  end
96
96
 
97
97
  def checkout
98
98
  sha_ref = target_revision
99
- quiet_shellout!("git checkout #{sha_ref}", cwd: project_dir)
99
+ shellout!("git checkout #{sha_ref}", cwd: project_dir)
100
100
  end
101
101
 
102
102
  def fetch_updates
@@ -107,7 +107,7 @@ module Omnibus
107
107
  fetch_cmd = "git fetch origin && " \
108
108
  "git fetch origin --tags && " \
109
109
  "git reset --hard #{target_revision}"
110
- quiet_shellout!(fetch_cmd, cwd: project_dir)
110
+ shellout!(fetch_cmd, cwd: project_dir)
111
111
  end
112
112
 
113
113
  def existing_git_clone?
@@ -121,7 +121,7 @@ module Omnibus
121
121
  def current_revision
122
122
  return @current_rev if @current_rev
123
123
 
124
- cmd = quiet_shellout!('git rev-parse HEAD', cwd: project_dir)
124
+ cmd = shellout!('git rev-parse HEAD', cwd: project_dir)
125
125
  stdout = cmd.stdout
126
126
 
127
127
  @current_rev = sha_hash?(stdout) ? stdout : nil
@@ -148,7 +148,7 @@ module Omnibus
148
148
  # allows us to return the SHA of the tagged commit for annotated
149
149
  # tags. We take care to only return exact matches in
150
150
  # process_remote_list.
151
- cmd = quiet_shellout!("git ls-remote origin #{ref}*", cwd: project_dir)
151
+ cmd = shellout!("git ls-remote origin #{ref}*", cwd: project_dir)
152
152
  commit_ref = process_remote_list(cmd.stdout, ref)
153
153
 
154
154
  unless commit_ref
@@ -187,7 +187,7 @@ module Omnibus
187
187
  when Proc
188
188
  cmd.call
189
189
  when String
190
- quiet_shellout!(cmd)
190
+ shellout!(cmd)
191
191
  else
192
192
  raise "Don't know how to extract command for #{cmd.class} class"
193
193
  end
@@ -37,10 +37,10 @@ module Omnibus
37
37
  # Robocopy's return code is 1 if it succesfully copies over the
38
38
  # files and 0 if the files are already existing at the destination
39
39
  sync_cmd = "robocopy #{@source[:path]}\\ #{@project_dir}\\ /MIR /S"
40
- quiet_shellout!(sync_cmd, returns: [0, 1])
40
+ shellout!(sync_cmd, returns: [0, 1])
41
41
  else
42
42
  sync_cmd = "rsync --delete -a #{@source[:path]}/ #{@project_dir}/"
43
- quiet_shellout!(sync_cmd)
43
+ shellout!(sync_cmd)
44
44
  end
45
45
  end
46
46
 
@@ -13,6 +13,12 @@
13
13
  # project configuration to build at +./local/omnibus/build+ instead of
14
14
  # +<%= config[:install_path] %>+
15
15
  #
16
+ # Uncomment this line to change the default base directory to "local"
17
+ # -------------------------------------------------------------------
18
+ # base_dir './local'
19
+ #
20
+ # Alternatively you can tune the individual values
21
+ # ------------------------------------------------
16
22
  # cache_dir './local/omnibus/cache'
17
23
  # install_path_cache_dir './local/omnibus/cache/install_path'
18
24
  # source_dir './local/omnibus/src'
@@ -4,7 +4,7 @@ maintainer 'CHANGE ME'
4
4
  homepage 'CHANGEME.com'
5
5
 
6
6
  install_path '<%= config[:install_path] %>'
7
- build_version Omnibus::BuildVersion.new.semver
7
+ build_version Omnibus::BuildVersion.semver
8
8
  build_iteration 1
9
9
 
10
10
  # creates required build directories
@@ -6,7 +6,7 @@
6
6
  # https://github.com/opscode/omnibus-software/tree/master/config/software
7
7
  #
8
8
  name "c-example"
9
- version "1.0.0"
9
+ default_version "1.0.0"
10
10
 
11
11
  dependency "zlib"
12
12
  dependency "openssl"
@@ -6,7 +6,7 @@
6
6
  # https://github.com/opscode/omnibus-software/tree/master/config/software
7
7
  #
8
8
  name "erlang-example"
9
- version "1.0.0"
9
+ default_version "1.0.0"
10
10
 
11
11
  dependency "erlang"
12
12
  dependency "rebar"
@@ -6,7 +6,7 @@
6
6
  # https://github.com/opscode/omnibus-software/tree/master/config/software
7
7
  #
8
8
  name "ruby-example"
9
- version "1.0.0"
9
+ default_version "1.0.0"
10
10
 
11
11
  dependency "ruby"
12
12
  dependency "rubygems"
@@ -39,7 +39,7 @@ module Omnibus
39
39
  # Creates the full path if it does not exist already
40
40
  def create_cache_path
41
41
  FileUtils.mkdir_p(File.dirname(cache_path))
42
- quiet_shellout!("git --git-dir=#{cache_path} init -q") unless cache_path_exists?
42
+ shellout!("git --git-dir=#{cache_path} init -q") unless cache_path_exists?
43
43
  true
44
44
  end
45
45
 
@@ -74,20 +74,20 @@ module Omnibus
74
74
  # Create an incremental install path cache for the software step
75
75
  def incremental
76
76
  create_cache_path
77
- quiet_shellout!(%Q(git --git-dir=#{cache_path} --work-tree=#{@install_path} add -A -f))
77
+ shellout!(%Q(git --git-dir=#{cache_path} --work-tree=#{@install_path} add -A -f))
78
78
  begin
79
- quiet_shellout!(%Q(git --git-dir=#{cache_path} --work-tree=#{@install_path} commit -q -m "Backup of #{tag}"))
79
+ shellout!(%Q(git --git-dir=#{cache_path} --work-tree=#{@install_path} commit -q -m "Backup of #{tag}"))
80
80
  rescue Mixlib::ShellOut::ShellCommandFailed => e
81
81
  if e.message !~ /nothing to commit/
82
82
  raise
83
83
  end
84
84
  end
85
- quiet_shellout!(%Q(git --git-dir=#{cache_path} --work-tree=#{@install_path} tag -f "#{tag}"))
85
+ shellout!(%Q(git --git-dir=#{cache_path} --work-tree=#{@install_path} tag -f "#{tag}"))
86
86
  end
87
87
 
88
88
  def restore
89
89
  create_cache_path
90
- cmd = quiet_shellout(%Q(git --git-dir=#{cache_path} --work-tree=#{@install_path} tag -l "#{tag}"))
90
+ cmd = shellout(%Q(git --git-dir=#{cache_path} --work-tree=#{@install_path} tag -l "#{tag}"))
91
91
 
92
92
  restore_me = false
93
93
  cmd.stdout.each_line do |line|
@@ -95,7 +95,7 @@ module Omnibus
95
95
  end
96
96
 
97
97
  if restore_me
98
- quiet_shellout!(%Q(git --git-dir=#{cache_path} --work-tree=#{@install_path} checkout -f "#{tag}"))
98
+ shellout!(%Q(git --git-dir=#{cache_path} --work-tree=#{@install_path} checkout -f "#{tag}"))
99
99
  true
100
100
  else
101
101
  false
@@ -32,6 +32,18 @@ module Omnibus
32
32
  raise "'#{level.inspect}' does not appear to be a valid log level!"
33
33
  end
34
34
 
35
+ #
36
+ # The live stream for this logger.
37
+ #
38
+ # @param [Symbol] level
39
+ #
40
+ # @return [LiveStream]
41
+ #
42
+ def live_stream(level = :debug)
43
+ @live_streams ||= {}
44
+ @live_streams[level.to_sym] ||= LiveStream.new(self, level)
45
+ end
46
+
35
47
  private
36
48
 
37
49
  def format_message(severity, _datetime, progname, msg)
@@ -43,5 +55,66 @@ module Omnibus
43
55
 
44
56
  "#{left.rjust(30)}#{msg}\n"
45
57
  end
58
+
59
+ #
60
+ # This is a magical wrapper around the logger that chunks data to not look
61
+ # like absolute shit.
62
+ #
63
+ class LiveStream
64
+ #
65
+ # Create a new LiveStream logger.
66
+ #
67
+ # @param [Logger] log
68
+ # the logger object responsible for logging
69
+ # @param [Symbol] level
70
+ # the log level
71
+ #
72
+ def initialize(log, level = :debug)
73
+ @log = log
74
+ @level = level
75
+ @buffer = ''
76
+ end
77
+
78
+ #
79
+ # The live stream operator must respond to <<.
80
+ #
81
+ # @param [String] data
82
+ #
83
+ def <<(data)
84
+ log_lines(data)
85
+ end
86
+
87
+ private
88
+
89
+ #
90
+ # Log the lines in the data, keeping the "rest" in the buffer.
91
+ #
92
+ # @param [String] data
93
+ #
94
+ def log_lines(data)
95
+ if (leftover = @buffer)
96
+ @buffer = nil
97
+ log_lines(leftover + data)
98
+ else
99
+ if (newline_index = data.index("\n"))
100
+ line = data.slice!(0...newline_index)
101
+ data.slice!(0)
102
+ log_line(line)
103
+ log_lines(data)
104
+ else
105
+ @buffer = data
106
+ end
107
+ end
108
+ end
109
+
110
+ #
111
+ # Log an individual line.
112
+ #
113
+ # @param [String] data
114
+ #
115
+ def log_line(data)
116
+ @log.public_send(@level) { data }
117
+ end
118
+ end
46
119
  end
47
120
  end
@@ -226,8 +226,7 @@ module Omnibus
226
226
  # must be set in order to build a project)
227
227
  def install_path(val = NULL_ARG)
228
228
  unless val.equal?(NULL_ARG)
229
- @install_path = File.expand_path(val)
230
- windows_safe_path!(@install_path)
229
+ @install_path = windows_safe_path(val)
231
230
  end
232
231
  @install_path || raise(MissingProjectConfiguration.new('install_path', '/opt/chef'))
233
232
  end
data/lib/omnibus/util.rb CHANGED
@@ -17,10 +17,19 @@
17
17
  require 'mixlib/shellout'
18
18
 
19
19
  module Omnibus
20
- #
21
- # @author Seth Chisamore (<schisamo@getchef.com>)
22
- #
23
20
  module Util
21
+ #
22
+ # The default shellout options.
23
+ #
24
+ # @return [Hash]
25
+ #
26
+ SHELLOUT_OPTIONS = {
27
+ live_stream: Omnibus.logger.live_stream(:debug),
28
+ timeout: 7200, # 2 hours
29
+ environment: {},
30
+ }.freeze
31
+
32
+ #
24
33
  # Shells out and runs +command+.
25
34
  #
26
35
  # @overload shellout(command, options = {})
@@ -37,14 +46,20 @@ module Omnibus
37
46
  #
38
47
  def shellout(*args)
39
48
  options = args.last.kind_of?(Hash) ? args.pop : {}
49
+ options = SHELLOUT_OPTIONS.merge(options)
50
+
51
+ # Log any environment options given
52
+ unless options[:environment].empty?
53
+ Omnibus.logger.info { 'Environment:' }
54
+ options[:environment].each do |key, value|
55
+ Omnibus.logger.info { " #{key.to_s.upcase}=#{value.inspect}" }
56
+ end
57
+ end
40
58
 
41
- default_options = {
42
- live_stream: STDOUT,
43
- timeout: 7200, # 2 hours
44
- environment: {},
45
- }
59
+ # Log the actual command
60
+ Omnibus.logger.info { "$ #{args.join(' ')}" }
46
61
 
47
- cmd = Mixlib::ShellOut.new(*args, default_options.merge(options))
62
+ cmd = Mixlib::ShellOut.new(*args, options)
48
63
  cmd.run_command
49
64
  cmd
50
65
  end
@@ -63,38 +78,33 @@ module Omnibus
63
78
  cmd
64
79
  end
65
80
 
81
+ # Return true if the given value appears to be "truthy".
66
82
  #
67
- # Run a command in subshell, suppressing any output.
68
- #
69
- # @see (Util#shellout)
70
- #
71
- def quiet_shellout(*args)
72
- options = args.last.kind_of?(Hash) ? args.pop : {}
73
- options[:live_stream] = nil
74
- args << options
75
- shellout(*args)
83
+ # @param [#to_s] value
84
+ def truthy?(value)
85
+ value && value.to_s =~ /^(true|t|yes|y|1)$/i
76
86
  end
77
87
 
88
+ # Return true if the given value appears to be "falsey".
78
89
  #
79
- # Run a command, suppressing any output, but raising an error if the
80
- # command fails.
81
- #
82
- # @see (Util#shellout!)
83
- #
84
- def quiet_shellout!(*args)
85
- options = args.last.kind_of?(Hash) ? args.pop : {}
86
- options[:live_stream] = nil
87
- args << options
88
- shellout!(*args)
90
+ # @param [#to_s] value
91
+ def falsey?(value)
92
+ value && value.to_s =~ /^(false|f|no|n|0)$/i
89
93
  end
90
94
 
91
- # Replaces path separators with alternative ones when needed.
92
- #
93
- # @param path [String]
94
- # @return [String] given path with applied changes.
95
+ # @param [Array<String>] pieces
96
+ # the pieces of the path to join and fix
97
+ # @return [String]
98
+ # the path with applied changes
95
99
  #
96
- def windows_safe_path!(path)
97
- path.gsub!(File::SEPARATOR, File::ALT_SEPARATOR) if File::ALT_SEPARATOR
100
+ def windows_safe_path(*pieces)
101
+ path = File.expand_path(File.join(*pieces))
102
+
103
+ if File::ALT_SEPARATOR
104
+ path.gsub(File::SEPARATOR, File::ALT_SEPARATOR)
105
+ else
106
+ path
107
+ end
98
108
  end
99
109
  end
100
110
  end
@@ -15,5 +15,5 @@
15
15
  #
16
16
 
17
17
  module Omnibus
18
- VERSION = '3.1.0'
18
+ VERSION = '3.1.1'
19
19
  end
@@ -139,56 +139,24 @@ module Omnibus
139
139
  describe 'appending a timestamp' do
140
140
  let(:git_describe) { '11.0.0-alpha-3-207-g694b062' }
141
141
 
142
- it 'appends a timestamp by default' do
143
- expect(build_version.semver).to match(/11.0.0-alpha.3\+#{today_string}[0-9]+.git.207.694b062/)
144
- end
145
-
146
- describe "ENV['OMNIBUS_APPEND_TIMESTAMP'] is set" do
147
- ['true', 't', 'yes', 'y', 1].each do |truthy|
148
- context "to #{truthy}" do
149
- before { stub_env('OMNIBUS_APPEND_TIMESTAMP', truthy) }
150
-
151
- it 'appends a timestamp' do
152
- expect(build_version.semver).to match(/11.0.0-alpha.3\+#{today_string}[0-9]+.git.207.694b062/)
153
- end
154
- end
155
- end
156
-
157
- ['false', 'f', 'no', 'n', 0].each do |falsey|
158
- context "to #{falsey}" do
159
- before { stub_env('OMNIBUS_APPEND_TIMESTAMP', falsey) }
160
-
161
- it 'does not append a timestamp' do
162
- expect(build_version.semver).to match(/11.0.0-alpha.3\+git.207.694b062/)
163
- end
164
- end
142
+ context 'by default' do
143
+ it 'appends a timestamp' do
144
+ expect(build_version.semver).to match(/11.0.0-alpha.3\+#{today_string}[0-9]+.git.207.694b062/)
165
145
  end
166
146
  end
167
147
 
168
- describe 'Config.append_timestamp is set' do
169
- context 'is true' do
170
- before { Config.stub(:append_timestamp).and_return(true) }
148
+ context 'when Config.append_timestamp is true' do
149
+ before { Config.stub(:append_timestamp).and_return(true) }
171
150
 
172
- it 'appends a timestamp' do
173
- expect(build_version.semver).to match(/11.0.0-alpha.3\+#{today_string}[0-9]+.git.207.694b062/)
174
- end
175
- end
176
-
177
- context 'is false' do
178
- before { Config.stub(:append_timestamp).and_return(false) }
179
- it 'does not append a timestamp' do
180
- expect(build_version.semver).to match(/11.0.0-alpha.3\+git.207.694b062/)
181
- end
151
+ it 'appends a timestamp' do
152
+ expect(build_version.semver).to match(/11.0.0-alpha.3\+#{today_string}[0-9]+.git.207.694b062/)
182
153
  end
183
154
  end
184
155
 
185
- describe 'both are set' do
186
- before do
187
- stub_env('OMNIBUS_APPEND_TIMESTAMP', 'false')
188
- Config.stub(:append_timestamp).and_return(true)
189
- end
156
+ context 'when Config.append_timestamp is false' do
157
+ before { Config.stub(:append_timestamp).and_return(false) }
190
158
 
191
- it "prefers the value from ENV['OMNIBUS_APPEND_TIMESTAMP']" do
159
+ it 'does not append a timestamp' do
192
160
  expect(build_version.semver).to match(/11.0.0-alpha.3\+git.207.694b062/)
193
161
  end
194
162
  end
@@ -236,7 +204,7 @@ module Omnibus
236
204
 
237
205
  it 'runs `git describe` at an alternate path' do
238
206
  expect(build_version).to receive(:shellout)
239
- .with('git describe --tags', live_stream: nil, cwd: path)
207
+ .with('git describe --tags', cwd: path)
240
208
  .and_return(double('ouput', stdout: git_describe, exitstatus: 0))
241
209
  build_version.git_describe
242
210
  end
@@ -6,9 +6,26 @@ module Omnibus
6
6
  expect(described_class).to be_a(Mixlib::Config)
7
7
  end
8
8
 
9
+ it 'extends Util' do
10
+ expect(described_class).to be_a(Util)
11
+ end
12
+
9
13
  before do
14
+ # Don't expand paths on the build system. Otherwise, you will end up with
15
+ # paths like +\\Users\\you\\Development\\omnibus-ruby\\C:\\omnibus-ruby+
16
+ # when testing on "other" operating systems
17
+ File.stub(:expand_path) { |arg| arg }
18
+
19
+ # Make sure we have a clean config
20
+ described_class.reset
21
+
22
+ # Prevent Ohai from running
23
+ Ohai.stub(:platform).and_return('linux')
24
+ end
25
+
26
+ after do
27
+ # Make sure future tests are clean
10
28
  described_class.reset
11
- stub_ohai(platform: 'linux')
12
29
  end
13
30
 
14
31
  shared_examples 'a configurable' do |id, default|
@@ -21,6 +38,7 @@ module Omnibus
21
38
  end
22
39
  end
23
40
 
41
+ include_examples 'a configurable', :base_dir, '/var/cache/omnibus'
24
42
  include_examples 'a configurable', :cache_dir, '/var/cache/omnibus/cache'
25
43
  include_examples 'a configurable', :install_path_cache_dir, '/var/cache/omnibus/cache/install_path'
26
44
  include_examples 'a configurable', :source_dir, '/var/cache/omnibus/src'
@@ -46,10 +64,13 @@ module Omnibus
46
64
 
47
65
  context 'on Windows' do
48
66
  before do
49
- stub_ohai(platform: 'windows')
67
+ Ohai.stub(:platform).and_return('windows')
68
+
69
+ # This is not defined on Linuxy Rubies
50
70
  stub_const('File::ALT_SEPARATOR', '\\')
51
71
  end
52
72
 
73
+ include_examples 'a configurable', :base_dir, 'C:\\omnibus-ruby'
53
74
  include_examples 'a configurable', :cache_dir, 'C:\\omnibus-ruby\\cache'
54
75
  include_examples 'a configurable', :install_path_cache_dir, 'C:\\omnibus-ruby\\cache\\install_path'
55
76
  include_examples 'a configurable', :source_dir, 'C:\\omnibus-ruby\\src'
@@ -57,5 +78,16 @@ module Omnibus
57
78
  include_examples 'a configurable', :package_dir, 'C:\\omnibus-ruby\\pkg'
58
79
  include_examples 'a configurable', :package_tmp, 'C:\\omnibus-ruby\\pkg-tmp'
59
80
  end
81
+
82
+ context 'when base_dir is changed' do
83
+ before { described_class.base_dir = '/foo/bar' }
84
+
85
+ include_examples 'a configurable', :cache_dir, '/foo/bar/cache'
86
+ include_examples 'a configurable', :install_path_cache_dir, '/foo/bar/cache/install_path'
87
+ include_examples 'a configurable', :source_dir, '/foo/bar/src'
88
+ include_examples 'a configurable', :build_dir, '/foo/bar/build'
89
+ include_examples 'a configurable', :package_dir, '/foo/bar/pkg'
90
+ include_examples 'a configurable', :package_tmp, '/foo/bar/pkg-tmp'
91
+ end
60
92
  end
61
93
  end
@@ -105,7 +105,7 @@ module Omnibus
105
105
  .and_return(false)
106
106
  expect(FileUtils).to receive(:mkdir_p)
107
107
  .with(File.dirname(ipc.cache_path))
108
- expect(ipc).to receive(:quiet_shellout!)
108
+ expect(ipc).to receive(:shellout!)
109
109
  .with("git --git-dir=#{cache_path} init -q")
110
110
  ipc.create_cache_path
111
111
  end
@@ -117,7 +117,7 @@ module Omnibus
117
117
  allow(File).to receive(:directory?)
118
118
  .with(File.dirname(ipc.cache_path))
119
119
  .and_return(true)
120
- expect(ipc).to_not receive(:quiet_shellout!)
120
+ expect(ipc).to_not receive(:shellout!)
121
121
  .with("git --git-dir=#{cache_path} init -q")
122
122
  ipc.create_cache_path
123
123
  end
@@ -125,7 +125,7 @@ module Omnibus
125
125
 
126
126
  describe '#incremental' do
127
127
  before(:each) do
128
- allow(ipc).to receive(:quiet_shellout!)
128
+ allow(ipc).to receive(:shellout!)
129
129
  allow(ipc).to receive(:create_cache_path)
130
130
  end
131
131
 
@@ -135,19 +135,19 @@ module Omnibus
135
135
  end
136
136
 
137
137
  it 'adds all the changes to git' do
138
- expect(ipc).to receive(:quiet_shellout!)
138
+ expect(ipc).to receive(:shellout!)
139
139
  .with("git --git-dir=#{cache_path} --work-tree=#{install_path} add -A -f")
140
140
  ipc.incremental
141
141
  end
142
142
 
143
143
  it 'commits the backup for the software' do
144
- expect(ipc).to receive(:quiet_shellout!)
144
+ expect(ipc).to receive(:shellout!)
145
145
  .with(%Q(git --git-dir=#{cache_path} --work-tree=#{install_path} commit -q -m "Backup of #{ipc.tag}"))
146
146
  ipc.incremental
147
147
  end
148
148
 
149
149
  it 'tags the software backup' do
150
- expect(ipc).to receive(:quiet_shellout!)
150
+ expect(ipc).to receive(:shellout!)
151
151
  .with(%Q(git --git-dir=#{cache_path} --work-tree=#{install_path} tag -f "#{ipc.tag}"))
152
152
  ipc.incremental
153
153
  end
@@ -164,10 +164,10 @@ module Omnibus
164
164
  end
165
165
 
166
166
  before(:each) do
167
- allow(ipc).to receive(:quiet_shellout)
167
+ allow(ipc).to receive(:shellout)
168
168
  .with(%Q(git --git-dir=#{cache_path} --work-tree=#{install_path} tag -l "#{ipc.tag}"))
169
169
  .and_return(tag_cmd)
170
- allow(ipc).to receive(:quiet_shellout!)
170
+ allow(ipc).to receive(:shellout!)
171
171
  .with(%Q(git --git-dir=#{cache_path} --work-tree=#{install_path} checkout -f "#{ipc.tag}"))
172
172
  allow(ipc).to receive(:create_cache_path)
173
173
  end
@@ -178,10 +178,10 @@ module Omnibus
178
178
  end
179
179
 
180
180
  it 'checks for a tag with the software and version, and if it finds it, checks it out' do
181
- expect(ipc).to receive(:quiet_shellout)
181
+ expect(ipc).to receive(:shellout)
182
182
  .with(%Q(git --git-dir=#{cache_path} --work-tree=#{install_path} tag -l "#{ipc.tag}"))
183
183
  .and_return(tag_cmd)
184
- expect(ipc).to receive(:quiet_shellout!)
184
+ expect(ipc).to receive(:shellout!)
185
185
  .with(%Q(git --git-dir=#{cache_path} --work-tree=#{install_path} checkout -f "#{ipc.tag}"))
186
186
  ipc.restore
187
187
  end
@@ -190,10 +190,10 @@ module Omnibus
190
190
  let(:git_tag_output) { "\n" }
191
191
 
192
192
  it 'does nothing' do
193
- expect(ipc).to receive(:quiet_shellout)
193
+ expect(ipc).to receive(:shellout)
194
194
  .with(%Q(git --git-dir=#{cache_path} --work-tree=#{install_path} tag -l "#{ipc.tag}"))
195
195
  .and_return(tag_cmd)
196
- expect(ipc).to_not receive(:quiet_shellout!)
196
+ expect(ipc).to_not receive(:shellout!)
197
197
  .with(%Q(git --git-dir=#{cache_path} --work-tree=#{install_path} checkout -f "#{ipc.tag}"))
198
198
  ipc.restore
199
199
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: omnibus
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.1.0
4
+ version: 3.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chef Software, Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-05-14 00:00:00.000000000 Z
11
+ date: 2014-05-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: chef-sugar