autoproj 2.0.0.rc38 → 2.0.0.rc39
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 +9 -7
- data/lib/autoproj/cli/build.rb +5 -7
- data/lib/autoproj/cli/main.rb +5 -0
- data/lib/autoproj/cli/manifest.rb +52 -0
- data/lib/autoproj/cli/patcher.rb +1 -1
- data/lib/autoproj/cli/query.rb +1 -1
- data/lib/autoproj/cli/update.rb +122 -61
- data/lib/autoproj/cli/versions.rb +1 -1
- data/lib/autoproj/exceptions.rb +20 -0
- data/lib/autoproj/find_workspace.rb +1 -2
- data/lib/autoproj/manifest.rb +3 -0
- data/lib/autoproj/ops/configuration.rb +262 -68
- data/lib/autoproj/ops/import.rb +38 -32
- data/lib/autoproj/ops/main_config_switcher.rb +1 -1
- data/lib/autoproj/ops/snapshot.rb +10 -21
- data/lib/autoproj/os_package_installer.rb +1 -0
- data/lib/autoproj/os_package_resolver.rb +35 -19
- data/lib/autoproj/system.rb +3 -0
- data/lib/autoproj/test.rb +17 -0
- data/lib/autoproj/version.rb +1 -1
- data/lib/autoproj/workspace.rb +37 -131
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d50b298207a3006893877e6c968a46ec5614ed91
|
4
|
+
data.tar.gz: f6e394d4adb73e2d0f4ed6f9d2e8113e041aede9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 267238c6a85992b631faaa5283558e5e90ad05d4cac54cedb4ed3a8cf480445b569536c324089b17a7f91d3f89965f6c93f1adfd27076b8750e5a317dd95036f
|
7
|
+
data.tar.gz: 329ac2bb6222d965f9aa4121cfce725a9e4911301a606913a00b062f6f42c5ad3a037a3c327e773c9d9518b75f410185b3d5d973db31c6a712aa7704da79852a
|
data/.travis.yml
CHANGED
@@ -1,21 +1,23 @@
|
|
1
|
-
sudo:
|
1
|
+
sudo: true
|
2
2
|
language: ruby
|
3
3
|
rvm:
|
4
4
|
- '2.0'
|
5
|
-
-
|
6
|
-
-
|
7
|
-
-
|
8
|
-
-
|
5
|
+
- 2.1.10
|
6
|
+
- 2.2.5
|
7
|
+
- 2.3.1
|
8
|
+
- jruby-9.1.5.0
|
9
9
|
matrix:
|
10
10
|
allow_failures:
|
11
|
-
- rvm:
|
11
|
+
- rvm: jruby-9.1.5.0
|
12
12
|
|
13
13
|
cache: bundler
|
14
14
|
|
15
15
|
install:
|
16
|
+
- git config --global user.name "Autoproj on Travis CI"
|
17
|
+
- git config --global user.email "autoproj@travis"
|
16
18
|
- gem install bundler
|
17
19
|
# Some tests expect gems to be present in vendor/bundle
|
18
20
|
- bundler install --path vendor/bundle
|
19
21
|
script:
|
20
22
|
- bundler exec rake
|
21
|
-
- bundler exec rake test
|
23
|
+
- AUTOPROJ_SKIP_LONG_TESTS=1 bundler exec rake test
|
data/lib/autoproj/cli/build.rb
CHANGED
@@ -5,11 +5,9 @@ module Autoproj
|
|
5
5
|
module CLI
|
6
6
|
class Build < Update
|
7
7
|
def validate_options(selected_packages, options)
|
8
|
-
selected_packages, options =
|
9
|
-
|
10
|
-
|
11
|
-
end
|
12
|
-
|
8
|
+
selected_packages, options =
|
9
|
+
super(selected_packages, options.merge(
|
10
|
+
checkout_only: true, aup: options[:amake]))
|
13
11
|
if options[:deps].nil?
|
14
12
|
options[:deps] =
|
15
13
|
!(options[:rebuild] || options[:force])
|
@@ -23,8 +21,6 @@ def run(selected_packages, options)
|
|
23
21
|
rebuild: false,
|
24
22
|
parallel: nil
|
25
23
|
|
26
|
-
Autobuild.ignore_errors = options[:keep_going]
|
27
|
-
|
28
24
|
command_line_selection, source_packages, osdep_packages =
|
29
25
|
super(selected_packages, options.merge(checkout_only: true))
|
30
26
|
|
@@ -38,6 +34,8 @@ def run(selected_packages, options)
|
|
38
34
|
pkg.disable
|
39
35
|
end
|
40
36
|
|
37
|
+
Autobuild.ignore_errors = options[:keep_going]
|
38
|
+
|
41
39
|
ops = Ops::Build.new(ws.manifest)
|
42
40
|
if build_options[:rebuild] || build_options[:force]
|
43
41
|
packages_to_rebuild =
|
data/lib/autoproj/cli/main.rb
CHANGED
@@ -361,6 +361,11 @@ def patch(*packages)
|
|
361
361
|
def unpatch(*packages)
|
362
362
|
run_autoproj_cli(:patcher, :Patcher, Hash[], *packages, patch: false)
|
363
363
|
end
|
364
|
+
|
365
|
+
desc 'manifest', 'select or displays the active manifest'
|
366
|
+
def manifest(*name)
|
367
|
+
run_autoproj_cli(:manifest, :Manifest, Hash[silent: true], *name)
|
368
|
+
end
|
364
369
|
end
|
365
370
|
end
|
366
371
|
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'autoproj'
|
2
|
+
module Autoproj
|
3
|
+
module CLI
|
4
|
+
class Manifest
|
5
|
+
attr_reader :ws
|
6
|
+
|
7
|
+
def initialize(ws = Workspace.default)
|
8
|
+
@ws = ws
|
9
|
+
end
|
10
|
+
|
11
|
+
def validate_options(args, options)
|
12
|
+
return args, options
|
13
|
+
end
|
14
|
+
|
15
|
+
def run(name, options = Hash.new)
|
16
|
+
ws.load_config
|
17
|
+
if name.empty?
|
18
|
+
Autoproj.message "current manifest is #{ws.manifest_file_path}"
|
19
|
+
elsif name.size == 1
|
20
|
+
name = name.first
|
21
|
+
if File.file?(full_path = File.expand_path(name))
|
22
|
+
if File.dirname(full_path) != ws.config_dir
|
23
|
+
raise ArgumentError, "#{full_path} is not part of #{ws.config_dir}"
|
24
|
+
end
|
25
|
+
else
|
26
|
+
full_path = File.join(ws.config_dir, name)
|
27
|
+
end
|
28
|
+
|
29
|
+
if !File.file?(full_path)
|
30
|
+
alternative_full_path = File.join(ws.config_dir, "manifest.#{name}")
|
31
|
+
if !File.file?(alternative_full_path)
|
32
|
+
raise ArgumentError, "neither #{full_path} nor #{alternative_full_path} exist"
|
33
|
+
end
|
34
|
+
full_path = alternative_full_path
|
35
|
+
end
|
36
|
+
begin
|
37
|
+
Autoproj::Manifest.new(ws).load(full_path)
|
38
|
+
rescue Exception
|
39
|
+
Autoproj.error "failed to load #{full_path}"
|
40
|
+
raise
|
41
|
+
end
|
42
|
+
ws.config.set 'manifest_name', File.basename(full_path)
|
43
|
+
ws.save_config
|
44
|
+
Autoproj.message "set manifest to #{full_path}"
|
45
|
+
else
|
46
|
+
raise ArgumentError, "expected zero or one argument, but got #{name.size}"
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
data/lib/autoproj/cli/patcher.rb
CHANGED
@@ -5,7 +5,7 @@ module CLI
|
|
5
5
|
class Patcher < InspectionTool
|
6
6
|
def run(packages, patch: true)
|
7
7
|
initialize_and_load
|
8
|
-
packages, _ = finalize_setup(packages, recursive: false, non_imported_packages:
|
8
|
+
packages, _ = finalize_setup(packages, recursive: false, non_imported_packages: :ignore)
|
9
9
|
packages.each do |package_name|
|
10
10
|
pkg = ws.manifest.package_definition_by_name(package_name)
|
11
11
|
if patch
|
data/lib/autoproj/cli/query.rb
CHANGED
@@ -49,7 +49,7 @@ def format_package(format, priority, package)
|
|
49
49
|
fields['PREFIX'] = autobuild_package.prefix
|
50
50
|
fields['NAME'] = package.name
|
51
51
|
fields['PRIORITY'] = priority
|
52
|
-
fields['URL'] = (package.vcs.url if package.vcs)
|
52
|
+
fields['URL'] = (package.vcs.url if !package.vcs.none?)
|
53
53
|
fields['PRESENT'] = File.directory?(autobuild_package.srcdir)
|
54
54
|
Autoproj.expand(format, fields)
|
55
55
|
end
|
data/lib/autoproj/cli/update.rb
CHANGED
@@ -5,23 +5,22 @@
|
|
5
5
|
module Autoproj
|
6
6
|
module CLI
|
7
7
|
class Update < Base
|
8
|
-
def validate_options(
|
9
|
-
|
10
|
-
|
11
|
-
if !options[:osdeps]
|
12
|
-
options[:osdeps_mode] = Array.new
|
13
|
-
end
|
8
|
+
def validate_options(selection, options)
|
9
|
+
selection, options = super
|
14
10
|
|
15
11
|
if from = options[:from]
|
16
12
|
options[:from] = Autoproj::InstallationManifest.from_workspace_root(options[:from])
|
17
13
|
end
|
18
|
-
ws.os_package_installer.filter_uptodate_packages = options[:osdeps_filter_uptodate]
|
19
14
|
|
20
|
-
if options[:aup] && !options[:all] &&
|
21
|
-
|
15
|
+
if options[:aup] && !options[:all] && selection.empty?
|
16
|
+
if Dir.pwd == ws.root_dir
|
17
|
+
options[:all] = true
|
18
|
+
else
|
19
|
+
selection = [Dir.pwd]
|
20
|
+
end
|
22
21
|
end
|
23
22
|
|
24
|
-
if options
|
23
|
+
if options.delete(:force_reset)
|
25
24
|
options[:reset] = :force
|
26
25
|
end
|
27
26
|
|
@@ -31,21 +30,16 @@ def validate_options(packages, options)
|
|
31
30
|
end
|
32
31
|
end
|
33
32
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
def run(selected_packages, options)
|
38
|
-
ws.manifest.accept_unavailable_osdeps = !options[:osdeps]
|
39
|
-
explicit_selection = !selected_packages.empty?
|
40
|
-
selected_packages, config_selected =
|
41
|
-
normalize_command_line_package_selection(selected_packages)
|
33
|
+
has_explicit_selection = !selection.empty?
|
34
|
+
selection, config_selected =
|
35
|
+
normalize_command_line_package_selection(selection)
|
42
36
|
|
43
37
|
# Autoproj and configuration are updated only if (1) it is
|
44
38
|
# explicitely selected or (2) nothing is explicitely selected
|
45
39
|
update_autoproj =
|
46
40
|
(options[:autoproj] || (
|
47
41
|
options[:autoproj] != false &&
|
48
|
-
!
|
42
|
+
!has_explicit_selection &&
|
49
43
|
!options[:config] &&
|
50
44
|
!options[:checkout_only])
|
51
45
|
)
|
@@ -53,35 +47,93 @@ def run(selected_packages, options)
|
|
53
47
|
update_config =
|
54
48
|
(options[:config] || config_selected || (
|
55
49
|
options[:config] != false &&
|
56
|
-
!
|
50
|
+
!has_explicit_selection &&
|
57
51
|
!options[:autoproj]))
|
58
52
|
|
59
53
|
update_packages =
|
60
54
|
options[:all] ||
|
61
|
-
(
|
62
|
-
(!
|
55
|
+
(has_explicit_selection && !selection.empty?) ||
|
56
|
+
(!has_explicit_selection && !options[:config] && !options[:autoproj])
|
63
57
|
|
64
|
-
|
65
|
-
|
58
|
+
options[:autoproj] = update_autoproj
|
59
|
+
options[:config] = update_config
|
60
|
+
options[:packages] = update_packages
|
61
|
+
return selection, options
|
62
|
+
end
|
63
|
+
|
64
|
+
def run(selected_packages, options)
|
65
|
+
ws.manifest.accept_unavailable_osdeps = !options[:osdeps]
|
66
66
|
|
67
|
+
ws.setup
|
67
68
|
ws.autodetect_operating_system(force: true)
|
68
69
|
|
69
|
-
if
|
70
|
+
if options[:autoproj]
|
70
71
|
ws.update_autoproj
|
71
72
|
end
|
72
73
|
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
74
|
+
begin
|
75
|
+
ws.load_package_sets(
|
76
|
+
mainline: options[:mainline],
|
77
|
+
only_local: options[:only_local],
|
78
|
+
checkout_only: !options[:config] || options[:checkout_only],
|
79
|
+
reset: options[:reset],
|
80
|
+
keep_going: options[:keep_going],
|
81
|
+
retry_count: options[:retry_count])
|
82
|
+
rescue ImportFailed => configuration_import_failure
|
83
|
+
if !options[:keep_going] || !options[:packages]
|
84
|
+
raise
|
85
|
+
end
|
86
|
+
ensure
|
87
|
+
ws.config.save
|
88
|
+
end
|
89
|
+
|
90
|
+
if !options[:packages]
|
91
|
+
return [], [], []
|
92
|
+
end
|
93
|
+
|
94
|
+
osdeps_options = normalize_osdeps_options(
|
95
|
+
checkout_only: options[:checkout_only],
|
96
|
+
osdeps_mode: options[:osdeps_mode],
|
97
|
+
osdeps: options[:osdeps],
|
98
|
+
osdeps_filter_uptodate: options[:osdeps_filter_uptodate])
|
99
|
+
|
100
|
+
command_line_selection, selected_packages =
|
101
|
+
finish_loading_configuration(selected_packages)
|
102
|
+
source_packages, osdep_packages, import_failure =
|
103
|
+
update_packages(
|
104
|
+
selected_packages,
|
105
|
+
osdeps: options[:osdeps], osdeps_options: osdeps_options,
|
106
|
+
from: options[:from],
|
107
|
+
checkout_only: options[:checkout_only],
|
108
|
+
only_local: options[:only_local],
|
109
|
+
reset: options[:reset],
|
110
|
+
deps: options[:deps],
|
111
|
+
keep_going: options[:keep_going],
|
112
|
+
parallel: options[:parallel] || ws.config.parallel_import_level,
|
113
|
+
retry_count: options[:retry_count])
|
114
|
+
|
115
|
+
ws.finalize_setup
|
116
|
+
ws.export_installation_manifest
|
117
|
+
|
118
|
+
if options[:osdeps] && !osdep_packages.empty?
|
119
|
+
ws.install_os_packages(osdep_packages, **osdeps_options)
|
120
|
+
end
|
121
|
+
|
122
|
+
ws.export_env_sh(source_packages)
|
123
|
+
Autoproj.message " updated #{ws.root_dir}/#{Autoproj::ENV_FILENAME}", :green
|
124
|
+
|
125
|
+
if import_failure && configuration_import_failure
|
126
|
+
raise ImportFailed.new(configuration_import_failure.original_errors + import_failure.original_errors)
|
127
|
+
elsif import_failure
|
128
|
+
raise import_failure
|
129
|
+
elsif configuration_import_failure
|
130
|
+
raise configuration_import_failure
|
83
131
|
end
|
84
132
|
|
133
|
+
return command_line_selection, source_packages, osdep_packages
|
134
|
+
end
|
135
|
+
|
136
|
+
def finish_loading_configuration(selected_packages)
|
85
137
|
ws.setup_all_package_directories
|
86
138
|
# Call resolve_user_selection once to auto-add packages
|
87
139
|
resolve_user_selection(selected_packages)
|
@@ -98,40 +150,49 @@ def run(selected_packages, options)
|
|
98
150
|
else
|
99
151
|
command_line_selection = Array.new
|
100
152
|
end
|
101
|
-
|
153
|
+
return command_line_selection, resolved_selected_packages
|
154
|
+
end
|
155
|
+
|
156
|
+
def normalize_osdeps_options(
|
157
|
+
checkout_only: false, osdeps: true, osdeps_mode: nil,
|
158
|
+
osdeps_filter_uptodate: true)
|
102
159
|
|
103
|
-
|
104
|
-
|
160
|
+
osdeps_options = Hash[install_only: checkout_only]
|
161
|
+
if osdeps_mode
|
162
|
+
osdeps_options[:osdeps_mode] = osdeps_mode
|
163
|
+
elsif !osdeps
|
164
|
+
osdeps_options[:osdeps_mode] = Array.new
|
105
165
|
end
|
166
|
+
ws.os_package_installer.filter_uptodate_packages = osdeps_filter_uptodate
|
167
|
+
osdeps_options
|
168
|
+
end
|
106
169
|
|
107
|
-
|
108
|
-
|
109
|
-
|
170
|
+
def update_packages(selected_packages,
|
171
|
+
from: nil, checkout_only: false, only_local: false, reset: false,
|
172
|
+
deps: true, keep_going: false, parallel: 1,
|
173
|
+
retry_count: 0, osdeps: true, osdeps_options: Hash.new)
|
174
|
+
|
175
|
+
if from
|
176
|
+
setup_update_from(from)
|
110
177
|
end
|
111
178
|
|
112
179
|
ops = Autoproj::Ops::Import.new(ws)
|
113
180
|
source_packages, osdep_packages =
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
if options[:osdeps] && !osdep_packages.empty?
|
128
|
-
ws.install_os_packages(osdep_packages, **osdeps_options)
|
181
|
+
ops.import_packages(selected_packages,
|
182
|
+
checkout_only: checkout_only,
|
183
|
+
only_local: only_local,
|
184
|
+
reset: reset,
|
185
|
+
recursive: deps,
|
186
|
+
keep_going: keep_going,
|
187
|
+
parallel: parallel,
|
188
|
+
retry_count: retry_count,
|
189
|
+
install_vcs_packages: (osdeps_options if osdeps))
|
190
|
+
return source_packages, osdep_packages, nil
|
191
|
+
rescue PackageImportFailed => import_failure
|
192
|
+
if !keep_going
|
193
|
+
raise
|
129
194
|
end
|
130
|
-
|
131
|
-
ws.export_env_sh(source_packages)
|
132
|
-
Autoproj.message " updated #{ws.root_dir}/#{Autoproj::ENV_FILENAME}", :green
|
133
|
-
|
134
|
-
return command_line_selection, source_packages, osdep_packages
|
195
|
+
return import_failure.source_packages, import_failure.osdep_packages, import_failure
|
135
196
|
end
|
136
197
|
|
137
198
|
def load_all_available_package_manifests
|
@@ -33,7 +33,7 @@ def run(user_selection, options)
|
|
33
33
|
finalize_setup(user_selection,
|
34
34
|
recursive: options[:deps])
|
35
35
|
|
36
|
-
ops = Ops::Snapshot.new(ws.manifest,
|
36
|
+
ops = Ops::Snapshot.new(ws.manifest, keep_going: options[:keep_going])
|
37
37
|
|
38
38
|
if user_selection.empty?
|
39
39
|
snapshot_package_sets = (options[:config] != false)
|
data/lib/autoproj/exceptions.rb
CHANGED
@@ -8,6 +8,26 @@ def initialize(file = nil)
|
|
8
8
|
end
|
9
9
|
class InternalError < RuntimeError; end
|
10
10
|
|
11
|
+
class ImportFailed < Autobuild::CompositeException
|
12
|
+
def empty?
|
13
|
+
original_errors.empty?
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
class PackageImportFailed < ImportFailed
|
18
|
+
# The list of the source packages that have been updated
|
19
|
+
attr_reader :source_packages
|
20
|
+
# The list of osdep packages that should be installed because of
|
21
|
+
# {#source_packages}
|
22
|
+
attr_reader :osdep_packages
|
23
|
+
|
24
|
+
def initialize(original_errors, source_packages: [], osdep_packages: [])
|
25
|
+
super(original_errors)
|
26
|
+
@source_packages = source_packages
|
27
|
+
@osdep_packages = osdep_packages
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
11
31
|
# Exception raised when trying to resolve a package name and it failed
|
12
32
|
class PackageNotFound < ConfigError
|
13
33
|
end
|
@@ -67,14 +67,13 @@ def self.find_v2_root_dir(base_dir, config_field_name)
|
|
67
67
|
resolved = find_v2_root_dir(result, config_field_name)
|
68
68
|
|
69
69
|
if !resolved || (resolved != result)
|
70
|
-
raise ArgumentError, "found #{path} as possible workspace root for #{base_dir}, but it contains a configuration file
|
70
|
+
raise ArgumentError, "found #{path} as possible workspace root for #{base_dir}, but it contains a configuration file that points to #{result} and #{result} is not an autoproj workspace root"
|
71
71
|
end
|
72
72
|
resolved
|
73
73
|
end
|
74
74
|
|
75
75
|
# Filters in the given list of paths the paths that are within a workspace
|
76
76
|
def self.filter_out_paths_in_workspace(paths)
|
77
|
-
known_valid_dirs = Set.new
|
78
77
|
known_workspace_dirs = Array.new
|
79
78
|
paths.find_all do |p|
|
80
79
|
if !File.directory?(p)
|