autoproj 2.12.0 → 2.12.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a68519807da7c2961d51b2036e82906d450b7726b97fdf7b61f79ab15918a506
4
- data.tar.gz: f7951a66ca5422a51dc4c8f15d979916ae85ee0ff84fb7bdaeb83d3df72dc0ac
3
+ metadata.gz: 214fd95f143468744f972355eefe4d626db36b1b9682c47998fc33373f1e5af5
4
+ data.tar.gz: 7fc8e361877c7ae1a66da15c00661e858cde213e6cf152c83799a7af71d910bf
5
5
  SHA512:
6
- metadata.gz: f84abc55dc7ac4c1d09a4478c86dd33b05a71e53d5368eb501bc31b637c48ab24ed13587300a6f2760d3731b95bb9bdbf46138c18ef4f9e8c1bd7a90ab1a15df
7
- data.tar.gz: 02da417bb10600b48425087f732c823930ce5e573724d097927f9c49381b5e15fe3c682cbc52248fafd943e0b2bc4b7b15db9ebe7415b4599ff9dc13f65ecadb
6
+ metadata.gz: 75a492d69d8b5902468f0a21c20bf1b4cbfe19c86d438f879094d3684c31da6a14fa184aa839fe1607dad086bf3210fe43a572d488f99e1ecb85c56be04f9489
7
+ data.tar.gz: d65b0bbbce89c696c913cddb23241b40a8d3acad47aabe7b93e9283701d3e7c1a82fde6544924d7b3f209a855aa9d065218303701c809b7a15e4fba3837193f6
@@ -6,6 +6,6 @@ argv = Autoproj::CLI.basic_setup
6
6
 
7
7
  begin
8
8
  Autoproj::CLI::Main.start(argv)
9
- rescue Interrupt
9
+ rescue Interrupt # rubocop:disable Lint/HandleExceptions
10
10
  # Already notified in the reporting infrastructure
11
11
  end
@@ -35,24 +35,30 @@ def self.package_name_from_options(spec)
35
35
  # @deprecated use Autoproj.workspace.in_package_set or add a proper Loader
36
36
  # object to your class
37
37
  def self.in_package_set(package_set, path, &block)
38
- Autoproj.warn_deprecated __method__,
38
+ Autoproj.warn_deprecated(
39
+ __method__,
39
40
  "use Autoproj.workspace.in_package_set instead"
41
+ )
40
42
  Autoproj.workspace.in_package_set(package_set, path, &block)
41
43
  end
42
44
 
43
45
  # @deprecated use Autoproj.workspace.current_file or add a proper Loader
44
46
  # object to your class
45
47
  def self.current_file
46
- Autoproj.warn_deprecated __method__,
48
+ Autoproj.warn_deprecated(
49
+ __method__,
47
50
  "use AUtoproj.workspace.current_file instead"
51
+ )
48
52
  Autoproj.workspace.current_file
49
53
  end
50
54
 
51
55
  # @deprecated use Autoproj.workspace.current_package_set or add a proper
52
56
  # Loader object to your class
53
57
  def self.current_package_set
54
- Autoproj.warn_deprecated __method__,
58
+ Autoproj.warn_deprecated(
59
+ __method__,
55
60
  "use Autoproj.workspace.current_package_set instead"
61
+ )
56
62
  Autoproj.workspace.current_package_set
57
63
  end
58
64
 
@@ -60,22 +66,27 @@ def self.current_package_set
60
66
  # Beware that the return value changed from Autobuild::Package to
61
67
  # Autoproj::PackageDefinition
62
68
  def self.define(package_type, spec, &block)
63
- Autoproj.warn_deprecated __method__, "use Autoproj.workspace.define_package "\
69
+ Autoproj.warn_deprecated(
70
+ __method__, "use Autoproj.workspace.define_package "\
64
71
  "instead (and beware that the return value changed from "\
65
72
  "Autobuild::Package to Autoproj::PackageDefinition)"
73
+ )
66
74
  workspace.define_package(package_type, spec, block, *current_file).
67
75
  autobuild
68
76
  end
69
77
 
70
78
  def self.loaded_autobuild_files
71
- Autoproj.warn_deprecated __method__,
72
- "use Autoproj.workspace.loaded_autobuild_files"
79
+ Autoproj.warn_deprecated(
80
+ __method__, "use Autoproj.workspace.loaded_autobuild_files"
81
+ )
73
82
  Autoproj.workspace.loaded_autobuild_files
74
83
  end
75
84
 
76
85
  def self.import_autobuild_file(package_set, path)
77
- Autoproj.warn_deprecated __method__,
86
+ Autoproj.warn_deprecated(
87
+ __method__,
78
88
  "use Autoproj.workspace.import_autobuild_file"
89
+ )
79
90
  Autoproj.workspace.import_autobuild_file(package_set, path)
80
91
  end
81
92
 
@@ -490,11 +501,13 @@ def renamed_package(current_name, old_name, options)
490
501
  explicitely_selected_in_layout?(old_name)
491
502
  if options[:obsolete] && !explicit_selection
492
503
  import_package old_name
493
- Autoproj.workspace.manifest.exclude_package old_name,
504
+ Autoproj.workspace.manifest.exclude_package(
505
+ old_name,
494
506
  "#{old_name} has been renamed to #{current_name}, you still have "\
495
507
  "the option of using the old name by adding '- #{old_name}' explicitely "\
496
508
  "in the layout in autoproj/manifest, but be warned that the name will "\
497
509
  "stop being usable at all in the near future"
510
+ )
498
511
  else
499
512
  metapackage old_name, current_name
500
513
  end
@@ -151,7 +151,7 @@ def resolve_selection(user_selection, checkout_only: true, only_local: false, re
151
151
  non_imported_packages: non_imported_packages,
152
152
  auto_exclude: auto_exclude)
153
153
 
154
- return source_packages, osdep_packages, resolved_selection
154
+ [source_packages, osdep_packages, resolved_selection]
155
155
  rescue ExcludedSelection => e
156
156
  raise CLIInvalidSelection, e.message, e.backtrace
157
157
  end
@@ -18,12 +18,14 @@ def validate_options(selected_packages, options)
18
18
  end
19
19
 
20
20
  def run(selected_packages, **options)
21
- build_options, options = filter_options options,
21
+ build_options, options = filter_options(
22
+ options,
22
23
  force: false,
23
24
  rebuild: false,
24
25
  parallel: nil,
25
26
  confirm: true,
26
27
  not: Array.new
28
+ )
27
29
 
28
30
  command_line_selection, source_packages, _osdep_packages =
29
31
  super(selected_packages,
@@ -41,6 +43,7 @@ def run(selected_packages, **options)
41
43
  # Disable all packages that are not selected
42
44
  ws.manifest.each_autobuild_package do |pkg|
43
45
  next if active_packages.include?(pkg.name)
46
+
44
47
  pkg.disable
45
48
  end
46
49
 
@@ -61,11 +64,13 @@ def run(selected_packages, **options)
61
64
  else 'force-build'
62
65
  end
63
66
  if build_options[:confirm] != false
64
- opt = BuildOption.new("", "boolean",
67
+ opt = BuildOption.new(
68
+ "", "boolean",
65
69
  {
66
70
  doc: "this is going to trigger a #{mode_name} "\
67
71
  "of all packages. Is that really what you want ?"
68
- }, nil)
72
+ }, nil
73
+ )
69
74
  raise Interrupt unless opt.ask(false)
70
75
  end
71
76
 
@@ -1,9 +1,54 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'autoproj/cli/inspection_tool'
2
4
  require 'autoproj/ops/cache'
3
5
 
4
6
  module Autoproj
5
7
  module CLI
6
8
  class Cache < InspectionTool
9
+ def parse_gem_compile(string)
10
+ scanner = StringScanner.new(string)
11
+ name = scanner.scan(/[^\[]+/)
12
+
13
+ level = 0
14
+ artifacts = []
15
+ artifact_include = nil
16
+ artifact_name = ''.dup
17
+ until scanner.eos?
18
+ c = scanner.getch
19
+ if level == 0
20
+ raise ArgumentError, "expected '[' but got '#{c}'" unless c == '['
21
+
22
+ level = 1
23
+ include_c = scanner.getch
24
+ if %w[+ -].include?(include_c)
25
+ artifact_include = (include_c == '+')
26
+ elsif include_c == ']'
27
+ raise ArgumentError, "empty [] found in '#{string}'"
28
+ else
29
+ raise ArgumentError,
30
+ "expected '+' or '-' but got '#{c}' in '#{string}'"
31
+ end
32
+ next
33
+ end
34
+
35
+ if c == ']'
36
+ level -= 1
37
+ if level == 0
38
+ artifacts << [artifact_include, artifact_name]
39
+ artifact_name = ''.dup
40
+ next
41
+ end
42
+ end
43
+
44
+ artifact_name << c
45
+ end
46
+
47
+ raise ArgumentError, "missing closing ']' in #{string}" if level != 0
48
+
49
+ [name, artifacts: artifacts]
50
+ end
51
+
7
52
  def validate_options(argv, options = Hash.new)
8
53
  argv, options = super
9
54
 
@@ -22,8 +67,7 @@ def validate_options(argv, options = Hash.new)
22
67
 
23
68
  if (compile = options[:gems_compile])
24
69
  options[:gems_compile] = compile.map do |name|
25
- name, *artifacts = name.split('+')
26
- [name, artifacts: artifacts]
70
+ parse_gem_compile(name)
27
71
  end
28
72
  end
29
73
 
@@ -58,4 +102,3 @@ def run(cache_dir, *package_names,
58
102
  end
59
103
  end
60
104
  end
61
-
@@ -8,9 +8,7 @@ class InspectionTool < Base
8
8
  def initialize_and_load(mainline: nil)
9
9
  Autoproj.silent do
10
10
  ws.setup
11
- if mainline == 'mainline' || mainline == 'true'
12
- mainline = true
13
- end
11
+ mainline = true if %w[mainline true].include?(mainline)
14
12
  ws.load_package_sets(mainline: mainline)
15
13
  ws.config.save
16
14
  ws.setup_all_package_directories
@@ -22,7 +20,7 @@ def initialize_and_load(mainline: nil)
22
20
  # @param [Array<String>] packages the list of package names
23
21
  # @param [Symbol] non_imported_packages whether packages that are
24
22
  # not yet imported should be ignored (:ignore) or returned
25
- # (:return).
23
+ # (:return).
26
24
  # @option options recursive (true) whether the package resolution
27
25
  # should return the package(s) and their dependencies
28
26
  #
@@ -32,7 +30,8 @@ def initialize_and_load(mainline: nil)
32
30
  # the arguments were pointing within the configuration area
33
31
  def finalize_setup(packages = [], non_imported_packages: :ignore, recursive: true, auto_exclude: false)
34
32
  Autoproj.silent do
35
- packages, config_selected = normalize_command_line_package_selection(packages)
33
+ packages, config_selected =
34
+ normalize_command_line_package_selection(packages)
36
35
  # Call resolve_user_selection once to auto-add packages, so
37
36
  # that they're available to e.g. overrides.rb
38
37
  resolve_user_selection(packages)
@@ -41,7 +40,7 @@ def finalize_setup(packages = [], non_imported_packages: :ignore, recursive: tru
41
40
  resolve_selection(packages, recursive: recursive, non_imported_packages: non_imported_packages, auto_exclude: auto_exclude)
42
41
  ws.finalize_setup
43
42
  ws.export_installation_manifest
44
- return source_packages, osdep_packages, resolved_selection, config_selected
43
+ [source_packages, osdep_packages, resolved_selection, config_selected]
45
44
  end
46
45
  end
47
46
  end
@@ -17,7 +17,8 @@ def run(user_selection, short: false, recursive: false, mainline: false, env: fa
17
17
  source_packages, osdep_packages, * =
18
18
  finalize_setup(user_selection, recursive: recursive, non_imported_packages: :return)
19
19
  else
20
- source_packages, osdep_packages = Array.new, Array.new
20
+ source_packages = []
21
+ osdep_packages = []
21
22
  end
22
23
 
23
24
  all_matching_osdeps = osdep_packages.map { |pkg| [pkg, true] }
@@ -232,7 +233,7 @@ def display_common_information(pkg_name, default_packages, revdeps)
232
233
  end
233
234
  end
234
235
 
235
- if !selections.empty?
236
+ unless selections.empty?
236
237
  puts " selected by way of"
237
238
  selections.each do |root_pkg|
238
239
  paths = find_selection_path(root_pkg, pkg_name)
@@ -248,9 +249,7 @@ def display_common_information(pkg_name, default_packages, revdeps)
248
249
  end
249
250
 
250
251
  def find_selection_path(from, to)
251
- if from == to
252
- return [[from]]
253
- end
252
+ return [[from]] if from == to
254
253
 
255
254
  all_paths = Array.new
256
255
  ws.manifest.resolve_package_name(from).each do |pkg_type, pkg_name|
@@ -262,19 +261,17 @@ def find_selection_path(from, to)
262
261
 
263
262
  pkg = ws.manifest.find_autobuild_package(pkg_name)
264
263
  pkg.dependencies.each do |dep_pkg_name|
265
- if result = find_selection_path(dep_pkg_name, to)
264
+ if (result = find_selection_path(dep_pkg_name, to))
266
265
  all_paths.concat(result.map { |p| path + p })
267
266
  end
268
267
  end
269
- if pkg.os_packages.include?(to)
270
- all_paths << (path + [to])
271
- end
268
+ all_paths << (path + [to]) if pkg.os_packages.include?(to)
272
269
  end
273
270
 
274
271
  # Now filter common trailing subpaths
275
272
  all_paths = all_paths.sort_by(&:size)
276
273
  filtered_paths = Array.new
277
- while !all_paths.empty?
274
+ until all_paths.empty?
278
275
  path = all_paths.shift
279
276
  filtered_paths << path
280
277
  size = path.size
@@ -290,19 +287,15 @@ def vcs_to_array(vcs)
290
287
  options = vcs.dup
291
288
  type = options.delete('type')
292
289
  url = options.delete('url')
293
- else
290
+ else
294
291
  options = vcs.options
295
292
  type = vcs.type
296
293
  url = vcs.url
297
294
  end
298
295
 
299
296
  fields = []
300
- if type
301
- fields << ['type', type]
302
- end
303
- if url
304
- fields << ['url', url]
305
- end
297
+ fields << ['type', type] if type
298
+ fields << ['url', url] if url
306
299
  fields = fields.concat(options.to_a.sort_by { |k, _| k.to_s })
307
300
  fields.map do |key, value|
308
301
  if value.respond_to?(:to_str) && File.file?(value) && value =~ /^\//
@@ -315,9 +308,10 @@ def vcs_to_array(vcs)
315
308
  def compute_all_revdeps(pkg_revdeps, revdeps)
316
309
  pkg_revdeps = pkg_revdeps.dup
317
310
  all_revdeps = Array.new
318
- while !pkg_revdeps.empty?
311
+ until pkg_revdeps.empty?
319
312
  parent_name = pkg_revdeps.shift
320
313
  next if all_revdeps.include?(parent_name)
314
+
321
315
  all_revdeps << parent_name
322
316
  pkg_revdeps.concat(revdeps[parent_name].to_a)
323
317
  end
@@ -199,9 +199,7 @@ def update_packages(selected_packages,
199
199
  retry_count: 0, osdeps: true, auto_exclude: false, osdeps_options: Hash.new,
200
200
  report: true)
201
201
 
202
- if from
203
- setup_update_from(from)
204
- end
202
+ setup_update_from(from) if from
205
203
 
206
204
  ops = Autoproj::Ops::Import.new(
207
205
  ws, report_path: (ws.import_report_path if report))
@@ -216,14 +214,15 @@ def update_packages(selected_packages,
216
214
  retry_count: retry_count,
217
215
  install_vcs_packages: (osdeps_options if osdeps),
218
216
  auto_exclude: auto_exclude)
219
- return source_packages, osdep_packages, nil
217
+ [source_packages, osdep_packages, nil]
220
218
  rescue ExcludedSelection => e
221
219
  raise CLIInvalidSelection, e.message, e.backtrace
222
220
  rescue PackageImportFailed => import_failure
223
- if !keep_going
224
- raise
225
- end
226
- return import_failure.source_packages, import_failure.osdep_packages, import_failure
221
+ raise unless keep_going
222
+
223
+ [import_failure.source_packages,
224
+ import_failure.osdep_packages,
225
+ import_failure]
227
226
  end
228
227
 
229
228
  def setup_update_from(other_root)
@@ -50,12 +50,14 @@ def self.load(file)
50
50
 
51
51
  # Load the manifest data contained in +file+
52
52
  def load(file)
53
- if !File.exist?(file)
54
- raise ConfigError.new(File.dirname(file)), "expected an autoproj configuration in #{File.dirname(file)}, but #{file} does not exist"
53
+ unless File.exist?(file)
54
+ raise ConfigError.new(File.dirname(file)),
55
+ "expected an autoproj configuration in #{File.dirname(file)}, "\
56
+ "but #{file} does not exist"
55
57
  end
56
58
 
57
59
  data = Autoproj.in_file(file, Autoproj::YAML_LOAD_ERROR) do
58
- YAML.load(File.read(file)) || Hash.new
60
+ YAML.safe_load(File.read(file)) || {}
59
61
  end
60
62
 
61
63
  @file = file
@@ -81,7 +83,8 @@ def initialize_from_hash(data)
81
83
  @has_layout = !!data['layout']
82
84
 
83
85
  if data['constants']
84
- @constant_definitions = Autoproj.resolve_constant_definitions(data['constants'])
86
+ @constant_definitions =
87
+ Autoproj.resolve_constant_definitions(data['constants'])
85
88
  end
86
89
  end
87
90
 
@@ -107,13 +107,20 @@ def create_or_update(*package_names, all: true, keep_going: false,
107
107
  begin
108
108
  case pkg.importer
109
109
  when Autobuild::Git
110
- Autoproj.message " [#{i}/#{total}] caching #{pkg.name} (git)"
110
+ Autoproj.message(
111
+ " [#{i}/#{total}] caching #{pkg.name} (git)"
112
+ )
111
113
  cache_git(pkg, checkout_only: checkout_only)
112
114
  when Autobuild::ArchiveImporter
113
- Autoproj.message " [#{i}/#{total}] caching #{pkg.name} (archive)"
115
+ Autoproj.message(
116
+ " [#{i}/#{total}] caching #{pkg.name} (archive)"
117
+ )
114
118
  cache_archive(pkg)
115
119
  else
116
- Autoproj.message " [#{i}/#{total}] not caching #{pkg.name} (cannot cache #{pkg.importer.class})"
120
+ Autoproj.message(
121
+ " [#{i}/#{total}] not caching #{pkg.name} "\
122
+ "(cannot cache #{pkg.importer.class})"
123
+ )
117
124
  end
118
125
  rescue Interrupt
119
126
  raise
@@ -170,7 +177,9 @@ def create_or_update_gems(keep_going: true, compile_force: false, compile: [])
170
177
  next if !compile_force && File.file?(expected_platform_gem)
171
178
 
172
179
  begin
173
- compile_gem(gem, artifacts: artifacts, output: real_target_dir)
180
+ compile_gem(
181
+ gem, artifacts: artifacts, output: real_target_dir
182
+ )
174
183
  rescue CompilationFailed
175
184
  unless keep_going
176
185
  raise CompilationFailed, "#{gem} failed to compile"
@@ -200,17 +209,13 @@ def synchronize_gems_cache_dirs(source, target)
200
209
  end
201
210
 
202
211
  def guess_gem_program
203
- if Autobuild.programs['gem']
204
- return Autobuild.programs['gem']
205
- end
212
+ return Autobuild.programs['gem'] if Autobuild.programs['gem']
206
213
 
207
214
  ruby_bin = RbConfig::CONFIG['RUBY_INSTALL_NAME']
208
215
  ruby_bindir = RbConfig::CONFIG['bindir']
209
216
 
210
217
  candidates = ['gem']
211
- if ruby_bin =~ /^ruby(.+)$/
212
- candidates << "gem#{$1}"
213
- end
218
+ candidates << "gem#{$1}" if ruby_bin =~ /^ruby(.+)$/
214
219
 
215
220
  candidates.each do |gem_name|
216
221
  if File.file?(gem_full_path = File.join(ruby_bindir, gem_name))
@@ -219,11 +224,19 @@ def guess_gem_program
219
224
  end
220
225
  end
221
226
 
222
- raise ArgumentError, "cannot find a gem program (tried #{candidates.sort.join(", ")} in #{ruby_bindir})"
227
+ raise ArgumentError,
228
+ 'cannot find a gem program (tried '\
229
+ "#{candidates.sort.join(', ')} in #{ruby_bindir})"
223
230
  end
224
231
 
225
232
  private def compile_gem(gem_path, output:, artifacts: [])
226
- artifacts = artifacts.flat_map { |n| ["--artifact", n] }
233
+ artifacts = artifacts.flat_map do |include, n|
234
+ if include
235
+ ["--include", n]
236
+ else
237
+ ["--exclude", n]
238
+ end
239
+ end
227
240
  unless system(Autobuild.tool('ruby'), '-S', guess_gem_program,
228
241
  'compile', '--output', output, *artifacts, gem_path)
229
242
  raise CompilationFailed, "#{gem_path} failed to compile"
@@ -9,7 +9,7 @@ def self.cached_env_path(root_dir)
9
9
  def self.load_cached_env(root_dir)
10
10
  path = cached_env_path(root_dir)
11
11
  if File.file?(path)
12
- env = YAML.load(File.read(path))
12
+ env = YAML.safe_load(File.read(path))
13
13
  Autobuild::Environment::ExportedEnvironment.new(
14
14
  env['set'], env['unset'], env['update'])
15
15
  end
@@ -20,7 +20,7 @@ def self.save_cached_env(root_dir, env)
20
20
  path = cached_env_path(root_dir)
21
21
  existing =
22
22
  begin
23
- YAML.load(File.read(path))
23
+ YAML.safe_load(File.read(path))
24
24
  rescue Exception
25
25
  end
26
26
 
@@ -288,8 +288,12 @@ def import_selected_packages(selection,
288
288
  if completion_queue.empty? && pending_packages.empty?
289
289
  unless missing_vcs.empty?
290
290
  installed_vcs_packages.merge(
291
- install_vcs_packages_for(*missing_vcs,
292
- **install_vcs_packages))
291
+ install_vcs_packages_for(
292
+ *missing_vcs,
293
+ install_only: import_options[:checkout_only],
294
+ **install_vcs_packages
295
+ )
296
+ )
293
297
  package_queue.concat(missing_vcs)
294
298
  missing_vcs.clear
295
299
  next
@@ -366,7 +370,9 @@ def import_selected_packages(selection,
366
370
  end
367
371
  end
368
372
 
369
- def finalize_package_load(processed_packages, auto_exclude: auto_exclude?)
373
+ def finalize_package_load(processed_packages,
374
+ ignore_optional_dependencies: false,
375
+ auto_exclude: auto_exclude?)
370
376
  manifest = ws.manifest
371
377
 
372
378
  all = Set.new
@@ -14,15 +14,17 @@ def initialize(ws, status_file = "/var/lib/dpkg/status")
14
14
  @installed_packages = nil
15
15
  @installed_versions = nil
16
16
  super(ws, true,
17
- %w{apt-get install},
18
- %w{DEBIAN_FRONTEND=noninteractive apt-get install -y})
17
+ %w[apt-get install],
18
+ %w[DEBIAN_FRONTEND=noninteractive apt-get install -y])
19
19
  end
20
20
 
21
21
  def configure_manager
22
22
  super
23
- ws.config.declare 'apt_dpkg_update', 'boolean',
23
+ ws.config.declare(
24
+ 'apt_dpkg_update', 'boolean',
24
25
  default: 'yes',
25
26
  doc: ['Would you like autoproj to keep apt packages up-to-date?']
27
+ )
26
28
  keep_uptodate?
27
29
  end
28
30
 
@@ -58,11 +60,12 @@ def self.parse_dpkg_status(status_file, virtual: true)
58
60
  dpkg_status << "\n"
59
61
 
60
62
  dpkg_status = StringScanner.new(dpkg_status)
61
- if !dpkg_status.scan(/Package: /)
62
- raise ArgumentError, "expected #{status_file} to have Package: lines but found none"
63
+ unless dpkg_status.scan(/Package: /)
64
+ raise ArgumentError, "expected #{status_file} to have Package: "\
65
+ "lines but found none"
63
66
  end
64
67
 
65
- while paragraph_end = dpkg_status.scan_until(/Package: /)
68
+ while (paragraph_end = dpkg_status.scan_until(/Package: /))
66
69
  paragraph = "Package: #{paragraph_end[0..-10]}"
67
70
  parse_package_status(installed_packages, installed_versions,
68
71
  paragraph, virtual: virtual)
@@ -74,11 +77,10 @@ def self.parse_dpkg_status(status_file, virtual: true)
74
77
 
75
78
  def self.parse_apt_cache_paragraph(paragraph)
76
79
  version = '0'
77
- if paragraph =~ /^Package: (.*)$/
78
- package_name = $1
79
- if paragraph =~ /^Version: (.*)$/
80
- version = $1
81
- end
80
+ if (paragraph_m = /^Package: (.*)$/.match(paragraph))
81
+ package_name = paragraph_m[1]
82
+ version_m = /^Version: (.*)$/.match(paragraph)
83
+ version = version_m[1] if version_m
82
84
  end
83
85
  [package_name, version]
84
86
  end
@@ -87,23 +89,24 @@ def self.parse_packages_versions(packages)
87
89
  packages_versions = {}
88
90
  apt_cache_show = `apt-cache show --no-all-versions #{packages.join(' ')}`
89
91
  apt_cache_show = StringScanner.new(apt_cache_show)
90
- if !apt_cache_show.scan(/Package: /)
91
- return packages_versions
92
- end
92
+ return packages_versions unless apt_cache_show.scan(/Package: /)
93
93
 
94
- while paragraph_end = apt_cache_show.scan_until(/Package: /)
94
+ while (paragraph_end = apt_cache_show.scan_until(/Package: /))
95
95
  paragraph = "Package: #{paragraph_end[0..-10]}"
96
96
  package_name, version = parse_apt_cache_paragraph(paragraph)
97
97
  packages_versions[package_name] = DebianVersion.new(version)
98
98
  end
99
- package_name, version = parse_apt_cache_paragraph("Package: #{apt_cache_show.rest}")
99
+ package_name, version = parse_apt_cache_paragraph(
100
+ "Package: #{apt_cache_show.rest}"
101
+ )
100
102
  packages_versions[package_name] = DebianVersion.new(version)
101
103
  packages_versions
102
104
  end
103
105
 
104
106
  def updated?(package, available_version)
105
- # Consider up-to-date if the package is provided by another package (purely virtual)
106
- # Ideally, we should check the version of the package that provides it
107
+ # Consider up-to-date if the package is provided by another
108
+ # package (purely virtual) Ideally, we should check the version
109
+ # of the package that provides it
107
110
  return true unless available_version && @installed_versions[package]
108
111
 
109
112
  (available_version <= @installed_versions[package])
@@ -111,8 +114,13 @@ def updated?(package, available_version)
111
114
 
112
115
  # On a dpkg-enabled system, checks if the provided package is installed
113
116
  # and returns true if it is the case
114
- def installed?(package_name, filter_uptodate_packages: false, install_only: false)
115
- @installed_packages, @installed_versions = self.class.parse_dpkg_status(status_file) unless @installed_packages && @installed_versions
117
+ def installed?(package_name, filter_uptodate_packages: false,
118
+ install_only: false)
119
+ unless @installed_packages && @installed_versions
120
+ @installed_packages, @installed_versions =
121
+ self.class.parse_dpkg_status(status_file)
122
+ end
123
+
116
124
  if package_name =~ /^(\w[a-z0-9+-.]+)/
117
125
  @installed_packages.include?($1)
118
126
  else
@@ -122,11 +130,18 @@ def installed?(package_name, filter_uptodate_packages: false, install_only: fals
122
130
  end
123
131
 
124
132
  def install(packages, filter_uptodate_packages: false, install_only: false)
125
- packages_versions = self.class.parse_packages_versions(packages)
126
133
  if filter_uptodate_packages || install_only
127
- packages = packages.find_all do |package_name|
128
- !installed?(package_name) || (keep_uptodate? && !updated?(package_name, packages_versions[package_name]))
134
+ already_installed, missing = packages.partition do |package_name|
135
+ installed?(package_name)
136
+ end
137
+
138
+ if keep_uptodate? && !install_only
139
+ packages_versions = self.class.parse_packages_versions(already_installed)
140
+ need_update = already_installed.find_all do |package_name|
141
+ !updated?(package_name, packages_versions[package_name])
142
+ end
129
143
  end
144
+ packages = missing + (need_update || [])
130
145
  end
131
146
 
132
147
  if super(packages)
@@ -89,6 +89,7 @@ def initialize_environment
89
89
  Bundler.rubygems.gem_path
90
90
  .none? { |gem_p| p.start_with?(gem_p) }
91
91
  end
92
+
92
93
  # And discover the system's rubylib
93
94
  if (system_rubylib = discover_rubylib)
94
95
  # Do not explicitely add the system rubylib to the
@@ -7,8 +7,10 @@ def self.execute(command_line, with_locking, with_root, env: Autobuild.env)
7
7
  if with_locking
8
8
  File.open('/tmp/autoproj_osdeps_lock', 'w') do |lock_io|
9
9
  begin
10
- while !lock_io.flock(File::LOCK_EX | File::LOCK_NB)
11
- Autoproj.message " waiting for other autoproj instances to finish their osdeps installation"
10
+ until lock_io.flock(File::LOCK_EX | File::LOCK_NB)
11
+ Autoproj.message " waiting for other autoproj "\
12
+ "instances to finish their osdeps "\
13
+ "installation"
12
14
  sleep 5
13
15
  end
14
16
  return execute(command_line, false, with_root, env: env)
@@ -17,7 +19,7 @@ def self.execute(command_line, with_locking, with_root, env: Autobuild.env)
17
19
  end
18
20
  end
19
21
  end
20
-
22
+
21
23
  if with_root
22
24
  sudo = Autobuild.tool_in_path('sudo', env: env)
23
25
  command_line = [sudo, *command_line]
@@ -34,10 +36,12 @@ def self.execute(command_line, with_locking, with_root, env: Autobuild.env)
34
36
  # This declares if this package manager cannot be used concurrently.
35
37
  # If it is the case, autoproj will ensure that there is no two
36
38
  # autoproj instances running this package manager at the same time
37
- #
39
+ #
38
40
  # @return [Boolean]
39
41
  # @see needs_locking=
40
- def needs_locking?; !!@needs_locking end
42
+ def needs_locking?
43
+ @needs_locking
44
+ end
41
45
 
42
46
  # Overrides the {#needs_root?} flag
43
47
  attr_writer :needs_root
@@ -45,10 +49,12 @@ def needs_locking?; !!@needs_locking end
45
49
  #
46
50
  # This declares if the command line(s) for this package manager
47
51
  # should be started as root. Root access is provided using sudo
48
- #
52
+ #
49
53
  # @return [Boolean]
50
54
  # @see needs_root=
51
- def needs_root?; !!@needs_root end
55
+ def needs_root?
56
+ @needs_root
57
+ end
52
58
 
53
59
  # Command line used by autoproj to install packages
54
60
  #
@@ -83,10 +89,13 @@ def needs_root?; !!@needs_root end
83
89
  # itself, see {#auto_install_cmd}.
84
90
  # @param [Boolean] needs_root if the command lines should be started
85
91
  # as root or not. See {#needs_root?}
86
- def initialize(ws, needs_locking, user_install_cmd, auto_install_cmd,needs_root=true)
92
+ def initialize(ws, needs_locking, user_install_cmd,
93
+ auto_install_cmd, needs_root = true)
87
94
  super(ws)
88
- @needs_locking, @user_install_cmd, @auto_install_cmd,@needs_root =
89
- needs_locking, user_install_cmd, auto_install_cmd, needs_root
95
+ @needs_locking = needs_locking
96
+ @user_install_cmd = user_install_cmd
97
+ @auto_install_cmd = auto_install_cmd
98
+ @needs_root = needs_root
90
99
  end
91
100
 
92
101
  # Generate the shell script that would allow the user to install
@@ -98,7 +107,8 @@ def initialize(ws, needs_locking, user_install_cmd, auto_install_cmd,needs_root=
98
107
  # command-line pattern that should be used to generate the script.
99
108
  # If given, it overrides the default value stored in
100
109
  # {#user_install_cmd]
101
- def generate_user_os_script(os_packages, user_install_cmd: self.user_install_cmd)
110
+ def generate_user_os_script(os_packages,
111
+ user_install_cmd: self.user_install_cmd)
102
112
  if user_install_cmd
103
113
  user_install_cmd.join(" ") + " " + os_packages.join("' '")
104
114
  else generate_auto_os_script(os_packages)
@@ -114,7 +124,8 @@ def generate_user_os_script(os_packages, user_install_cmd: self.user_install_cmd
114
124
  # command-line pattern that should be used to generate the script.
115
125
  # If given, it overrides the default value stored in
116
126
  # {#auto_install_cmd]
117
- def generate_auto_os_script(os_packages, auto_install_cmd: self.auto_install_cmd)
127
+ def generate_auto_os_script(os_packages,
128
+ auto_install_cmd: self.auto_install_cmd)
118
129
  auto_install_cmd.join(" ") + " " + os_packages.join("' '")
119
130
  end
120
131
 
@@ -139,9 +150,9 @@ def osdeps_interaction(os_packages, shell_script)
139
150
  # anyway, do so now
140
151
  puts <<-EOMSG
141
152
 
142
- #{Autoproj.color("The build process and/or the packages require some other software to be installed", :bold)}
143
- #{Autoproj.color("and you required autoproj to not install them itself", :bold)}
144
- #{Autoproj.color("\nIf these packages are already installed, simply ignore this message\n", :red) if !respond_to?(:filter_uptodate_packages)}
153
+ #{Autoproj.color('The build process and/or the packages require some other software to be installed', :bold)}
154
+ #{Autoproj.color('and you required autoproj to not install them itself', :bold)}
155
+ #{Autoproj.color('\nIf these packages are already installed, simply ignore this message\n', :red) unless respond_to?(:filter_uptodate_packages)}
145
156
  The following packages are available as OS dependencies, i.e. as prebuilt
146
157
  packages provided by your distribution / operating system. You will have to
147
158
  install them manually if they are not already installed
@@ -152,8 +163,8 @@ def osdeps_interaction(os_packages, shell_script)
152
163
 
153
164
  #{shell_script.split("\n").join("\n| ")}
154
165
 
155
- EOMSG
156
- print " #{Autoproj.color("Press ENTER to continue ", :bold)}"
166
+ EOMSG
167
+ print " #{Autoproj.color('Press ENTER to continue ', :bold)}"
157
168
  STDOUT.flush
158
169
  STDIN.readline
159
170
  puts
@@ -172,23 +183,33 @@ def osdeps_interaction(os_packages, shell_script)
172
183
  # packages. See the option in {#generate_auto_os_script}
173
184
  # @return [Boolean] true if packages got installed, false otherwise
174
185
  def install(packages, filter_uptodate_packages: false, install_only: false,
175
- auto_install_cmd: self.auto_install_cmd, user_install_cmd: self.user_install_cmd)
186
+ auto_install_cmd: self.auto_install_cmd,
187
+ user_install_cmd: self.user_install_cmd)
176
188
  return if packages.empty?
177
189
 
178
190
  handled_os = ws.supported_operating_system?
179
191
  if handled_os
180
- shell_script = generate_auto_os_script(packages, auto_install_cmd: auto_install_cmd)
181
- user_shell_script = generate_user_os_script(packages, user_install_cmd: user_install_cmd)
192
+ shell_script = generate_auto_os_script(
193
+ packages, auto_install_cmd: auto_install_cmd
194
+ )
195
+ user_shell_script = generate_user_os_script(
196
+ packages, user_install_cmd: user_install_cmd
197
+ )
182
198
  end
183
199
  if osdeps_interaction(packages, user_shell_script)
184
- Autoproj.message " installing OS packages: #{packages.sort.join(", ")}"
200
+ Autoproj.message " installing OS packages: "\
201
+ "#{packages.sort.join(', ')}"
185
202
 
186
203
  if Autoproj.verbose
187
- Autoproj.message "Generating installation script for non-ruby OS dependencies"
204
+ Autoproj.message "Generating installation script for "\
205
+ "non-ruby OS dependencies"
188
206
  Autoproj.message shell_script
189
207
  end
190
208
 
191
- ShellScriptManager.execute([*auto_install_cmd, *packages], needs_locking?, needs_root?, env: ws.env)
209
+ ShellScriptManager.execute(
210
+ [*auto_install_cmd, *packages], needs_locking?,
211
+ needs_root?, env: ws.env
212
+ )
192
213
  return true
193
214
  end
194
215
  false
@@ -196,4 +217,3 @@ def install(packages, filter_uptodate_packages: false, install_only: false,
196
217
  end
197
218
  end
198
219
  end
199
-
@@ -30,13 +30,15 @@ def self.load(package, file, ros_manifest: false)
30
30
  # @param [Boolean] ros_manifest whether the file follows the ROS format
31
31
  # @return [PackageManifest]
32
32
  # @see load
33
- def self.parse(package, contents, path: '<loaded from string>', loader_class: Loader)
33
+ def self.parse(package, contents,
34
+ path: '<loaded from string>', loader_class: Loader)
34
35
  manifest = PackageManifest.new(package, path)
35
36
  loader = loader_class.new(path, manifest)
36
37
  begin
37
38
  REXML::Document.parse_stream(contents, loader)
38
39
  rescue REXML::ParseException => e
39
- raise Autobuild::PackageException.new(package.name, 'prepare'), "invalid #{file}: #{e.message}"
40
+ raise Autobuild::PackageException.new(package.name, 'prepare'),
41
+ "invalid #{file}: #{e.message}"
40
42
  end
41
43
  manifest
42
44
  end
@@ -45,7 +47,7 @@ def self.parse(package, contents, path: '<loaded from string>', loader_class: Lo
45
47
  Dependency = Struct.new :name, :optional, :modes
46
48
 
47
49
  # The Autobuild::Package instance this manifest applies on
48
- attr_reader :package
50
+ attr_accessor :package
49
51
  attr_reader :path
50
52
  attr_accessor :description
51
53
  attr_accessor :brief_description
@@ -64,7 +66,7 @@ def add_dependency(name, optional: false, modes: [])
64
66
  end
65
67
 
66
68
  def has_documentation?
67
- !!description
69
+ description
68
70
  end
69
71
 
70
72
  def documentation
@@ -72,7 +74,7 @@ def documentation
72
74
  end
73
75
 
74
76
  def has_short_documentation?
75
- !!brief_description
77
+ brief_description
76
78
  end
77
79
 
78
80
  def short_documentation
@@ -95,11 +97,12 @@ def initialize(package, path = nil, null: false)
95
97
  # Whether this is a null manifest (used for packages that have actually
96
98
  # no manifest) or not
97
99
  def null?
98
- !!@null
100
+ @null
99
101
  end
100
102
 
101
- def each_dependency(in_modes = Array.new, &block)
102
- return enum_for(__method__, in_modes) if !block_given?
103
+ def each_dependency(in_modes = [])
104
+ return enum_for(__method__, in_modes) unless block_given?
105
+
103
106
  dependencies.each do |dep|
104
107
  if dep.modes.empty? || in_modes.any? { |m| dep.modes.include?(m) }
105
108
  yield(dep.name, dep.optional)
@@ -108,24 +111,28 @@ def each_dependency(in_modes = Array.new, &block)
108
111
  end
109
112
 
110
113
  def each_os_dependency(modes = Array.new, &block)
111
- Autoproj.warn_deprecated "#{self.class}##{__method__}", "call #each_dependency instead"
112
- return each_dependency(modes, &block)
114
+ Autoproj.warn_deprecated "#{self.class}##{__method__}",
115
+ "call #each_dependency instead"
116
+ each_dependency(modes, &block)
113
117
  end
114
118
 
115
119
  def each_package_dependency(modes = Array.new, &block)
116
- Autoproj.warn_deprecated "#{self.class}##{__method__}", "call #each_dependency instead"
117
- return each_dependency(modes, &block)
120
+ Autoproj.warn_deprecated "#{self.class}##{__method__}",
121
+ "call #each_dependency instead"
122
+ each_dependency(modes, &block)
118
123
  end
119
124
 
120
125
  def each_rock_maintainer
121
- return enum_for(__method__) if !block_given?
126
+ return enum_for(__method__) unless block_given?
127
+
122
128
  rock_maintainers.each do |m|
123
129
  yield(m.name, m.email)
124
130
  end
125
131
  end
126
132
 
127
133
  def each_maintainer
128
- return enum_for(__method__) if !block_given?
134
+ return enum_for(__method__) unless block_given?
135
+
129
136
  maintainers.each do |m|
130
137
  yield(m.name, m.email)
131
138
  end
@@ -134,7 +141,8 @@ def each_maintainer
134
141
  # Enumerates the name and email of each author. If no email is present,
135
142
  # yields (name, nil)
136
143
  def each_author
137
- return enum_for(__method__) if !block_given?
144
+ return enum_for(__method__) unless block_given?
145
+
138
146
  authors.each do |m|
139
147
  yield(m.name, m.email)
140
148
  end
@@ -178,11 +186,13 @@ def initialize(path, manifest)
178
186
 
179
187
  def parse_depend_tag(tag_name, attributes, modes: [], optional: false)
180
188
  package = attributes['package'] || attributes['name']
181
- if !package
182
- raise InvalidPackageManifest, "found '#{tag_name}' tag in #{path} without a 'package' attribute"
189
+ unless package
190
+ raise InvalidPackageManifest,
191
+ "found '#{tag_name}' tag in #{path} "\
192
+ "without a 'package' attribute"
183
193
  end
184
194
 
185
- if tag_modes = attributes['modes']
195
+ if (tag_modes = attributes['modes'])
186
196
  modes += tag_modes.split(',')
187
197
  end
188
198
 
@@ -195,7 +205,7 @@ def parse_depend_tag(tag_name, attributes, modes: [], optional: false)
195
205
  def parse_contact_field(text)
196
206
  text.strip.split(',').map do |str|
197
207
  name, email = str.split('/').map(&:strip)
198
- email = nil if email && email.empty?
208
+ email = nil if email&.empty?
199
209
  ContactInfo.new(name, email)
200
210
  end
201
211
  end
@@ -213,7 +223,7 @@ def toplevel_tag_start(name, attributes)
213
223
  elsif name =~ /^(\w+)_depend$/
214
224
  parse_depend_tag(name, attributes, modes: [$1])
215
225
  elsif name == 'description'
216
- if brief = attributes['brief']
226
+ if (brief = attributes['brief'])
217
227
  manifest.brief_description = brief
218
228
  end
219
229
  @tag_text = ''
@@ -225,14 +235,13 @@ def toplevel_tag_start(name, attributes)
225
235
  @tag_text = nil
226
236
  end
227
237
  end
238
+
228
239
  def toplevel_tag_end(name)
229
240
  if AUTHOR_FIELDS.include?(name)
230
241
  manifest.send("#{name}s").concat(parse_contact_field(@tag_text))
231
242
  elsif TEXT_FIELDS.include?(name)
232
243
  field = @tag_text.strip
233
- if !field.empty?
234
- manifest.send("#{name}=", field)
235
- end
244
+ manifest.send("#{name}=", field) unless field.empty?
236
245
  elsif name == 'tags'
237
246
  manifest.tags.concat(@tag_text.strip.split(',').map(&:strip))
238
247
  end
@@ -245,10 +254,10 @@ def toplevel_tag_end(name)
245
254
  # REXML stream parser object used to load the XML contents into a
246
255
  # {PackageManifest} object
247
256
  class RosLoader < Loader
248
- SUPPORTED_MODES = ['test', 'doc'].freeze
249
- DEPEND_TAGS = Set['depend', 'build_depend', 'build_export_depend',
250
- 'buildtool_depend', 'buildtool_export_depend',
251
- 'exec_depend', 'test_depend', 'run_depend', 'doc_depend']
257
+ SUPPORTED_MODES = %w[test doc].freeze
258
+ DEPEND_TAGS = %w[depend build_depend build_export_depend
259
+ buildtool_depend buildtool_export_depend
260
+ exec_depend test_depend run_depend doc_depend].to_set.freeze
252
261
 
253
262
  def toplevel_tag_start(name, attributes)
254
263
  if DEPEND_TAGS.include?(name)
@@ -265,18 +274,21 @@ def toplevel_tag_start(name, attributes)
265
274
 
266
275
  def toplevel_tag_end(name)
267
276
  if DEPEND_TAGS.include?(name)
268
- raise InvalidPackageManifest, "found '#{name}' tag in #{path} without content" if @tag_text.strip.empty?
277
+ if @tag_text.strip.empty?
278
+ raise InvalidPackageManifest, "found '#{name}' tag in #{path} "\
279
+ "without content"
280
+ end
269
281
 
270
282
  mode = []
271
- if name =~ /^(\w+)_depend$/
272
- mode = SUPPORTED_MODES & [$1]
283
+ if (m = /^(\w+)_depend$/.match(name))
284
+ mode = SUPPORTED_MODES & [m[1]]
273
285
  end
274
286
 
275
287
  manifest.add_dependency(@tag_text, modes: mode)
276
288
  elsif AUTHOR_FIELDS.include?(name)
277
289
  author_name = @tag_text.strip
278
290
  email = @author_email ? @author_email.strip : nil
279
- email = nil if email && email.empty?
291
+ email = nil if email&.empty?
280
292
  contact = ContactInfo.new(author_name, email)
281
293
  manifest.send("#{name}s").concat([contact])
282
294
  elsif TEXT_FIELDS.include?(name)
@@ -1,3 +1,3 @@
1
1
  module Autoproj
2
- VERSION = "2.12.0"
2
+ VERSION = "2.12.1"
3
3
  end
@@ -243,7 +243,7 @@ def overrides_dir
243
243
  File.join(config_dir, OVERRIDES_DIR)
244
244
  end
245
245
 
246
- IMPORT_REPORT_BASENAME = "import_report.json"
246
+ IMPORT_REPORT_BASENAME = "import_report.json".freeze
247
247
 
248
248
  # The full path to the update report
249
249
  #
@@ -252,7 +252,7 @@ def import_report_path
252
252
  File.join(log_dir, IMPORT_REPORT_BASENAME)
253
253
  end
254
254
 
255
- BUILD_REPORT_BASENAME = "build_report.json"
255
+ BUILD_REPORT_BASENAME = "build_report.json".freeze
256
256
 
257
257
  # The full path to the build report
258
258
  #
@@ -306,14 +306,18 @@ def save_config
306
306
  def autodetect_operating_system(force: false)
307
307
  if force || !os_package_resolver.operating_system
308
308
  begin
309
- Autobuild.progress_start :operating_system_autodetection,
309
+ Autobuild.progress_start(
310
+ :operating_system_autodetection,
310
311
  "autodetecting the operating system"
312
+ )
311
313
  names, versions = OSPackageResolver.autodetect_operating_system
312
314
  os_package_resolver.operating_system = [names, versions]
313
315
  os_repository_resolver.operating_system = [names, versions]
314
- Autobuild.progress :operating_system_autodetection,
316
+ Autobuild.progress(
317
+ :operating_system_autodetection,
315
318
  "operating system: #{(names - ['default']).join(',')} -"\
316
319
  " #{(versions - ['default']).join(',')}"
320
+ )
317
321
  ensure
318
322
  Autobuild.progress_done :operating_system_autodetection
319
323
  end
@@ -416,7 +420,7 @@ def rewrite_shims
416
420
  gemfile = File.join(dot_autoproj_dir, 'Gemfile')
417
421
  binstubs = File.join(dot_autoproj_dir, 'bin')
418
422
  Ops::Install.rewrite_shims(binstubs, config.ruby_executable,
419
- root_dir, gemfile, config.gems_gem_home)
423
+ root_dir, gemfile, config.gems_gem_home)
420
424
  end
421
425
 
422
426
  def update_bundler
@@ -601,6 +605,10 @@ def register_workspace
601
605
  current_workspaces = Workspace.registered_workspaces
602
606
  existing = current_workspaces.find { |w| w.root_dir == root_dir }
603
607
  if existing
608
+ if existing.prefix_dir == prefix_dir && existing.build_dir == build_dir
609
+ return
610
+ end
611
+
604
612
  existing.prefix_dir = prefix_dir
605
613
  existing.build_dir = build_dir
606
614
  else
@@ -818,10 +826,12 @@ def all_os_packages(import_missing: false, parallel: config.parallel_import_leve
818
826
  if import_missing
819
827
  ops = Autoproj::Ops::Import.new(self)
820
828
  _, all_os_packages =
821
- ops.import_packages(manifest.default_packages,
822
- checkout_only: true, only_local: true, reset: false,
823
- recursive: true, keep_going: true, parallel: parallel,
824
- retry_count: 0)
829
+ ops.import_packages(
830
+ manifest.default_packages,
831
+ checkout_only: true, only_local: true, reset: false,
832
+ recursive: true, keep_going: true, parallel: parallel,
833
+ retry_count: 0
834
+ )
825
835
  all_os_packages
826
836
  else
827
837
  manifest.all_selected_osdep_packages
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: autoproj
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.12.0
4
+ version: 2.12.1
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-02-27 00:00:00.000000000 Z
11
+ date: 2020-04-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler