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 +4 -4
- data/Gemfile.lock +1 -1
- data/lib/mergetrain_check.rb +6 -6
- data/lib/mergetrain_check/args_parser.rb +3 -0
- data/lib/mergetrain_check/checker.rb +1 -1
- data/lib/mergetrain_check/config.rb +16 -6
- data/lib/mergetrain_check/error.rb +6 -0
- data/lib/mergetrain_check/formatter.rb +29 -1
- data/lib/mergetrain_check/version.rb +1 -1
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0154e482170ce0904d20d1f45010665807562bc8842064b4b57a024dd749d844
|
4
|
+
data.tar.gz: 73559f786d2d546e3b30f2511392735a8b889df9bcfa4b72f7a0296022a6c6a3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 11b7133b1c0d2940b3298f0324cb0cfd2fe0cc33ae791e327e3ad0ee9b38697ef2fee8999953ee367a564ec0eae1feb15f79499b6ca1c96f3d4ef3baf5f9d72f
|
7
|
+
data.tar.gz: b0a8b9d889a99a8509f561ede8bbd26b3567230d0278df9a14764d3d2abb3f3a65c68b46faabfa9ec01a959e8cc921db67a6cee36d405a12dc26065a6bf91aba
|
data/Gemfile.lock
CHANGED
data/lib/mergetrain_check.rb
CHANGED
@@ -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
|
-
|
8
|
-
|
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
|
-
|
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
|
@@ -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 <
|
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
|
-
|
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
|
|
@@ -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
|
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
|
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
|