autobuild 1.20.0 → 1.21.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/.travis.yml +2 -0
- data/autobuild.gemspec +6 -5
- data/lib/autobuild/progress_display.rb +64 -37
- data/lib/autobuild/reporting.rb +4 -0
- data/lib/autobuild/test_utility.rb +2 -1
- data/lib/autobuild/utility.rb +21 -3
- data/lib/autobuild/version.rb +1 -1
- metadata +25 -24
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ab39a53575bd73cfcf5468577e0a331dcb0ffac4cd3a44a56d6485b0185d8d9c
|
4
|
+
data.tar.gz: 5612683a6a53e89787892fc54bb0f1b2e7f98251b1204d1986b115afd57bd536
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 278baf14e748956b8f45e65e13b5156b875559d36ac2a973afa0a82de1840e7faa02d6f4bb5179c2d4c811048e69673d916c70d757b625d7586a4bc192653893
|
7
|
+
data.tar.gz: 65ad33b5793db30fd126101e1bb36e933265cc0727845c97e866295e4248b3de9b5f0b93e07dc6046adf4f791085687fb568c633e426f6b648d8991bd0ee22f2
|
data/.travis.yml
CHANGED
data/autobuild.gemspec
CHANGED
@@ -23,11 +23,12 @@ Gem::Specification.new do |s|
|
|
23
23
|
s.files = `git ls-files -z`.split("\x0")
|
24
24
|
.reject { |f| f.match(%r{^(test|spec|features)/}) }
|
25
25
|
|
26
|
-
s.add_runtime_dependency
|
27
|
-
s.add_runtime_dependency "
|
28
|
-
s.add_runtime_dependency
|
29
|
-
s.add_runtime_dependency 'tty-
|
30
|
-
s.add_runtime_dependency 'tty-
|
26
|
+
s.add_runtime_dependency "concurrent-ruby", "~> 1.1"
|
27
|
+
s.add_runtime_dependency "pastel", "~> 0.7.0"
|
28
|
+
s.add_runtime_dependency "rake", "~> 13.0"
|
29
|
+
s.add_runtime_dependency 'tty-cursor', '~> 0.7.0'
|
30
|
+
s.add_runtime_dependency 'tty-prompt', '~> 0.21.0'
|
31
|
+
s.add_runtime_dependency 'tty-screen', '~> 0.8.0'
|
31
32
|
s.add_runtime_dependency "utilrb", "~> 3.0", ">= 3.0"
|
32
33
|
s.add_development_dependency "fakefs"
|
33
34
|
s.add_development_dependency "flexmock", '~> 2.0', ">= 2.0.0"
|
@@ -1,3 +1,6 @@
|
|
1
|
+
require "concurrent/atomic/atomic_boolean"
|
2
|
+
require "concurrent/array"
|
3
|
+
|
1
4
|
module Autobuild
|
2
5
|
# Management of the progress display
|
3
6
|
class ProgressDisplay
|
@@ -5,7 +8,7 @@ def initialize(io, color: ::Autobuild.method(:color))
|
|
5
8
|
@io = io
|
6
9
|
@cursor = TTY::Cursor
|
7
10
|
@last_formatted_progress = []
|
8
|
-
@progress_messages =
|
11
|
+
@progress_messages = Concurrent::Array.new
|
9
12
|
|
10
13
|
@silent = false
|
11
14
|
@color = color
|
@@ -14,6 +17,15 @@ def initialize(io, color: ::Autobuild.method(:color))
|
|
14
17
|
@next_progress_display = Time.at(0)
|
15
18
|
@progress_mode = :single_line
|
16
19
|
@progress_period = 0.1
|
20
|
+
|
21
|
+
@message_queue = Queue.new
|
22
|
+
@forced_progress_display = Concurrent::AtomicBoolean.new(false)
|
23
|
+
end
|
24
|
+
|
25
|
+
def synchronize(&block)
|
26
|
+
result = @display_lock.synchronize(&block)
|
27
|
+
refresh_display
|
28
|
+
result
|
17
29
|
end
|
18
30
|
|
19
31
|
# Set the minimum time between two progress messages
|
@@ -86,17 +98,9 @@ def message(message, *args, io: @io, force: false)
|
|
86
98
|
return if silent? && !force
|
87
99
|
|
88
100
|
io = args.pop if args.last.respond_to?(:to_io)
|
101
|
+
@message_queue << [message, args, io]
|
89
102
|
|
90
|
-
|
91
|
-
if @progress_mode == :single_line
|
92
|
-
io.print @cursor.clear_screen_down
|
93
|
-
end
|
94
|
-
io.puts @color.call(message, *args)
|
95
|
-
|
96
|
-
io.flush if @io != io
|
97
|
-
display_progress
|
98
|
-
@io.flush
|
99
|
-
end
|
103
|
+
refresh_display
|
100
104
|
end
|
101
105
|
|
102
106
|
def progress_start(key, *args, done_message: nil)
|
@@ -105,13 +109,13 @@ def progress_start(key, *args, done_message: nil)
|
|
105
109
|
formatted_message = @color.call(*args)
|
106
110
|
@progress_messages << [key, formatted_message]
|
107
111
|
if progress_enabled?
|
108
|
-
@
|
109
|
-
display_progress(consider_period: false)
|
110
|
-
end
|
112
|
+
@forced_progress_display.make_true
|
111
113
|
else
|
112
114
|
message " #{formatted_message}"
|
113
115
|
end
|
114
116
|
|
117
|
+
refresh_display
|
118
|
+
|
115
119
|
if block_given?
|
116
120
|
begin
|
117
121
|
result = yield
|
@@ -125,46 +129,69 @@ def progress_start(key, *args, done_message: nil)
|
|
125
129
|
end
|
126
130
|
|
127
131
|
def progress(key, *args)
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
[msg_key, msg]
|
136
|
-
end
|
132
|
+
found = false
|
133
|
+
@progress_messages.map! do |msg_key, msg|
|
134
|
+
if msg_key == key
|
135
|
+
found = true
|
136
|
+
[msg_key, @color.call(*args)]
|
137
|
+
else
|
138
|
+
[msg_key, msg]
|
137
139
|
end
|
138
|
-
@progress_messages << [key, @color.call(*args)] unless found
|
139
|
-
display_progress
|
140
140
|
end
|
141
|
+
@progress_messages << [key, @color.call(*args)] unless found
|
142
|
+
|
143
|
+
refresh_display
|
141
144
|
end
|
142
145
|
|
143
146
|
def progress_done(key, display_last = true, message: nil)
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
if
|
148
|
-
|
149
|
-
true
|
150
|
-
end
|
147
|
+
current_size = @progress_messages.size
|
148
|
+
@progress_messages.delete_if do |msg_key, msg|
|
149
|
+
if msg_key == key
|
150
|
+
message = msg if display_last && !message
|
151
|
+
true
|
151
152
|
end
|
152
|
-
current_size != @progress_messages.size
|
153
153
|
end
|
154
|
+
changed = current_size != @progress_messages.size
|
154
155
|
|
155
156
|
if changed
|
156
157
|
if message
|
157
158
|
message(" #{message}")
|
158
|
-
# Note: message
|
159
|
+
# Note: message updates the display already
|
159
160
|
else
|
160
|
-
|
161
|
-
display_progress
|
162
|
-
end
|
161
|
+
refresh_display
|
163
162
|
end
|
164
163
|
true
|
165
164
|
end
|
166
165
|
end
|
167
166
|
|
167
|
+
def refresh_display
|
168
|
+
return unless @display_lock.try_lock
|
169
|
+
|
170
|
+
begin
|
171
|
+
refresh_display_under_lock
|
172
|
+
ensure
|
173
|
+
@display_lock.unlock
|
174
|
+
end
|
175
|
+
end
|
176
|
+
|
177
|
+
def refresh_display_under_lock
|
178
|
+
# Display queued messages
|
179
|
+
until @message_queue.empty?
|
180
|
+
message, args, io = @message_queue.pop
|
181
|
+
if @progress_mode == :single_line
|
182
|
+
io.print @cursor.clear_screen_down
|
183
|
+
end
|
184
|
+
io.puts @color.call(message, *args)
|
185
|
+
|
186
|
+
io.flush if @io != io
|
187
|
+
end
|
188
|
+
|
189
|
+
# And re-display the progress
|
190
|
+
display_progress(consider_period: @forced_progress_display.false?)
|
191
|
+
@forced_progress_display.make_false
|
192
|
+
@io.flush
|
193
|
+
end
|
194
|
+
|
168
195
|
def display_progress(consider_period: true)
|
169
196
|
return unless progress_enabled?
|
170
197
|
return if consider_period && (@next_progress_display > Time.now)
|
data/lib/autobuild/reporting.rb
CHANGED
@@ -47,6 +47,10 @@ def self.progress_display_enabled?
|
|
47
47
|
@display.progress_enabled?
|
48
48
|
end
|
49
49
|
|
50
|
+
def self.progress_display_synchronize(&block)
|
51
|
+
@display.synchronize(&block)
|
52
|
+
end
|
53
|
+
|
50
54
|
# @deprecated use {progress_display_mode=} instead
|
51
55
|
def self.progress_display_enabled=(value)
|
52
56
|
@display.progress_enabled = value
|
@@ -73,7 +73,8 @@ def coverage_source_dir
|
|
73
73
|
def coverage_target_dir
|
74
74
|
if @coverage_target_dir
|
75
75
|
File.expand_path(@coverage_target_dir, package.prefix)
|
76
|
-
|
76
|
+
elsif (target_dir = self.target_dir)
|
77
|
+
File.join(target_dir, 'coverage')
|
77
78
|
end
|
78
79
|
end
|
79
80
|
|
data/lib/autobuild/utility.rb
CHANGED
@@ -30,6 +30,7 @@ def initialize(name, package, install_on_error: false)
|
|
30
30
|
@target_dir = nil
|
31
31
|
@install_on_error = install_on_error
|
32
32
|
|
33
|
+
@no_results = false
|
33
34
|
@invoked = false
|
34
35
|
@success = false
|
35
36
|
@installed = false
|
@@ -58,6 +59,23 @@ def source_dir
|
|
58
59
|
# not install anything
|
59
60
|
attr_writer :target_dir
|
60
61
|
|
62
|
+
# Controls whether this utility generates results or not
|
63
|
+
#
|
64
|
+
# By default, Autobuild assumes that utilities generate report or
|
65
|
+
# artifact files, that are saved in {#target_dir}. Set this flag to
|
66
|
+
# true to disable this behavior, in which case the only report will
|
67
|
+
# be the console output during run
|
68
|
+
#
|
69
|
+
# @see no_results?
|
70
|
+
attr_writer :no_results
|
71
|
+
|
72
|
+
# Whether this utility generates results or not
|
73
|
+
#
|
74
|
+
# @see no_results=
|
75
|
+
def no_results?
|
76
|
+
@no_results
|
77
|
+
end
|
78
|
+
|
61
79
|
# Absolute path to where the utility product files have to be installed.
|
62
80
|
# Returns nil if {target_dir} is not set.
|
63
81
|
#
|
@@ -108,13 +126,13 @@ def call_task_block
|
|
108
126
|
yield if block_given?
|
109
127
|
@success = true
|
110
128
|
rescue StandardError => e
|
111
|
-
install if install_on_error? && !@installed &&
|
129
|
+
install if install_on_error? && !@installed && !no_results?
|
112
130
|
raise
|
113
131
|
end
|
114
132
|
|
115
133
|
# Allow the user to install manually in the task
|
116
134
|
# block
|
117
|
-
install if !@installed &&
|
135
|
+
install if !@installed && !no_results?
|
118
136
|
rescue StandardError => e
|
119
137
|
@success = false
|
120
138
|
|
@@ -138,7 +156,7 @@ def call_task_block
|
|
138
156
|
#
|
139
157
|
# @return [Boolean]
|
140
158
|
def available?
|
141
|
-
@available &&
|
159
|
+
@available && @task && (no_results? || source_dir)
|
142
160
|
end
|
143
161
|
|
144
162
|
# True if this utility should be executed
|
data/lib/autobuild/version.rb
CHANGED
metadata
CHANGED
@@ -1,33 +1,41 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: autobuild
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.21.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sylvain Joyeux
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-07-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: concurrent-ruby
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
20
|
-
- - ">="
|
21
|
-
- !ruby/object:Gem::Version
|
22
|
-
version: 0.7.0
|
19
|
+
version: '1.1'
|
23
20
|
type: :runtime
|
24
21
|
prerelease: false
|
25
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.1'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: pastel
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
26
30
|
requirements:
|
27
31
|
- - "~>"
|
28
32
|
- !ruby/object:Gem::Version
|
29
33
|
version: 0.7.0
|
30
|
-
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
31
39
|
- !ruby/object:Gem::Version
|
32
40
|
version: 0.7.0
|
33
41
|
- !ruby/object:Gem::Dependency
|
@@ -36,62 +44,56 @@ dependencies:
|
|
36
44
|
requirements:
|
37
45
|
- - "~>"
|
38
46
|
- !ruby/object:Gem::Version
|
39
|
-
version: '
|
40
|
-
- - ">="
|
41
|
-
- !ruby/object:Gem::Version
|
42
|
-
version: 12.3.0
|
47
|
+
version: '13.0'
|
43
48
|
type: :runtime
|
44
49
|
prerelease: false
|
45
50
|
version_requirements: !ruby/object:Gem::Requirement
|
46
51
|
requirements:
|
47
52
|
- - "~>"
|
48
53
|
- !ruby/object:Gem::Version
|
49
|
-
version: '
|
50
|
-
- - ">="
|
51
|
-
- !ruby/object:Gem::Version
|
52
|
-
version: 12.3.0
|
54
|
+
version: '13.0'
|
53
55
|
- !ruby/object:Gem::Dependency
|
54
56
|
name: tty-cursor
|
55
57
|
requirement: !ruby/object:Gem::Requirement
|
56
58
|
requirements:
|
57
59
|
- - "~>"
|
58
60
|
- !ruby/object:Gem::Version
|
59
|
-
version: 0.
|
61
|
+
version: 0.7.0
|
60
62
|
type: :runtime
|
61
63
|
prerelease: false
|
62
64
|
version_requirements: !ruby/object:Gem::Requirement
|
63
65
|
requirements:
|
64
66
|
- - "~>"
|
65
67
|
- !ruby/object:Gem::Version
|
66
|
-
version: 0.
|
68
|
+
version: 0.7.0
|
67
69
|
- !ruby/object:Gem::Dependency
|
68
70
|
name: tty-prompt
|
69
71
|
requirement: !ruby/object:Gem::Requirement
|
70
72
|
requirements:
|
71
73
|
- - "~>"
|
72
74
|
- !ruby/object:Gem::Version
|
73
|
-
version: 0.
|
75
|
+
version: 0.21.0
|
74
76
|
type: :runtime
|
75
77
|
prerelease: false
|
76
78
|
version_requirements: !ruby/object:Gem::Requirement
|
77
79
|
requirements:
|
78
80
|
- - "~>"
|
79
81
|
- !ruby/object:Gem::Version
|
80
|
-
version: 0.
|
82
|
+
version: 0.21.0
|
81
83
|
- !ruby/object:Gem::Dependency
|
82
84
|
name: tty-screen
|
83
85
|
requirement: !ruby/object:Gem::Requirement
|
84
86
|
requirements:
|
85
87
|
- - "~>"
|
86
88
|
- !ruby/object:Gem::Version
|
87
|
-
version: 0.
|
89
|
+
version: 0.8.0
|
88
90
|
type: :runtime
|
89
91
|
prerelease: false
|
90
92
|
version_requirements: !ruby/object:Gem::Requirement
|
91
93
|
requirements:
|
92
94
|
- - "~>"
|
93
95
|
- !ruby/object:Gem::Version
|
94
|
-
version: 0.
|
96
|
+
version: 0.8.0
|
95
97
|
- !ruby/object:Gem::Dependency
|
96
98
|
name: utilrb
|
97
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -274,8 +276,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
274
276
|
- !ruby/object:Gem::Version
|
275
277
|
version: '0'
|
276
278
|
requirements: []
|
277
|
-
|
278
|
-
rubygems_version: 2.7.6.2
|
279
|
+
rubygems_version: 3.1.2
|
279
280
|
signing_key:
|
280
281
|
specification_version: 4
|
281
282
|
summary: Library to handle build systems and import mechanisms
|