autobuild 1.6.5 → 1.7.0.rc1
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.
- data/Rakefile +2 -2
- data/lib/autobuild/configurable.rb +1 -1
- data/lib/autobuild/environment.rb +156 -23
- data/lib/autobuild/import/archive.rb +62 -3
- data/lib/autobuild/importer.rb +46 -17
- data/lib/autobuild/package.rb +69 -7
- data/lib/autobuild/packages/autotools.rb +10 -6
- data/lib/autobuild/packages/cmake.rb +28 -5
- data/lib/autobuild/packages/genom.rb +4 -4
- data/lib/autobuild/packages/import.rb +1 -1
- data/lib/autobuild/packages/orogen.rb +3 -3
- data/lib/autobuild/parallel.rb +79 -34
- data/lib/autobuild/reporting.rb +95 -18
- data/lib/autobuild/subcommand.rb +25 -2
- data/lib/autobuild/version.rb +1 -1
- data/test/test_reporting.rb +55 -0
- metadata +19 -17
data/lib/autobuild/reporting.rb
CHANGED
@@ -37,15 +37,24 @@ module Autobuild
|
|
37
37
|
def self.message(*args)
|
38
38
|
return if silent?
|
39
39
|
display_lock.synchronize do
|
40
|
-
|
41
|
-
|
42
|
-
|
40
|
+
display_message(*args)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def self.display_message(*args)
|
45
|
+
msg =
|
46
|
+
if args.empty? then ""
|
47
|
+
else "#{color(*args)}"
|
43
48
|
end
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
49
|
+
|
50
|
+
size =
|
51
|
+
if @last_progress_msg then @last_progress_msg.size
|
52
|
+
else 0
|
48
53
|
end
|
54
|
+
|
55
|
+
puts "\r#{msg}#{" " * [size - msg.size, 0].max}"
|
56
|
+
if @last_progress_msg
|
57
|
+
print "#{@last_progress_msg}"
|
49
58
|
end
|
50
59
|
end
|
51
60
|
|
@@ -84,8 +93,10 @@ module Autobuild
|
|
84
93
|
if options[:done_message]
|
85
94
|
progress(key, *options[:done_message])
|
86
95
|
end
|
87
|
-
|
88
|
-
|
96
|
+
progress_done(key, true)
|
97
|
+
rescue Exception => e
|
98
|
+
progress_done(key, false)
|
99
|
+
raise
|
89
100
|
end
|
90
101
|
end
|
91
102
|
end
|
@@ -106,35 +117,101 @@ module Autobuild
|
|
106
117
|
display_progress
|
107
118
|
end
|
108
119
|
end
|
109
|
-
def self.progress_done(key)
|
120
|
+
def self.progress_done(key, display_last = true)
|
110
121
|
found = false
|
111
122
|
display_lock.synchronize do
|
123
|
+
last_msg = nil
|
112
124
|
progress_messages.delete_if do |msg_key, msg|
|
113
125
|
if msg_key == key
|
114
126
|
found = true
|
127
|
+
last_msg = msg
|
115
128
|
end
|
116
129
|
end
|
117
130
|
if found && @last_progress_msg
|
118
|
-
|
131
|
+
display_message(" #{last_msg}") if display_last && last_msg
|
119
132
|
display_progress
|
120
133
|
end
|
121
134
|
end
|
122
135
|
found
|
123
136
|
end
|
124
137
|
|
125
|
-
def self.
|
126
|
-
msg =
|
127
|
-
|
128
|
-
|
129
|
-
|
138
|
+
def self.find_common_prefix(msg, other_msg)
|
139
|
+
msg = msg.split(" ")
|
140
|
+
other_msg = other_msg.split(" ")
|
141
|
+
msg.each_with_index do |token, idx|
|
142
|
+
if other_msg[idx] != token
|
143
|
+
prefix = msg[0..(idx - 1)].join(" ")
|
144
|
+
if !prefix.empty?
|
145
|
+
prefix << " "
|
146
|
+
end
|
147
|
+
return prefix
|
130
148
|
end
|
131
149
|
end
|
150
|
+
return msg
|
151
|
+
end
|
152
|
+
|
153
|
+
def self.format_progress_message(messages)
|
154
|
+
messages = messages.sort
|
155
|
+
|
156
|
+
groups = Array.new
|
157
|
+
groups << ["", (0...messages.size)]
|
158
|
+
messages.each_with_index do |msg, idx|
|
159
|
+
prefix, grouping = nil, false
|
160
|
+
messages[(idx + 1)..-1].each_with_index do |other_msg, other_idx|
|
161
|
+
other_idx += idx + 1
|
162
|
+
prefix ||= find_common_prefix(msg, other_msg)
|
163
|
+
break if !other_msg.start_with?(prefix)
|
164
|
+
|
165
|
+
if grouping
|
166
|
+
break if prefix != groups.last[0]
|
167
|
+
groups.last[1] << other_idx
|
168
|
+
else
|
169
|
+
current_prefix, current_group = groups.last
|
170
|
+
if prefix.size > current_prefix.size # create a new group from there
|
171
|
+
groups.last[1] = (current_group.first..[idx-1,current_group.last].min)
|
172
|
+
groups << [prefix, [idx, other_idx]]
|
173
|
+
grouping = true
|
174
|
+
else break
|
175
|
+
end
|
176
|
+
end
|
177
|
+
end
|
178
|
+
end
|
179
|
+
if groups.last.last.last < messages.size
|
180
|
+
groups << ["", (groups.last.last.last + 1)...(messages.size)]
|
181
|
+
end
|
182
|
+
|
183
|
+
result = []
|
184
|
+
groups.each do |prefix, indexes|
|
185
|
+
if prefix.empty?
|
186
|
+
indexes.each do |index|
|
187
|
+
result << messages[index]
|
188
|
+
end
|
189
|
+
else
|
190
|
+
grouped_messages = []
|
191
|
+
indexes.each do |index|
|
192
|
+
grouped_messages << messages[index][(prefix.size)..-1]
|
193
|
+
end
|
194
|
+
if !grouped_messages.empty?
|
195
|
+
result << "#{prefix}#{grouped_messages.join(", ")}"
|
196
|
+
end
|
197
|
+
end
|
198
|
+
end
|
199
|
+
result.join(" | ")
|
200
|
+
end
|
201
|
+
|
202
|
+
def self.display_progress
|
203
|
+
msg = format_progress_message(progress_messages.map(&:last))
|
204
|
+
last_msg_length =
|
205
|
+
if @last_progress_msg then @last_progress_msg.length
|
206
|
+
else 0
|
207
|
+
end
|
132
208
|
|
133
209
|
if msg.empty?
|
134
|
-
print "\r" if !silent?
|
210
|
+
print "\r" + " " * last_msg_length if !silent?
|
135
211
|
@last_progress_msg = nil
|
136
212
|
else
|
137
|
-
|
213
|
+
msg = " #{msg}"
|
214
|
+
print "\r#{msg}#{" " * [last_msg_length - msg.length, 0].max}" if !silent?
|
138
215
|
@last_progress_msg = msg
|
139
216
|
end
|
140
217
|
end
|
data/lib/autobuild/subcommand.rb
CHANGED
@@ -70,6 +70,11 @@ module Autobuild
|
|
70
70
|
if @processor_count
|
71
71
|
return @processor_count
|
72
72
|
end
|
73
|
+
|
74
|
+
#No parralel build on windows yet, since CPU detection is not easy do able
|
75
|
+
if(RbConfig::CONFIG["host_os"] =~%r!(msdos|mswin|djgpp|mingw|[Ww]indows)!)
|
76
|
+
return 1
|
77
|
+
end
|
73
78
|
|
74
79
|
if File.file?('/proc/cpuinfo')
|
75
80
|
cpuinfo = File.readlines('/proc/cpuinfo')
|
@@ -163,7 +168,7 @@ module Autobuild::Subprocess
|
|
163
168
|
options[:working_directory] ||= target.working_directory
|
164
169
|
end
|
165
170
|
|
166
|
-
|
171
|
+
logname = File.join(logdir, "#{target_name.gsub(/[:]/,'_')}-#{phase.to_s.gsub(/[:]/,'_')}.log")
|
167
172
|
if !File.directory?(File.dirname(logname))
|
168
173
|
FileUtils.mkdir_p File.dirname(logname)
|
169
174
|
end
|
@@ -206,7 +211,23 @@ module Autobuild::Subprocess
|
|
206
211
|
end
|
207
212
|
cread, cwrite = IO.pipe # to control that exec goes well
|
208
213
|
|
209
|
-
|
214
|
+
if Autoproj::OSDependencies.operating_system[0].include?("windows")
|
215
|
+
olddir = Dir.pwd
|
216
|
+
if options[:working_directory] && (options[:working_directory] != Dir.pwd)
|
217
|
+
Dir.chdir(options[:working_directory])
|
218
|
+
end
|
219
|
+
system(*command)
|
220
|
+
result=$?.success?
|
221
|
+
if(!result)
|
222
|
+
error = Autobuild::SubcommandFailed.new(target, command.join(" "), logname, "Systemcall")
|
223
|
+
error.phase = phase
|
224
|
+
raise error
|
225
|
+
end
|
226
|
+
Dir.chdir(olddir)
|
227
|
+
return
|
228
|
+
end
|
229
|
+
|
230
|
+
cwrite.fcntl(Fcntl::F_SETFD, Fcntl::FD_CLOEXEC)
|
210
231
|
|
211
232
|
pid = fork do
|
212
233
|
begin
|
@@ -324,3 +345,5 @@ module Autobuild::Subprocess
|
|
324
345
|
|
325
346
|
end
|
326
347
|
|
348
|
+
|
349
|
+
|
data/lib/autobuild/version.rb
CHANGED
@@ -0,0 +1,55 @@
|
|
1
|
+
$LOAD_PATH.unshift File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib'))
|
2
|
+
$LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__))
|
3
|
+
require 'test/unit'
|
4
|
+
require 'tools'
|
5
|
+
|
6
|
+
require 'autobuild'
|
7
|
+
require 'tmpdir'
|
8
|
+
require 'fileutils'
|
9
|
+
require 'flexmock/test_unit'
|
10
|
+
|
11
|
+
class TC_Reporting < Test::Unit::TestCase
|
12
|
+
def teardown
|
13
|
+
Autobuild::Package.clear
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_format_progress_message_does_not_touch_messages_without_prefix
|
17
|
+
assert_equal "a | b | c",
|
18
|
+
Autobuild.format_progress_message(%w{a b c})
|
19
|
+
end
|
20
|
+
def test_format_progress_message_find_common_prefix_at_beginning
|
21
|
+
assert_equal "X a, b | c",
|
22
|
+
Autobuild.format_progress_message(["X a", "X b", "c"])
|
23
|
+
end
|
24
|
+
def test_format_progress_message_picks_up_bigger_prefix
|
25
|
+
assert_equal "X a | X y b, c | d",
|
26
|
+
Autobuild.format_progress_message(["X a", "X y b", "X y c", "d"])
|
27
|
+
end
|
28
|
+
def test_format_progress_message_prefix_comparison_uses_string_length
|
29
|
+
assert_equal "X mmmmmmmmmm a, b | X my x c | d",
|
30
|
+
Autobuild.format_progress_message(["X mmmmmmmmmm a", "X mmmmmmmmmm b", "X my x c", "d"])
|
31
|
+
end
|
32
|
+
def test_package_message_with_marker_inside_token
|
33
|
+
package = Autobuild::Package.new('pkg')
|
34
|
+
assert_equal 'patching pkg: unapplying', package.process_formatting_string('patching %s: unapplying')
|
35
|
+
end
|
36
|
+
def test_package_message_with_marker_at_beginning
|
37
|
+
package = Autobuild::Package.new('pkg')
|
38
|
+
assert_equal 'pkg unapplying', package.process_formatting_string('%s unapplying')
|
39
|
+
end
|
40
|
+
def test_package_message_with_marker_at_end
|
41
|
+
package = Autobuild::Package.new('pkg')
|
42
|
+
assert_equal 'patching pkg', package.process_formatting_string('patching %s')
|
43
|
+
end
|
44
|
+
def test_package_message_without_formatting
|
45
|
+
flexmock(Autobuild).should_receive('color').never
|
46
|
+
package = Autobuild::Package.new('pkg')
|
47
|
+
assert_equal 'patching a package pkg', package.process_formatting_string('patching a package %s')
|
48
|
+
end
|
49
|
+
def test_package_message_with_formatting
|
50
|
+
flexmock(Autobuild).should_receive('color').with('patching a package', :bold, :red).and_return('|patching a package|').once
|
51
|
+
package = Autobuild::Package.new('pkg')
|
52
|
+
assert_equal '|patching a package| pkg', package.process_formatting_string('patching a package %s', :bold, :red)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
metadata
CHANGED
@@ -1,41 +1,41 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: autobuild
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
5
|
-
prerelease:
|
4
|
+
version: 1.7.0.rc1
|
5
|
+
prerelease: 6
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Sylvain Joyeux
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-11-
|
12
|
+
date: 2012-11-26 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
16
|
-
requirement: &
|
16
|
+
requirement: &10716440 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version: 0.
|
21
|
+
version: 0.7.0
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *10716440
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: utilrb
|
27
|
-
requirement: &
|
27
|
+
requirement: &10716000 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version: 1.
|
32
|
+
version: 1.3.3
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *10716000
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: highline
|
38
|
-
requirement: &
|
38
|
+
requirement: &10715560 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *10715560
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: rdoc
|
49
|
-
requirement: &
|
49
|
+
requirement: &10715120 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: '3.10'
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *10715120
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: hoe
|
60
|
-
requirement: &
|
60
|
+
requirement: &10714680 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ~>
|
@@ -65,7 +65,7 @@ dependencies:
|
|
65
65
|
version: '3.3'
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *10714680
|
69
69
|
description: Collection of classes to handle build systems (CMake, autotools, ...)
|
70
70
|
and import mechanisms (tarballs, CVS, SVN, git, ...). It also offers a Rake integration
|
71
71
|
to import and build such software packages. It is the backbone of the autoproj (http://rock-robotics.org/autoproj)
|
@@ -121,6 +121,7 @@ files:
|
|
121
121
|
- test/test_import_tar.rb
|
122
122
|
- test/test_subcommand.rb
|
123
123
|
- test/tools.rb
|
124
|
+
- test/test_reporting.rb
|
124
125
|
- .gemtest
|
125
126
|
homepage: http://rock-robotics.org/stable/documentation/autoproj
|
126
127
|
licenses: []
|
@@ -139,9 +140,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
139
140
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
140
141
|
none: false
|
141
142
|
requirements:
|
142
|
-
- - ! '
|
143
|
+
- - ! '>'
|
143
144
|
- !ruby/object:Gem::Version
|
144
|
-
version:
|
145
|
+
version: 1.3.1
|
145
146
|
requirements: []
|
146
147
|
rubyforge_project: autobuild
|
147
148
|
rubygems_version: 1.8.11
|
@@ -150,6 +151,7 @@ specification_version: 3
|
|
150
151
|
summary: Library to handle build systems and import mechanisms
|
151
152
|
test_files:
|
152
153
|
- test/test_import_cvs.rb
|
154
|
+
- test/test_reporting.rb
|
153
155
|
- test/test_subcommand.rb
|
154
156
|
- test/test_import_svn.rb
|
155
157
|
- test/test_import_tar.rb
|