update_repo 0.8.2 → 0.8.3

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: bc3f29affb360bc461efe93b1d164e7ef7813fde
4
- data.tar.gz: 061f998c505667dbd68b590d02964ba3fbddb629
3
+ metadata.gz: 9f3535241ed1c52eb02d217ed8527c1b157b2eef
4
+ data.tar.gz: 63024bbfebe62bb05f82bb328a1ba6c0e127fda1
5
5
  SHA512:
6
- metadata.gz: 553c44b86f68898dea104f8076c0315d5fba1a02399be13d931518bfbf4083dba0b8724173de6a1c939121e9c0d2e999a737a64d65e9e1a248f6e96f0407cca3
7
- data.tar.gz: 212c861b4d1ccf9183763ca0da23fd437f8403deec6ff122b11ac1d928d22328c7c75f942cff577b1a1aa95080799e7b90315b97987a9aebb626f754b8583070
6
+ metadata.gz: 0c29335e5df44c273e7666a36e03a79d4c9b02490f0c3cd715d089a63e9d1a428e53dd88aee4296ae39f379c1f7c81aa24a17884373f2ec5e5539f22eb45ca95
7
+ data.tar.gz: eed327dfa5518532b4f01c0e757e5570b8584ecbc9377436e128804eec981a73c02f3960a88effbfd55a8c573e7d0be794f2361cf71f4ad30f4d1aecf68fa594
data/README.md CHANGED
@@ -23,7 +23,7 @@ It goes without saying that at the very least a working copy of both [`Git`][git
23
23
  Install this from the shell prompt as you would any other Ruby Gem
24
24
 
25
25
  ```
26
- $ gem install update_repo
26
+ $ gem install update_repo
27
27
  ```
28
28
 
29
29
  ## Usage
data/lib/update_repo.rb CHANGED
@@ -1,6 +1,8 @@
1
1
  require 'update_repo/version'
2
2
  require 'update_repo/helpers'
3
3
  require 'update_repo/cmd_config'
4
+ require 'update_repo/logger'
5
+ require 'update_repo/console_output'
4
6
  require 'yaml'
5
7
  require 'colorize'
6
8
  require 'confoog'
@@ -15,7 +17,6 @@ module UpdateRepo
15
17
 
16
18
  # An encapsulated class to walk the repo directories and update all Git
17
19
  # repositories found therein.
18
- # rubocop:disable Metrics/ClassLength
19
20
  class WalkRepo
20
21
  include Helpers
21
22
  # Class constructor. No parameters required.
@@ -23,12 +24,12 @@ module UpdateRepo
23
24
  def initialize
24
25
  @metrics = { processed: 0, skipped: 0, failed: 0, updated: 0,
25
26
  start_time: 0, failed_list: [] }
26
- @summary = { processed: 'green', updated: 'cyan', skipped: 'yellow',
27
- failed: 'red' }
28
27
  # create a new instance of the CmdConfig class then read the config var
29
28
  @cmd = CmdConfig.new
30
29
  # set up the logfile if needed
31
- setup_logfile if cmd(:log)
30
+ @log = Logger.new(cmd(:log), cmd(:timestamp))
31
+ # instantiate the console output class for header, footer etc
32
+ @cons = ConsoleOutput.new(@log, @metrics, @cmd)
32
33
  end
33
34
 
34
35
  # This function will perform the required actions to traverse the Repo.
@@ -37,15 +38,13 @@ module UpdateRepo
37
38
  # walk_repo.start
38
39
  def start
39
40
  String.disable_colorization = !cmd(:color)
40
- # make sure we dont have bad cmd-line parameter combinations ...
41
- @cmd.check_params # TODO - check this since is already called in @cmd.init
42
41
  # print out our header unless we are dumping / importing ...
43
- show_header unless dumping?
42
+ @cons.show_header unless dumping?
44
43
  config['location'].each do |loc|
45
44
  cmd(:dump_tree) ? dump_tree(File.join(loc)) : recurse_dir(loc)
46
45
  end
47
46
  # print out an informative footer unless dump / import ...
48
- footer unless dumping?
47
+ @cons.show_footer unless dumping?
49
48
  end
50
49
 
51
50
  private
@@ -72,20 +71,6 @@ module UpdateRepo
72
71
  @cmd.true_cmd(command.to_sym)
73
72
  end
74
73
 
75
- # Set up the log file - determine if we need to timestamp the filename and
76
- # then actually open it and set to sync.
77
- # @param [none]
78
- # @return [void]
79
- def setup_logfile
80
- filename = if cmd(:timestamp)
81
- 'updaterepo-' + Time.new.strftime('%y%m%d-%H%M%S') + '.log'
82
- else
83
- 'updaterepo.log'
84
- end
85
- @logfile = File.open(filename, 'w')
86
- @logfile.sync = true
87
- end
88
-
89
74
  # take each directory contained in the Repo directory, if it is detected as
90
75
  # a Git repository then update it (or as directed by command line)
91
76
  # @param dirname [string] Contains the directory to search for Git repos.]
@@ -110,77 +95,6 @@ module UpdateRepo
110
95
  !config['exceptions'].include?(File.basename(dir))
111
96
  end
112
97
 
113
- # Display a simple header to the console
114
- # @example
115
- # show_header
116
- # @return [void]
117
- # @param [none]
118
- def show_header
119
- # print an informative header before starting
120
- print_log "\nGit Repo update utility (v", VERSION, ')',
121
- " \u00A9 Grant Ramsay <seapagan@gmail.com>\n"
122
- print_log "Using Configuration from '#{config.config_path}'\n"
123
- # print_log "Command line is : #{config['cmd']}\n"
124
- # list out the locations that will be searched
125
- list_locations
126
- # list any exceptions that we have from the config file
127
- list_exceptions
128
- # save the start time for later display in the footer...
129
- @metrics[:start_time] = Time.now
130
- print_log "\n" # blank line before processing starts
131
- end
132
-
133
- # print out a brief footer. This will be expanded later.
134
- # @return [void]
135
- # @param [none]
136
- def footer
137
- duration = Time.now - @metrics[:start_time]
138
- print_log "\nUpdates completed in ", show_time(duration).cyan
139
- print_metrics
140
- print_log " \n\n"
141
- # close the log file now as we are done, just to be sure ...
142
- @logfile.close if @logfile
143
- end
144
-
145
- # Print end-of-run metrics to console / log
146
- # @return [void]
147
- # @param [none]
148
- def print_metrics
149
- @summary.each do |metric, color|
150
- metric_value = @metrics[metric]
151
- output = "#{metric_value} #{metric.capitalize}"
152
- print_log ' | ', output.send(color.to_sym) unless metric_value.zero?
153
- end
154
- print_log ' |'
155
- return if @metrics[:failed_list].empty?
156
- print_log "\n\n!! Note : The following repositories ",
157
- 'FAILED'.red.underline, ' during this run :'
158
- @metrics[:failed_list].each do |failed|
159
- print_log "\n [", 'x'.red, "] #{failed[:loc]}"
160
- print_log "\n -> ", "\"#{failed[:line].chomp}\"".red
161
- end
162
- end
163
-
164
- # Print a list of any defined expections that will not be updated.
165
- # @return [void]
166
- # @param [none]
167
- def list_exceptions
168
- exceptions = config['exceptions']
169
- return unless exceptions
170
- print_log "\nExclusions:".underline, ' ',
171
- exceptions.join(', ').yellow, "\n"
172
- end
173
-
174
- # Print a list of all top-level directories that will be searched and any
175
- # Git repos contained within updated.
176
- # @return [void]
177
- def list_locations
178
- print_log "\nRepo location(s):\n".underline
179
- config['location'].each do |loc|
180
- print_log '-> ', loc.cyan, "\n"
181
- end
182
- end
183
-
184
98
  # Takes the specified Repo and does not update it, outputing a note to the
185
99
  # console / log to this effect.
186
100
  # @param dirpath [string] The directory with Git repository to be skipped
@@ -60,12 +60,8 @@ module UpdateRepo
60
60
  # @return [void]
61
61
  def check_params
62
62
  return unless true_cmd(:dump)
63
- # if true_cmd(:import)
64
63
  Trollop.die 'You cannot use --dump AND --import'.red if true_cmd(:import)
65
- # end
66
- # if true_cmd(:dump_remote)
67
64
  Trollop.die 'You cannot use --dump AND --dump-remote'.red if true_cmd(:dump_remote)
68
- # end
69
65
  end
70
66
  # rubocop:enable Metrics/LineLength
71
67
 
@@ -0,0 +1,101 @@
1
+ require 'update_repo/version'
2
+ require 'update_repo/helpers'
3
+
4
+ module UpdateRepo
5
+ # Class : ConsoleOutput.
6
+ # This class has functions to print header, footer and metrics.
7
+ class ConsoleOutput
8
+ include Helpers
9
+
10
+ # Constructor for the ConsoleOutput class.
11
+ # @param logger [class] Pointer to the Logger class
12
+ # @param metrics [hash] Hash of metrics and their values
13
+ # @param config [class] Pointer to the Confoog class
14
+ # @return [void]
15
+ # @example
16
+ # console = ConsoleOutput.new(@log)
17
+ def initialize(logger, metrics, config)
18
+ @summary = { processed: 'green', updated: 'cyan', skipped: 'yellow',
19
+ failed: 'red' }
20
+ @metrics = metrics
21
+ @log = logger
22
+ @config = config.getconfig
23
+ end
24
+
25
+ # Display a simple header to the console
26
+ # @example
27
+ # show_header
28
+ # @return [void]
29
+ # @param [none]
30
+ def show_header
31
+ # print an informative header before starting
32
+ print_log "\nGit Repo update utility (v", VERSION, ')',
33
+ " \u00A9 Grant Ramsay <seapagan@gmail.com>\n"
34
+ print_log "Using Configuration from '#{@config.config_path}'\n"
35
+ # list out the locations that will be searched
36
+ list_locations
37
+ # list any exceptions that we have from the config file
38
+ list_exceptions
39
+ # save the start time for later display in the footer...
40
+ @metrics[:start_time] = Time.now
41
+ print_log "\n" # blank line before processing starts
42
+ end
43
+
44
+ # print out a brief footer. This will be expanded later.
45
+ # @return [void]
46
+ # @param [none]
47
+ def show_footer
48
+ duration = Time.now - @metrics[:start_time]
49
+ print_log "\nUpdates completed in ", show_time(duration).cyan
50
+ print_metrics
51
+ print_log " \n\n"
52
+ # close the log file now as we are done, just to be sure ...
53
+ @log.close
54
+ end
55
+
56
+ # Print end-of-run metrics to console / log
57
+ # @return [void]
58
+ # @param [none]
59
+ def print_metrics
60
+ @summary.each do |metric, color|
61
+ metric_value = @metrics[metric]
62
+ output = "#{metric_value} #{metric.capitalize}"
63
+ print_log ' | ', output.send(color.to_sym) unless metric_value.zero?
64
+ end
65
+ print_log ' |'
66
+ list_failures unless @metrics[:failed_list].empty?
67
+ end
68
+
69
+ # List any repositories that failed their update, and the error.
70
+ # @param [none]
71
+ # @return [void]
72
+ def list_failures
73
+ print_log "\n\n!! Note : The following repositories ",
74
+ 'FAILED'.red.underline, ' during this run :'
75
+ @metrics[:failed_list].each do |failed|
76
+ print_log "\n [", 'x'.red, "] #{failed[:loc]}"
77
+ print_log "\n -> ", "\"#{failed[:line].chomp}\"".red
78
+ end
79
+ end
80
+
81
+ # Print a list of any defined expections that will not be updated.
82
+ # @return [void]
83
+ # @param [none]
84
+ def list_exceptions
85
+ exceptions = @config['exceptions']
86
+ return unless exceptions
87
+ print_log "\nExclusions:".underline, ' ',
88
+ exceptions.join(', ').yellow, "\n"
89
+ end
90
+
91
+ # Print a list of all top-level directories that will be searched and any
92
+ # Git repos contained within updated.
93
+ # @return [void]
94
+ def list_locations
95
+ print_log "\nRepo location(s):\n".underline
96
+ @config['location'].each do |loc|
97
+ print_log '-> ', loc.cyan, "\n"
98
+ end
99
+ end
100
+ end
101
+ end
@@ -14,17 +14,6 @@ module Helpers
14
14
  File.join(path_array)
15
15
  end
16
16
 
17
- # this function will simply pass the given string to 'print', and also
18
- # log to file if that is specified.
19
- # @param string [array] Array of strings for print formatting
20
- # @return [void]
21
- def print_log(*string)
22
- # log to screen regardless
23
- print(*string)
24
- # log to file if that has been enabled
25
- @logfile.write(string.join('').gsub(/\e\[(\d+)(;\d+)*m/, '')) if cmd('log')
26
- end
27
-
28
17
  # mark these as private simply so that 'reek' wont flag as utility function.
29
18
  private
30
19
 
@@ -37,4 +26,11 @@ module Helpers
37
26
  time_taken = Time.at(duration).utc
38
27
  time_taken.strftime('%-H hours, %-M Minutes and %-S seconds')
39
28
  end
29
+
30
+ # helper function to call the Logger class output method.
31
+ # @param *string [Array] Array of strings to be passed to the 'print' fn
32
+ # @return [*string] Output of the Logger
33
+ def print_log(*string)
34
+ @log.output(*string)
35
+ end
40
36
  end
@@ -0,0 +1,57 @@
1
+ require 'update_repo/version'
2
+ require 'update_repo/helpers'
3
+
4
+ module UpdateRepo
5
+ # Class : Logger.
6
+ # This class encapsulates printing to screen and logging to file if requried.
7
+ class Logger
8
+ include Helpers
9
+
10
+ # Constructor for the Logger class.
11
+ # @param enabled [boolean] True if we log to file
12
+ # @param timestamp [boolean] True if we timestamp the filename
13
+ # @return [void]
14
+ # @example
15
+ # log = Logger.new(true, false)
16
+ def initialize(enabled, timestamp)
17
+ @settings = { enabled: enabled, timestamp: timestamp }
18
+ # don't prepare a logfile unless it's been requested.
19
+ return unless @settings[:enabled]
20
+ # generate a filename depending on 'timestamp' setting.
21
+ filename = generate_filename
22
+ # open the logfile and set sync mode.
23
+ @logfile = File.open(filename, 'w')
24
+ @logfile.sync = true
25
+ end
26
+
27
+ # generate a filename for the log, with or without a timestamp
28
+ # @param [none]
29
+ # @return [string] Filename for the logfile.
30
+ def generate_filename
31
+ if @settings[:timestamp]
32
+ 'updaterepo-' + Time.new.strftime('%y%m%d-%H%M%S') + '.log'
33
+ else
34
+ 'updaterepo.log'
35
+ end
36
+ end
37
+
38
+ # this function will simply pass the given string to 'print', and also
39
+ # log to file if that is specified.
40
+ # @param string [array] Array of strings for print formatting
41
+ # @return [void]
42
+ def output(*string)
43
+ # log to screen regardless
44
+ print(*string)
45
+ # log to file if that has been enabled
46
+ return unless @settings[:enabled]
47
+ @logfile.write(string.join('').gsub(/\e\[(\d+)(;\d+)*m/, ''))
48
+ end
49
+
50
+ # close the logfile, if it exists
51
+ # @param [none]
52
+ # @return [void]
53
+ def close
54
+ @logfile.close if @logfile
55
+ end
56
+ end
57
+ end
@@ -1,4 +1,4 @@
1
1
  module UpdateRepo
2
2
  # constant, current version of this Gem
3
- VERSION = '0.8.2'.freeze
3
+ VERSION = '0.8.3'.freeze
4
4
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: update_repo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.2
4
+ version: 0.8.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Grant Ramsay
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-10-08 00:00:00.000000000 Z
11
+ date: 2016-10-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -286,7 +286,9 @@ files:
286
286
  - exe/update_repo
287
287
  - lib/update_repo.rb
288
288
  - lib/update_repo/cmd_config.rb
289
+ - lib/update_repo/console_output.rb
289
290
  - lib/update_repo/helpers.rb
291
+ - lib/update_repo/logger.rb
290
292
  - lib/update_repo/version.rb
291
293
  - update_repo.gemspec
292
294
  homepage: http://updaterepo.seapagan.net