gitlab-mergetrain-checker 1.0.2 → 1.1.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
  SHA256:
3
- metadata.gz: 742447228cfb1891bc009afa8757e9796ec3d258120846fbaf869e5593bcb25c
4
- data.tar.gz: 217203c1a493cb7b3bfe39b4ae808a793d9161cfa683ec92d4b658ea74108036
3
+ metadata.gz: 0154e482170ce0904d20d1f45010665807562bc8842064b4b57a024dd749d844
4
+ data.tar.gz: 73559f786d2d546e3b30f2511392735a8b889df9bcfa4b72f7a0296022a6c6a3
5
5
  SHA512:
6
- metadata.gz: e28ba1f142e3ca796df90ddca5ff51d089240231b70fe8ec4080c47d29ed58ca9e7505e113ae83ac6cd45e2974e82c9e8e6c0ee4ee430196c5900871f7e13b21
7
- data.tar.gz: ef8a6c888aa7a027e2ea7169bcf5dcedf412dc02832c11a014f82cba5dac23f459de60c217c9b504f2cffd96961c4c168185913936057269df8c5cb690b5fefc
6
+ metadata.gz: 11b7133b1c0d2940b3298f0324cb0cfd2fe0cc33ae791e327e3ad0ee9b38697ef2fee8999953ee367a564ec0eae1feb15f79499b6ca1c96f3d4ef3baf5f9d72f
7
+ data.tar.gz: b0a8b9d889a99a8509f561ede8bbd26b3567230d0278df9a14764d3d2abb3f3a65c68b46faabfa9ec01a959e8cc921db67a6cee36d405a12dc26065a6bf91aba
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- gitlab-mergetrain-checker (1.0.1)
4
+ gitlab-mergetrain-checker (1.1.0)
5
5
  ruby-keychain (~> 0.3.2)
6
6
 
7
7
  GEM
@@ -2,13 +2,11 @@ require 'mergetrain_check/config'
2
2
  require 'mergetrain_check/args_parser'
3
3
  require 'mergetrain_check/checker'
4
4
  require 'mergetrain_check/formatter'
5
+ require 'mergetrain_check/error'
5
6
 
6
7
  module MergetrainCheck
7
- class MissingConfigError < StandardError
8
- def initialize(description)
9
- super(description)
10
- end
11
- end
8
+
9
+ class MissingConfigError < CheckerError; end
12
10
 
13
11
  class Command
14
12
  @host = "www.gitlab.com"
@@ -33,7 +31,9 @@ module MergetrainCheck
33
31
  checker = Checker.new(config.gitlab_host, config.auth_token, config.project_id)
34
32
  traintable = checker.check
35
33
 
36
- formatter = TraintableFormatter.new 80, true
34
+ text_length = config.verbose ? 160: 80
35
+ first_name_only = !config.verbose
36
+ formatter = TraintableFormatter.new text_length, first_name_only
37
37
  puts formatter.format traintable
38
38
  config.save!
39
39
  end
@@ -13,6 +13,9 @@ module MergetrainCheck
13
13
  opts.on("-n", "--host GITLAB-HOSTNAME", "Specify the Gitlab installation host (in case it's not gitlab.com)") do |host|
14
14
  options[:host] = host
15
15
  end
16
+ opts.on("-v", "--verbose", "Verbose output (larger table)") do |verbose|
17
+ options[:verbose] = verbose
18
+ end
16
19
  opts.on("-h", "--help", "Prints this help") do
17
20
  puts opts
18
21
  return nil
@@ -7,7 +7,7 @@ module MergetrainCheck
7
7
  @host = host
8
8
  @token = token
9
9
  @id = id
10
- @uri = URI("https://#{host}/api/v4/projects/#{id}/merge_trains")
10
+ @uri = URI("https://#{host}/api/v4/projects/#{id}/merge_trains?per_page=100")
11
11
  end
12
12
 
13
13
  def check
@@ -1,6 +1,7 @@
1
1
  require 'yaml'
2
2
  require 'fileutils'
3
3
  require 'keychain'
4
+ require 'mergetrain_check/error'
4
5
 
5
6
  module MergetrainCheck
6
7
  class AuthTokenStorage
@@ -26,17 +27,21 @@ module MergetrainCheck
26
27
 
27
28
  DEFAULT_CONFIG_FILE = File.expand_path('~/.mergetraincheck')
28
29
 
29
- class FileNotFoundError < StandardError
30
- def initialize(description)
31
- super(description)
32
- end
33
- end
30
+ class FileNotFoundError < CheckerError; end
34
31
 
35
32
  class Config
36
33
  def gitlab_host
37
34
  @config[:host] || "www.gitlab.com"
38
35
  end
39
36
 
37
+ def verbose
38
+ @config[:verbose]
39
+ end
40
+
41
+ def verbose=(value)
42
+ @confing[:verbose] = value
43
+ end
44
+
40
45
  def gitlab_host=(value)
41
46
  @config[:host] = value
42
47
  @tokenStorage = AuthTokenStorage.new(value)
@@ -75,9 +80,14 @@ module MergetrainCheck
75
80
  end
76
81
 
77
82
  def save!(file = DEFAULT_CONFIG_FILE)
78
- File.open(file, 'w') { |f| f.write(@config.to_yaml) }
83
+ File.open(file, 'w') { |f| f.write(config_to_persist.to_yaml) }
79
84
  @tokenStorage.save!
80
85
  end
86
+
87
+ private
88
+ def config_to_persist
89
+ @config.reject { |k,v| ![:project_id, :host].include?(k) }
90
+ end
81
91
  end
82
92
  end
83
93
 
@@ -0,0 +1,6 @@
1
+ class CheckerError < StandardError
2
+ def initialize(description)
3
+ super(description)
4
+ end
5
+ end
6
+
@@ -1,3 +1,5 @@
1
+ require 'date'
2
+
1
3
  module MergetrainCheck
2
4
  class TraintableFormatter
3
5
  def initialize(max_length, firstname_only)
@@ -6,9 +8,15 @@ module MergetrainCheck
6
8
  end
7
9
 
8
10
  def format(body)
9
- values = [['St', 'MR', 'Pipe ID', 'User', 'Title']]
11
+ values = [['St', 'Waiting', 'Running', 'MR', 'Pipe ID', 'User', 'Title']]
10
12
  body.each do |carriage|
13
+ begin_time = date_from_string carriage['created_at']
14
+ pipeline_begin_time = date_from_string carriage['pipeline']['created_at']
15
+ end_time = carriage['merged_at'].nil? ? DateTime.now : date_from_string(carriage['merged_at'])
16
+
11
17
  values << [pipeline_status(carriage['status']),
18
+ pretty_date_difference(begin_time, pipeline_begin_time),
19
+ pretty_date_difference(pipeline_begin_time, end_time),
12
20
  carriage['merge_request']['iid'],
13
21
  carriage['pipeline']['id'],
14
22
  @firstname_only ? carriage['user']['name'].split.first : carriage['user']['name'],
@@ -29,7 +37,13 @@ module MergetrainCheck
29
37
  "#{string[0...len]}..."
30
38
  end
31
39
 
40
+ def date_from_string(datestring)
41
+ DateTime.parse(datestring, '%Q')
42
+ end
32
43
 
44
+ def pretty_date_difference(from, to)
45
+ (to.to_time - from.to_time).duration
46
+ end
33
47
  end
34
48
  end
35
49
 
@@ -56,5 +70,19 @@ class Array
56
70
  def count_emojis(string)
57
71
  string.scan(/[\u{1F300}-\u{1F5FF}|\u{1F1E6}-\u{1F1FF}|\u{2700}-\u{27BF}|\u{1F900}-\u{1F9FF}|\u{1F600}-\u{1F64F}|\u{1F680}-\u{1F6FF}|\u{2600}-\u{26FF}]/).length
58
72
  end
73
+ end
74
+
75
+ class Numeric
76
+ def duration
77
+ rest, secs = self.divmod( 60 ) # self is the time difference t2 - t1
78
+ rest, mins = rest.divmod( 60 )
79
+ days, hours = rest.divmod( 24 )
59
80
 
81
+ result = []
82
+ result << "#{days}D " if days > 0
83
+ result << "#{hours}h" if hours > 0
84
+ result << "#{mins}m" if mins > 0
85
+ result << "#{secs.to_i}s" if secs.to_i > 0
86
+ return result.join(' ')
87
+ end
60
88
  end
@@ -1,3 +1,3 @@
1
1
  module MergetrainCheck
2
- VERSION = "1.0.2"
2
+ VERSION = "1.1.0"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gitlab-mergetrain-checker
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Fabio Gallonetto
@@ -42,6 +42,7 @@ files:
42
42
  - lib/mergetrain_check/args_parser.rb
43
43
  - lib/mergetrain_check/checker.rb
44
44
  - lib/mergetrain_check/config.rb
45
+ - lib/mergetrain_check/error.rb
45
46
  - lib/mergetrain_check/formatter.rb
46
47
  - lib/mergetrain_check/version.rb
47
48
  - mergetrain_check.gemspec