gitlab-mergetrain-checker 1.0.2 → 1.1.0

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
  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