autoproj 2.0.0.rc37 → 2.0.0.rc38
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 +4 -2
- data/Rakefile +1 -1
- data/bin/autoproj_bootstrap +34 -2
- data/bin/autoproj_bootstrap.in +4 -2
- data/bin/autoproj_install +34 -2
- data/bin/autoproj_install.in +4 -2
- data/lib/autoproj.rb +9 -2
- data/lib/autoproj/autobuild.rb +13 -742
- data/lib/autoproj/autobuild_extensions/archive_importer.rb +44 -0
- data/lib/autoproj/autobuild_extensions/dsl.rb +439 -0
- data/lib/autoproj/autobuild_extensions/git.rb +116 -0
- data/lib/autoproj/autobuild_extensions/package.rb +159 -0
- data/lib/autoproj/autobuild_extensions/svn.rb +11 -0
- data/lib/autoproj/cli/base.rb +17 -18
- data/lib/autoproj/cli/clean.rb +1 -2
- data/lib/autoproj/cli/envsh.rb +1 -2
- data/lib/autoproj/cli/inspection_tool.rb +12 -21
- data/lib/autoproj/cli/locate.rb +130 -73
- data/lib/autoproj/cli/main.rb +31 -5
- data/lib/autoproj/cli/main_plugin.rb +79 -0
- data/lib/autoproj/cli/main_test.rb +19 -5
- data/lib/autoproj/cli/osdeps.rb +1 -2
- data/lib/autoproj/cli/patcher.rb +21 -0
- data/lib/autoproj/cli/query.rb +34 -41
- data/lib/autoproj/cli/show.rb +121 -52
- data/lib/autoproj/cli/status.rb +4 -5
- data/lib/autoproj/cli/tag.rb +1 -1
- data/lib/autoproj/cli/test.rb +7 -6
- data/lib/autoproj/cli/update.rb +8 -22
- data/lib/autoproj/cli/versions.rb +1 -2
- data/lib/autoproj/configuration.rb +1 -1
- data/lib/autoproj/environment.rb +2 -7
- data/lib/autoproj/exceptions.rb +10 -8
- data/lib/autoproj/find_workspace.rb +46 -12
- data/lib/autoproj/installation_manifest.rb +34 -25
- data/lib/autoproj/local_package_set.rb +86 -0
- data/lib/autoproj/manifest.rb +448 -503
- data/lib/autoproj/metapackage.rb +31 -5
- data/lib/autoproj/ops/configuration.rb +46 -45
- data/lib/autoproj/ops/import.rb +150 -60
- data/lib/autoproj/ops/install.rb +25 -1
- data/lib/autoproj/ops/loader.rb +4 -1
- data/lib/autoproj/ops/main_config_switcher.rb +4 -4
- data/lib/autoproj/ops/snapshot.rb +4 -3
- data/lib/autoproj/os_package_installer.rb +105 -46
- data/lib/autoproj/os_package_resolver.rb +63 -36
- data/lib/autoproj/package_definition.rb +1 -0
- data/lib/autoproj/package_managers/apt_dpkg_manager.rb +30 -27
- data/lib/autoproj/package_managers/bundler_manager.rb +64 -18
- data/lib/autoproj/package_managers/gem_manager.rb +4 -2
- data/lib/autoproj/package_managers/manager.rb +26 -7
- data/lib/autoproj/package_managers/shell_script_manager.rb +4 -4
- data/lib/autoproj/package_managers/zypper_manager.rb +1 -1
- data/lib/autoproj/package_manifest.rb +154 -137
- data/lib/autoproj/package_selection.rb +16 -2
- data/lib/autoproj/package_set.rb +352 -309
- data/lib/autoproj/query.rb +13 -1
- data/lib/autoproj/system.rb +2 -2
- data/lib/autoproj/test.rb +164 -11
- data/lib/autoproj/variable_expansion.rb +15 -42
- data/lib/autoproj/vcs_definition.rb +93 -76
- data/lib/autoproj/version.rb +1 -1
- data/lib/autoproj/workspace.rb +116 -80
- metadata +10 -2
data/lib/autoproj/cli/locate.rb
CHANGED
@@ -1,113 +1,170 @@
|
|
1
|
-
require 'autoproj/cli/
|
1
|
+
require 'autoproj/cli/inspection_tool'
|
2
2
|
|
3
3
|
module Autoproj
|
4
4
|
module CLI
|
5
|
-
|
5
|
+
# Deal with locating a package source or build directory in an existing
|
6
|
+
# workspace
|
7
|
+
#
|
8
|
+
# It is based on a installation manifest file, a YAML file generated to
|
9
|
+
# list that information and thus avoid loading the Autoproj
|
10
|
+
# configuration (which takes fairly long).
|
11
|
+
class Locate < InspectionTool
|
6
12
|
class NotFound < RuntimeError; end
|
7
13
|
class AmbiguousSelection < RuntimeError; end
|
8
14
|
|
9
|
-
attr_reader :
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
15
|
+
attr_reader :packages
|
16
|
+
attr_reader :package_sets
|
17
|
+
|
18
|
+
# Create the locate CLI interface
|
19
|
+
#
|
20
|
+
# @param [Workspace] ws the workspace we're working on
|
21
|
+
# @param [InstallationManifest,nil] installation_manifest the
|
22
|
+
# manifest. If nil, loads the whole autoproj configuration and
|
23
|
+
# rebuilds the manifest
|
24
|
+
def initialize(ws = Workspace.default, installation_manifest: try_loading_installation_manifest(ws))
|
25
|
+
super(ws)
|
26
|
+
ws.load_config
|
27
|
+
|
28
|
+
if installation_manifest
|
29
|
+
update_from_installation_manifest(installation_manifest)
|
18
30
|
end
|
31
|
+
end
|
19
32
|
|
20
|
-
|
21
|
-
installation_manifest.
|
33
|
+
def update_from_installation_manifest(installation_manifest)
|
34
|
+
@packages = installation_manifest.each_package.to_a
|
35
|
+
@package_sets = installation_manifest.each_package_set.to_a
|
22
36
|
end
|
23
37
|
|
24
|
-
|
25
|
-
|
26
|
-
|
38
|
+
# Load the installation manifest
|
39
|
+
def try_loading_installation_manifest(ws = self.ws)
|
40
|
+
Autoproj::InstallationManifest.from_workspace_root(ws.root_dir)
|
41
|
+
rescue ConfigError
|
27
42
|
end
|
28
43
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
44
|
+
# Find a package set that matches a given selection
|
45
|
+
#
|
46
|
+
# @param [String] selection a string that is matched against the
|
47
|
+
# package set name and its various directories. Directories are
|
48
|
+
# matched against the full path and must end with /
|
49
|
+
# @return [PackageSet,nil]
|
50
|
+
def find_package_set(selection)
|
51
|
+
package_sets.find do |pkg_set|
|
52
|
+
name = pkg_set.name
|
53
|
+
name == selection ||
|
54
|
+
selection.start_with?("#{pkg_set.raw_local_dir}/") ||
|
55
|
+
selection.start_with?("#{pkg_set.user_local_dir}/")
|
38
56
|
end
|
39
57
|
end
|
40
58
|
|
41
|
-
def
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
59
|
+
def find_packages(selection)
|
60
|
+
selection_rx = Regexp.new(Regexp.quote(selection))
|
61
|
+
candidates = []
|
62
|
+
packages.each do |pkg|
|
63
|
+
name = pkg.name
|
64
|
+
if name == selection || selection.start_with?("#{pkg.srcdir}/")
|
65
|
+
return [pkg]
|
66
|
+
elsif pkg.respond_to?(:builddir) && pkg.builddir && selection.start_with?("#{pkg.builddir}/")
|
67
|
+
return [pkg]
|
68
|
+
elsif name =~ selection_rx
|
69
|
+
candidates << pkg
|
47
70
|
end
|
48
|
-
return
|
49
71
|
end
|
72
|
+
return candidates
|
73
|
+
end
|
50
74
|
|
51
|
-
|
52
|
-
|
53
|
-
|
75
|
+
def find_packages_with_directory_shortnames(selection)
|
76
|
+
*directories, basename = *selection.split('/')
|
77
|
+
dirname_rx = directories.
|
78
|
+
map { |d| "#{Regexp.quote(d)}\\w*" }.
|
79
|
+
join("/")
|
80
|
+
|
81
|
+
rx = Regexp.new("#{dirname_rx}/#{Regexp.quote(basename)}")
|
82
|
+
rx_strict = Regexp.new("#{dirname_rx}/#{Regexp.quote(basename)}$")
|
54
83
|
|
55
|
-
selection_rx = Regexp.new(Regexp.quote(selection))
|
56
84
|
candidates = []
|
57
|
-
|
85
|
+
candidates_strict = []
|
86
|
+
packages.each do |pkg|
|
58
87
|
name = pkg.name
|
59
|
-
if name
|
60
|
-
puts result_value(pkg, options)
|
61
|
-
return
|
62
|
-
elsif name =~ selection_rx || selection.start_with?(pkg.srcdir) || (selection.start_with?(pkg.builddir) if pkg.builddir)
|
88
|
+
if name =~ rx
|
63
89
|
candidates << pkg
|
64
90
|
end
|
91
|
+
if name =~ rx_strict
|
92
|
+
candidates_strict << pkg
|
93
|
+
end
|
65
94
|
end
|
66
95
|
|
67
|
-
if candidates.
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
96
|
+
if candidates.size > 1 && candidates_strict.size == 1
|
97
|
+
candidates_strict
|
98
|
+
else
|
99
|
+
candidates
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
def initialize_from_workspace
|
104
|
+
initialize_and_load
|
105
|
+
finalize_setup # this exports the manifest
|
106
|
+
|
107
|
+
@packages = ws.manifest.each_autobuild_package.to_a
|
108
|
+
@package_sets = ws.manifest.each_package_set.to_a
|
109
|
+
end
|
110
|
+
|
111
|
+
def run(selections, cache: !!packages, build: false, prefix: false)
|
112
|
+
if !cache
|
113
|
+
initialize_from_workspace
|
114
|
+
end
|
115
|
+
|
116
|
+
if selections.empty?
|
117
|
+
if prefix || build
|
118
|
+
puts ws.prefix_dir
|
119
|
+
else
|
120
|
+
puts ws.root_dir
|
89
121
|
end
|
122
|
+
end
|
90
123
|
|
91
|
-
|
92
|
-
|
124
|
+
selections.each do |string|
|
125
|
+
if File.directory?(string)
|
126
|
+
string = "#{File.expand_path(string)}/"
|
93
127
|
end
|
128
|
+
puts location_of(string, build: build, prefix: prefix)
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
def location_of(selection, prefix: false, build: false)
|
133
|
+
if pkg_set = find_package_set(selection)
|
134
|
+
return pkg_set.user_local_dir
|
94
135
|
end
|
95
136
|
|
96
|
-
|
137
|
+
matching_packages = find_packages(selection)
|
138
|
+
if matching_packages.empty?
|
139
|
+
matching_packages = find_packages_with_directory_shortnames(selection)
|
140
|
+
end
|
141
|
+
|
142
|
+
if matching_packages.size > 1
|
97
143
|
# If there is more than one candidate, check if there are some that are not
|
98
144
|
# present on disk
|
99
|
-
present =
|
145
|
+
present = matching_packages.find_all { |pkg| File.directory?(pkg.srcdir) }
|
100
146
|
if present.size == 1
|
101
|
-
|
147
|
+
matching_packages = present
|
102
148
|
end
|
103
149
|
end
|
104
150
|
|
105
|
-
if
|
106
|
-
raise
|
107
|
-
elsif
|
108
|
-
raise
|
151
|
+
if matching_packages.empty?
|
152
|
+
raise NotFound, "cannot find '#{selection}' in the current autoproj installation"
|
153
|
+
elsif matching_packages.size > 1
|
154
|
+
raise AmbiguousSelection, "multiple packages match '#{selection}' in the current autoproj installation: #{matching_packages.map(&:name).sort.join(", ")}"
|
109
155
|
else
|
110
|
-
|
156
|
+
pkg = matching_packages.first
|
157
|
+
if prefix
|
158
|
+
pkg.prefix
|
159
|
+
elsif build
|
160
|
+
if pkg.respond_to?(:builddir) && pkg.builddir
|
161
|
+
pkg.builddir
|
162
|
+
else
|
163
|
+
raise ArgumentError, "#{pkg.name} does not have a build directory"
|
164
|
+
end
|
165
|
+
else
|
166
|
+
pkg.srcdir
|
167
|
+
end
|
111
168
|
end
|
112
169
|
end
|
113
170
|
end
|
data/lib/autoproj/cli/main.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'thor'
|
2
2
|
require 'tty/color'
|
3
3
|
require 'autoproj/cli/main_test'
|
4
|
+
require 'autoproj/cli/main_plugin'
|
4
5
|
|
5
6
|
module Autoproj
|
6
7
|
module CLI
|
@@ -27,7 +28,7 @@ class Main < Thor
|
|
27
28
|
default: TTY::Color.color?
|
28
29
|
|
29
30
|
no_commands do
|
30
|
-
def run_autoproj_cli(filename, classname, report_options, *args)
|
31
|
+
def run_autoproj_cli(filename, classname, report_options, *args, **extra_options)
|
31
32
|
require "autoproj/cli/#{filename}"
|
32
33
|
Autoproj.report(Hash[silent: !options[:debug], debug: options[:debug]].merge(report_options)) do
|
33
34
|
options = self.options.dup
|
@@ -37,7 +38,7 @@ def run_autoproj_cli(filename, classname, report_options, *args)
|
|
37
38
|
options[:only_local] = options.delete('local')
|
38
39
|
end
|
39
40
|
cli = CLI.const_get(classname).new
|
40
|
-
run_args = cli.validate_options(args, options)
|
41
|
+
run_args = cli.validate_options(args, options.merge(extra_options))
|
41
42
|
cli.run(*run_args)
|
42
43
|
end
|
43
44
|
end
|
@@ -54,7 +55,7 @@ def bootstrap(*args)
|
|
54
55
|
if !File.directory?(File.join(Dir.pwd, '.autoproj'))
|
55
56
|
require 'autoproj/ops/install'
|
56
57
|
ops = Autoproj::Ops::Install.new(Dir.pwd)
|
57
|
-
|
58
|
+
ops.parse_options(args)
|
58
59
|
ops.run
|
59
60
|
exec Gem.ruby, $0, 'bootstrap', *args
|
60
61
|
end
|
@@ -75,6 +76,9 @@ def envsh
|
|
75
76
|
desc: "use the VCS information as 'versions --no-local' would detect it instead of the one in the configuration"
|
76
77
|
option :parallel, aliases: :p, type: :numeric,
|
77
78
|
desc: 'maximum number of parallel jobs'
|
79
|
+
option :deps, type: :boolean,
|
80
|
+
desc: 'whether only the status of the given packages should be displayed, or of their dependencies as well',
|
81
|
+
default: true
|
78
82
|
def status(*packages)
|
79
83
|
run_autoproj_cli(:status, :Status, Hash[], *packages)
|
80
84
|
end
|
@@ -163,10 +167,14 @@ def clean(*packages)
|
|
163
167
|
end
|
164
168
|
|
165
169
|
desc 'locate [PACKAGE]', 'return the path to the given package, or the path to the root if no packages are given on the command line'
|
170
|
+
option :cache, type: :boolean,
|
171
|
+
desc: 'controls whether the resolution should be done by loading the whole configuration (false, slow) or through a cache file (the default)'
|
172
|
+
option :prefix, aliases: :p, type: :boolean,
|
173
|
+
desc: "outputs the package's prefix directory instead of its source directory"
|
166
174
|
option :build, aliases: :b, type: :boolean,
|
167
175
|
desc: "outputs the package's build directory instead of its source directory"
|
168
|
-
def locate(
|
169
|
-
run_autoproj_cli(:locate, :Locate, Hash[], *
|
176
|
+
def locate(*packages)
|
177
|
+
run_autoproj_cli(:locate, :Locate, Hash[], *packages)
|
170
178
|
end
|
171
179
|
|
172
180
|
desc 'reconfigure', 'pass through all configuration questions'
|
@@ -184,6 +192,9 @@ def reconfigure
|
|
184
192
|
desc: "compare to the given baseline. if 'true', the comparison will ignore any override, otherwise it will take into account overrides only up to the given package set"
|
185
193
|
option :env, type: :boolean,
|
186
194
|
desc: "display the package's own environment", default: false
|
195
|
+
option :short, desc: 'display a package summary with one package line'
|
196
|
+
option :recursive, desc: 'display the package and their dependencies (the default is to only display selected packages)',
|
197
|
+
type: :boolean, default: false
|
187
198
|
def show(*packages)
|
188
199
|
run_autoproj_cli(:show, :Show, Hash[], *packages)
|
189
200
|
end
|
@@ -335,6 +346,21 @@ def install_stage2(root_dir, *vars)
|
|
335
346
|
end
|
336
347
|
ops.stage2(*vars)
|
337
348
|
end
|
349
|
+
|
350
|
+
desc 'plugin', 'interface to manage autoproj plugins'
|
351
|
+
subcommand 'plugin', MainPlugin
|
352
|
+
|
353
|
+
desc 'patch', 'applies patches necessary for the selected package',
|
354
|
+
hide: true
|
355
|
+
def patch(*packages)
|
356
|
+
run_autoproj_cli(:patcher, :Patcher, Hash[], *packages, patch: true)
|
357
|
+
end
|
358
|
+
|
359
|
+
desc 'unpatch', 'remove any patch applied on the selected package',
|
360
|
+
hide: true
|
361
|
+
def unpatch(*packages)
|
362
|
+
run_autoproj_cli(:patcher, :Patcher, Hash[], *packages, patch: false)
|
363
|
+
end
|
338
364
|
end
|
339
365
|
end
|
340
366
|
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
module Autoproj
|
2
|
+
module CLI
|
3
|
+
class MainPlugin < Thor
|
4
|
+
namespace 'plugin'
|
5
|
+
|
6
|
+
no_commands do
|
7
|
+
def ws
|
8
|
+
@ws ||= Workspace.from_pwd
|
9
|
+
end
|
10
|
+
|
11
|
+
def install_plugins
|
12
|
+
ws.load_config
|
13
|
+
ws.update_autoproj(restart_on_update: false)
|
14
|
+
end
|
15
|
+
|
16
|
+
def read_plugin_list
|
17
|
+
ws.load_config
|
18
|
+
ws.config.get('plugins', Hash.new)
|
19
|
+
end
|
20
|
+
|
21
|
+
def write_plugin_list(plugins)
|
22
|
+
ws.load_config
|
23
|
+
ws.config.set('plugins', plugins)
|
24
|
+
ws.save_config
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
desc 'install NAME', 'install or upgrade an autoproj plugin'
|
29
|
+
option :version, desc: 'a gem version constraint',
|
30
|
+
type: 'string', default: '>= 0'
|
31
|
+
option :git, desc: 'checkout a git repository instead of downloading the gem',
|
32
|
+
type: 'string'
|
33
|
+
option :path, desc: 'use the plugin that is already present on this path',
|
34
|
+
type: 'string'
|
35
|
+
def install(name)
|
36
|
+
require 'autoproj'
|
37
|
+
|
38
|
+
gem_options = Hash.new
|
39
|
+
if options[:git] && options[:path]
|
40
|
+
raise ArgumentError, "you can provide only one of --git or --path"
|
41
|
+
elsif options[:git]
|
42
|
+
gem_options[:git] = options[:git]
|
43
|
+
elsif options[:path]
|
44
|
+
gem_options[:path] = options[:path]
|
45
|
+
end
|
46
|
+
|
47
|
+
plugins = read_plugin_list
|
48
|
+
updated_plugins = plugins.merge(name => [options[:version], gem_options])
|
49
|
+
write_plugin_list(updated_plugins)
|
50
|
+
begin
|
51
|
+
install_plugins
|
52
|
+
rescue Exception
|
53
|
+
write_plugin_list(plugins)
|
54
|
+
install_plugins
|
55
|
+
raise
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
desc 'list', 'list installed plugins'
|
60
|
+
def list
|
61
|
+
require 'autoproj'
|
62
|
+
read_plugin_list.sort_by(&:first).each do |name, (version, options)|
|
63
|
+
args = [version, *options.map { |k, v| "#{k}: \"#{v}\"" }]
|
64
|
+
puts "#{name}: #{args.join(", ")}"
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
desc 'remove NAME', 'uninstall a plugin'
|
69
|
+
def remove(name)
|
70
|
+
require 'autoproj'
|
71
|
+
plugins = read_plugin_list
|
72
|
+
updated_plugins = plugins.dup
|
73
|
+
updated_plugins.delete(name)
|
74
|
+
write_plugin_list(updated_plugins)
|
75
|
+
install_plugins
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
@@ -4,13 +4,21 @@ class MainTest < Thor
|
|
4
4
|
namespace 'test'
|
5
5
|
|
6
6
|
default_command 'exec'
|
7
|
+
|
8
|
+
no_commands do
|
9
|
+
def report(report_options = Hash.new)
|
10
|
+
Autoproj.report(Hash[silent: !options[:debug], debug: options[:debug]].merge(report_options)) do
|
11
|
+
yield
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
7
15
|
|
8
16
|
desc 'enable [PACKAGES]', 'enable tests for the given packages (or for all packages if none are given)'
|
9
17
|
option :deps, type: :boolean, default: false,
|
10
18
|
desc: 'controls whether the dependencies of the packages given on the command line should be enabled as well (the default is not)'
|
11
19
|
def enable(*packages)
|
12
20
|
require 'autoproj/cli/test'
|
13
|
-
|
21
|
+
report(silent: true) do
|
14
22
|
cli = Test.new
|
15
23
|
args = cli.validate_options(packages, options)
|
16
24
|
cli.enable(*args)
|
@@ -22,7 +30,7 @@ def enable(*packages)
|
|
22
30
|
desc: 'controls whether the dependencies of the packages given on the command line should be disabled as well (the default is not)'
|
23
31
|
def disable(*packages)
|
24
32
|
require 'autoproj/cli/test'
|
25
|
-
|
33
|
+
report(silent: true) do
|
26
34
|
cli = Test.new
|
27
35
|
args = cli.validate_options(packages, options)
|
28
36
|
cli.disable(*args)
|
@@ -30,11 +38,11 @@ def disable(*packages)
|
|
30
38
|
end
|
31
39
|
|
32
40
|
desc 'list [PACKAGES]', 'show test enable/disable status for the given packages (or all packages if none are given)'
|
33
|
-
option :deps, type: :boolean, default:
|
41
|
+
option :deps, type: :boolean, default: true,
|
34
42
|
desc: 'controls whether the dependencies of the packages given on the command line should be disabled as well (the default is not)'
|
35
43
|
def list(*packages)
|
36
44
|
require 'autoproj/cli/test'
|
37
|
-
|
45
|
+
report(silent: true) do
|
38
46
|
cli = Test.new
|
39
47
|
args = cli.validate_options(packages, options)
|
40
48
|
cli.list(*args)
|
@@ -44,10 +52,16 @@ def list(*packages)
|
|
44
52
|
desc 'exec [PACKAGES]', 'execute the tests for the given packages, or all if no packages are given on the command line'
|
45
53
|
option :deps, type: :boolean, default: false,
|
46
54
|
desc: 'controls whether to execute the tests of the dependencies of the packages given on the command line (the default is not)'
|
55
|
+
option :fail, type: :boolean, default: true,
|
56
|
+
desc: 'return with a nonzero exit code if the test does not pass'
|
57
|
+
option :coverage, type: :boolean, default: false,
|
58
|
+
desc: 'whether code coverage should be generated if possible'
|
47
59
|
def exec(*packages)
|
48
60
|
require 'autoproj/cli/test'
|
49
|
-
|
61
|
+
report do
|
50
62
|
cli = Test.new
|
63
|
+
Autobuild.pass_test_errors = options[:fail]
|
64
|
+
Autobuild::TestUtility.coverage_enabled = options[:coverage]
|
51
65
|
args = cli.validate_options(packages, options)
|
52
66
|
cli.run(*args)
|
53
67
|
end
|