rzo 0.4.0 → 0.5.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 57197ea4ec41e6e0b5ae935a754b415ee3ef7ebc
4
- data.tar.gz: ae8140e57a89faf648963cb66f96f45f1fdfa8e5
3
+ metadata.gz: 70297031778e27174c132a827c094554b20a13f1
4
+ data.tar.gz: 47971b6987221ea6c623004eddb1736927a4300a
5
5
  SHA512:
6
- metadata.gz: 627ff40899c739564bd9cd0a5a8bdb0d5995ab76a650e11293a51cf322c456e7310709940b016d539e66c8a23984c17b2ccd67eaef52aadc4a2a8777affde89b
7
- data.tar.gz: eaecfbd7e222a971b4c1737b0451b30e24a8dbd0a402ff46ffca2ba0c11895a98914e3618f4b49a21dd6205a166d14d68c9f3e0741eeba900e07c743e0f63eb6
6
+ metadata.gz: b3d7ac91f360bdd6bcc169699bfc08faeb18343b7b1f3dc7887d87ac82b5a83e51b0f7a7dbec0a3777eac56bbf0c53a2d316170af56f635f62c5a2e5ffe51ade
7
+ data.tar.gz: b70d5f81eb88e8a4b9950a97b76a1d9a937f33b751d755e3af8116d3e9b689d800d2276074b08f62d79b4632b8a8636bbb10acdc930cc2f31fc766d1d9212571
@@ -13,6 +13,12 @@ AllCops:
13
13
  Style/RedundantReturn:
14
14
  Enabled: false
15
15
 
16
+ Style/InverseMethods:
17
+ Enabled: false
18
+
19
+ Style/FrozenStringLiteralComment:
20
+ Enabled: false
21
+
16
22
  Lint/UnneededDisable:
17
23
  Enabled: false
18
24
 
@@ -1,7 +1,14 @@
1
1
  # Change Log
2
2
 
3
- ## [v0.4.0](https://github.com/ghoneycutt/rizzo/tree/v0.4.0)
3
+ ## [v0.5.0](https://github.com/ghoneycutt/rizzo/tree/v0.5.0)
4
4
 
5
+ [Full Changelog](https://github.com/ghoneycutt/rizzo/compare/v0.4.0...v0.5.0)
6
+
7
+ **Merged pull requests:**
8
+
9
+ - Prioritize the present working control repository [\#24](https://github.com/ghoneycutt/rizzo/pull/24) ([jeffmccune](https://github.com/jeffmccune))
10
+
11
+ ## [v0.4.0](https://github.com/ghoneycutt/rizzo/tree/v0.4.0) (2017-09-13)
5
12
  [Full Changelog](https://github.com/ghoneycutt/rizzo/compare/v0.3.0...v0.4.0)
6
13
 
7
14
  **Closed issues:**
@@ -5,6 +5,7 @@ require 'rzo/app/config_validation'
5
5
  module Rzo
6
6
  class App
7
7
  # The base class for subcommands
8
+ # rubocop:disable Metrics/ClassLength
8
9
  class Subcommand
9
10
  include ConfigValidation
10
11
  include Logging
@@ -15,6 +16,8 @@ module Rzo
15
16
  # The Rizzo configuration after loading ~/.rizzo.json (--config).
16
17
  # See #load_config!
17
18
  attr_reader :config
19
+ # The present working directory at startup
20
+ attr_reader :pwd
18
21
 
19
22
  ##
20
23
  # Delegated method to mock with fixture data.
@@ -38,6 +41,7 @@ module Rzo
38
41
  @stdout = stdout
39
42
  @stderr = stderr
40
43
  reset_logging!(opts)
44
+ @pwd = Dir.pwd
41
45
  end
42
46
 
43
47
  ##
@@ -59,7 +63,8 @@ module Rzo
59
63
  def load_config!
60
64
  config = load_rizzo_config(opts[:config])
61
65
  validate_personal_config!(config)
62
- repos = config['control_repos']
66
+ repos = reorder_repos(config['control_repos'])
67
+ config['control_repos'] = repos
63
68
  @config = load_repo_configs(config, repos)
64
69
  debug "Merged configuration: \n#{JSON.pretty_generate(@config)}"
65
70
  # TODO: Move these validations to an instance method?
@@ -84,8 +89,8 @@ module Rzo
84
89
  def load_repo_configs(config = {}, repos = [])
85
90
  repos.each_with_object(config.dup) do |repo, hsh|
86
91
  fp = Pathname.new(repo).expand_path + '.rizzo.json'
87
- if fp.readable?
88
- hsh.deep_merge!(load_rizzo_config(fp))
92
+ if readable?(fp.to_s)
93
+ hsh.deep_merge!(load_rizzo_config(fp.to_s))
89
94
  else
90
95
  log.debug "Skipped #{fp} (it is not readable)"
91
96
  end
@@ -161,6 +166,50 @@ module Rzo
161
166
  else File.open(filepath, 'w') { |fd| yield fd }
162
167
  end
163
168
  end
169
+
170
+ # helper method to to stub in tests
171
+ def readable?(path)
172
+ File.readable?(path)
173
+ end
174
+
175
+ ##
176
+ # Memoized method to return the fully qualified path to the current rizzo
177
+ # project directory, based on the pwd. The project directory is the
178
+ # dirname of the full path to a `.rizzo.json` config file. Return false
179
+ # if not a project directory. ~/.rizzo.json is considered a personal
180
+ # configuration and not a project configuration.
181
+ #
182
+ # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength, Metrics/PerceivedComplexity
183
+ def project_dir(path)
184
+ return @project_dir unless @project_dir.nil?
185
+ rizzo_file = Pathname.new("#{path}/.rizzo.json")
186
+ personal_config = Pathname.new(File.expand_path('~/.rizzo.json'))
187
+ iterations = 0
188
+ while @project_dir.nil? && iterations < 100
189
+ iterations += 1
190
+ if readable?(rizzo_file.to_s) && rizzo_file != personal_config
191
+ @project_dir = rizzo_file.dirname.to_s
192
+ else
193
+ rizzo_file = rizzo_file.dirname.dirname + '.rizzo.json'
194
+ @project_dir = false if rizzo_file.dirname.root?
195
+ end
196
+ end
197
+ @project_dir
198
+ end
199
+ # rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength, Metrics/PerceivedComplexity
200
+
201
+ ##
202
+ # Given a list of control repositories, determine if the user's runtime
203
+ # pwd is in a control repository. If it is, move that control repository
204
+ # to the top level. If the user is inside a control repository and
205
+ def reorder_repos(repos = [])
206
+ if path = project_dir(pwd)
207
+ new_repos = repos - [path]
208
+ new_repos.unshift(path)
209
+ else
210
+ repos
211
+ end
212
+ end
164
213
  end
165
214
  end
166
215
  end
@@ -59,7 +59,7 @@ module Rzo
59
59
  'STDOUT, STDERR {RZO_LOGTO}'
60
60
  opt :logto, log_msg, default: env['RZO_LOGTO'] || 'STDERR'
61
61
  opt :validate, 'Check the configuration for common issues {RZO_VALIDATE="false"}',
62
- default: env['RZO_VALIDATE'] == 'false' ? false : true
62
+ default: !(env['RZO_VALIDATE'] == 'false')
63
63
  opt :syslog, 'Log to syslog', default: false, conflicts: :logto
64
64
  opt :verbose, 'Set log level to INFO {RZO_VERBOSE="true"}',
65
65
  default: env['RZO_VERBOSE'] == 'true'
@@ -119,7 +119,7 @@ module Rzo
119
119
  NAME = File.basename($PROGRAM_NAME).freeze
120
120
 
121
121
  # rubocop:disable Layout/IndentHeredoc
122
- BANNER = <<-"EOBANNER".freeze
122
+ BANNER = <<-BANNERMSG.freeze
123
123
  usage: #{NAME} [GLOBAL OPTIONS] SUBCOMMAND [ARGS]
124
124
  Sub Commands:
125
125
 
@@ -128,6 +128,6 @@ Sub Commands:
128
128
  roles Output all roles defined in the combined config
129
129
 
130
130
  Global options: (Note, command line arguments supersede ENV vars in {}'s)
131
- EOBANNER
131
+ BANNERMSG
132
132
  end
133
133
  end
@@ -5,7 +5,7 @@ module Rzo
5
5
  # The authoritative location of the rzo version. It should be possible to
6
6
  # `require 'rizzo/version'` and access `Rizzo::VERSION` from third party
7
7
  # libraries and the gemspec. The version is defined as a Semantic Version.
8
- VERSION = '0.4.0'.freeze
8
+ VERSION = '0.5.0'.freeze
9
9
 
10
10
  ##
11
11
  # Return the SemVer string, e.g. `"0.1.0"`
@@ -1,5 +1,3 @@
1
- # coding: utf-8
2
-
3
1
  lib = File.expand_path('../lib', __FILE__)
4
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
3
  require 'rzo/version'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rzo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Garrett Honeycutt
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2017-09-13 00:00:00.000000000 Z
12
+ date: 2017-10-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake