autoproj 2.9.0 → 2.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +113 -0
  3. data/.travis.yml +0 -2
  4. data/Gemfile +1 -0
  5. data/README.md +59 -14
  6. data/bin/autoproj_bootstrap +21 -12
  7. data/bin/autoproj_bootstrap.in +2 -2
  8. data/bin/autoproj_install +21 -12
  9. data/bin/autoproj_install.in +2 -2
  10. data/lib/autoproj/aruba_minitest.rb +4 -4
  11. data/lib/autoproj/autobuild_extensions/dsl.rb +91 -70
  12. data/lib/autoproj/autobuild_extensions/package.rb +20 -1
  13. data/lib/autoproj/build_option.rb +24 -7
  14. data/lib/autoproj/cli/base.rb +12 -1
  15. data/lib/autoproj/cli/bootstrap.rb +9 -3
  16. data/lib/autoproj/cli/build.rb +17 -13
  17. data/lib/autoproj/cli/envsh.rb +1 -1
  18. data/lib/autoproj/cli/exec.rb +5 -7
  19. data/lib/autoproj/cli/main.rb +44 -9
  20. data/lib/autoproj/cli/main_test.rb +2 -0
  21. data/lib/autoproj/cli/test.rb +29 -6
  22. data/lib/autoproj/cli/version.rb +52 -0
  23. data/lib/autoproj/cli/versions.rb +4 -1
  24. data/lib/autoproj/cli/watch.rb +2 -1
  25. data/lib/autoproj/configuration.rb +49 -11
  26. data/lib/autoproj/default.osdeps +9 -0
  27. data/lib/autoproj/manifest.rb +6 -6
  28. data/lib/autoproj/ops/build.rb +5 -15
  29. data/lib/autoproj/ops/import.rb +22 -3
  30. data/lib/autoproj/ops/install.rb +19 -10
  31. data/lib/autoproj/ops/main_config_switcher.rb +12 -6
  32. data/lib/autoproj/ops/snapshot.rb +5 -1
  33. data/lib/autoproj/os_package_resolver.rb +245 -209
  34. data/lib/autoproj/package_selection.rb +18 -0
  35. data/lib/autoproj/reporter.rb +45 -31
  36. data/lib/autoproj/test.rb +107 -56
  37. data/lib/autoproj/version.rb +1 -1
  38. data/lib/autoproj/workspace.rb +90 -72
  39. data/shell/completion/amake_bash +1 -0
  40. data/shell/completion/amake_zsh +1 -0
  41. data/shell/completion/autoproj_bash +2 -0
  42. data/shell/completion/autoproj_zsh +2 -0
  43. metadata +5 -3
@@ -50,6 +50,24 @@ def empty?
50
50
  selection.empty?
51
51
  end
52
52
 
53
+ # Test if a package is in the ignore list
54
+ #
55
+ # @param [String] pkg_name Name of the package
56
+ # @return [Bool] true, if package is in the ignore list, false
57
+ # otherwise
58
+ def ignored?(pkg_name)
59
+ ignores.include?(pkg_name)
60
+ end
61
+
62
+ # Test if a package is in the exclusions list
63
+ #
64
+ # @param [String] pkg_name Name of the package
65
+ # @return [Bool] true, if package is in the exclusion list, false
66
+ # otherwise
67
+ def excluded?(pkg_name)
68
+ exclusions.include?(pkg_name)
69
+ end
70
+
53
71
  # Returns the source packages selected explicitely or through
54
72
  # dependencies
55
73
  #
@@ -15,6 +15,14 @@ def self.silent(&block)
15
15
  Autobuild.silent(&block)
16
16
  end
17
17
 
18
+ def self.not_silent
19
+ silent = Autobuild.silent?
20
+ Autobuild.silent = false
21
+ yield
22
+ ensure
23
+ Autobuild.silent = silent
24
+ end
25
+
18
26
  def self.message(*args)
19
27
  Autobuild.message(*args)
20
28
  end
@@ -43,10 +51,12 @@ def self.report_interrupt(io = STDERR)
43
51
  class Reporter < Autobuild::Reporter
44
52
  def error(error)
45
53
  error_lines = error.to_s.split("\n")
46
- Autoproj.message("Command failed", :bold, :red, STDERR)
47
- Autoproj.message("#{error_lines.shift}", :bold, :red, STDERR)
48
- error_lines.each do |line|
49
- Autoproj.message line, STDERR
54
+ Autoproj.not_silent do
55
+ Autoproj.message("Command failed", :bold, :red, STDERR)
56
+ Autoproj.message(error_lines.shift.to_s, :bold, :red, STDERR)
57
+ error_lines.each do |line|
58
+ Autoproj.message line, STDERR
59
+ end
50
60
  end
51
61
  end
52
62
 
@@ -56,6 +66,7 @@ def reset_timer
56
66
 
57
67
  def elapsed_time
58
68
  return unless @timer_start
69
+
59
70
  secs = Time.now - @timer_start
60
71
  return if secs < 1
61
72
 
@@ -63,6 +74,7 @@ def elapsed_time
63
74
  if secs > 0
64
75
  secs, n = secs.divmod(count)
65
76
  next if (val = n.to_i) == 0
77
+
66
78
  "#{val} #{val > 1 ? name + 's' : name}"
67
79
  end
68
80
  end.compact.reverse.join(' ')
@@ -70,7 +82,8 @@ def elapsed_time
70
82
 
71
83
  def success
72
84
  elapsed_string = elapsed_time ? " (took #{elapsed_time})" : ''
73
- Autoproj.message("Command finished successfully at #{Time.now}#{elapsed_string}", :bold, :green)
85
+ Autoproj.message("Command finished successfully at "\
86
+ "#{Time.now}#{elapsed_string}", :bold, :green)
74
87
  if Autobuild.post_success_message
75
88
  Autoproj.message Autobuild.post_success_message
76
89
  end
@@ -79,57 +92,58 @@ def success
79
92
 
80
93
  def self.report(root_dir: nil, silent: nil, debug: Autobuild.debug,
81
94
  on_package_success: :report,
82
- on_package_failures: Autobuild::Reporting.default_report_on_package_failures)
95
+ on_package_failures: Autobuild::Reporting
96
+ .default_report_on_package_failures)
83
97
  reporter = Autoproj::Reporter.new
84
98
  Autobuild::Reporting << reporter
85
99
  interrupted = nil
86
100
 
87
- if !silent.nil?
101
+ unless silent.nil?
88
102
  on_package_success = silent ? :silent : :report
89
103
  end
90
- silent_errors = [:report_silent, :exit_silent].include?(on_package_failures)
91
-
92
- package_failures = Autobuild::Reporting.report(on_package_failures: :report_silent) do
93
- begin
94
- reporter.reset_timer
95
- yield
96
- rescue Interrupt => e
97
- interrupted = e
104
+ silent_errors = %I[report_silent exit_silent].include?(on_package_failures)
105
+
106
+ package_failures =
107
+ Autobuild::Reporting.report(on_package_failures: :report_silent) do
108
+ begin
109
+ reporter.reset_timer
110
+ yield
111
+ rescue Interrupt => e
112
+ interrupted = e
113
+ end
98
114
  end
99
- end
100
115
 
101
116
 
102
117
  if package_failures.empty?
103
- if interrupted
104
- raise interrupted
105
- elsif on_package_success == :report
106
- Autobuild::Reporting.success
107
- end
118
+ raise interrupted if interrupted
119
+
120
+ Autobuild::Reporting.success if on_package_success == :report
108
121
  return []
109
122
  else
110
- Autobuild::Reporting.report_finish_on_error(
111
- package_failures, on_package_failures: on_package_failures, interrupted_by: interrupted)
123
+ Autobuild::Reporting.report_finish_on_error(package_failures,
124
+ on_package_failures: on_package_failures,
125
+ interrupted_by: interrupted)
112
126
  end
113
-
114
127
  rescue CLI::CLIException, InvalidWorkspace, ConfigError => e
115
128
  if silent_errors
116
- return [e]
129
+ [e]
117
130
  elsif on_package_failures == :raise
118
131
  raise e
119
132
  elsif on_package_failures == :report
120
- Autoproj.error e.message
133
+ Autoproj.not_silent do
134
+ Autoproj.error e.message
135
+ end
121
136
  [e]
122
137
  elsif on_package_failures == :exit
123
- Autoproj.error e.message
138
+ Autoproj.not_silent do
139
+ Autoproj.error e.message
140
+ end
124
141
  exit 1
125
142
  end
126
-
127
143
  rescue SystemExit
128
144
  raise
129
145
  ensure
130
- if !silent_errors && interrupted
131
- report_interrupt
132
- end
146
+ report_interrupt if !silent_errors && interrupted
133
147
 
134
148
  Autobuild::Reporting.remove(reporter) if reporter
135
149
  end
@@ -55,6 +55,14 @@ module SelfTest
55
55
  attr_reader :ws
56
56
 
57
57
  def setup
58
+ if ENV['AUTOPROJ_CURRENT_ROOT']
59
+ raise "cannot have a workspace's env.sh loaded while running the "\
60
+ "Autoproj test suite"
61
+ end
62
+
63
+ if defined?(Autoproj::CLI::Main)
64
+ Autoproj::CLI::Main.default_report_on_package_failures = :raise
65
+ end
58
66
  FileUtils.rm_rf fixture_gem_home
59
67
  @gem_server_pid = nil
60
68
  @tmpdir = Array.new
@@ -75,11 +83,15 @@ def teardown
75
83
  Autobuild::Package.clear
76
84
  Autoproj.silent = false
77
85
 
78
- if @gem_server_pid
79
- stop_gem_server
80
- end
86
+ stop_gem_server if @gem_server_pid
81
87
 
82
88
  FileUtils.rm_rf fixture_gem_home
89
+ if defined?(Autoproj::CLI::Main)
90
+ Autoproj::CLI::Main.default_report_on_package_failures = nil
91
+ end
92
+ if ENV.delete('AUTOPROJ_CURRENT_ROOT')
93
+ raise "AUTOPROJ_CURRENT_ROOT has been set by this test !!!!"
94
+ end
83
95
  end
84
96
 
85
97
  def create_bootstrap
@@ -102,9 +114,7 @@ def scripts_dir
102
114
 
103
115
  def find_gem_dir(gem_name)
104
116
  Bundler.definition.specs.each do |spec|
105
- if spec.name == gem_name
106
- return spec
107
- end
117
+ return spec if spec.name == gem_name
108
118
  end
109
119
  nil
110
120
  end
@@ -119,22 +129,21 @@ def autoproj_gemfile_to_local_checkout
119
129
  end
120
130
 
121
131
  def invoke_test_script(name, *arguments,
122
- dir: nil,
123
- gemfile_source: nil,
124
- use_autoproj_from_rubygems: (ENV['USE_AUTOPROJ_FROM_RUBYGEMS'] == '1'),
125
- seed_config: File.join(scripts_dir, 'seed-config.yml'),
126
- env: Hash.new, display_output: false, copy_from: nil,
127
- **system_options)
128
- package_base_dir = File.expand_path(File.join('..', '..'), File.dirname(__FILE__))
132
+ dir: nil,
133
+ gemfile_source: nil,
134
+ use_autoproj_from_rubygems: (ENV['USE_AUTOPROJ_FROM_RUBYGEMS'] == '1'),
135
+ interactive: true,
136
+ seed_config: File.join(scripts_dir, 'seed-config.yml'),
137
+ env: Hash.new, display_output: false, copy_from: nil,
138
+ **system_options)
139
+ package_base_dir = File.expand_path(File.join('..', '..'), __dir__)
140
+
129
141
  script = File.expand_path(name, scripts_dir)
130
- if !File.file?(script)
142
+ unless File.file?(script)
131
143
  raise ArgumentError, "no test script #{name} in #{scripts_dir}"
132
144
  end
133
145
 
134
- if seed_config
135
- arguments << '--seed-config' << seed_config
136
- end
137
-
146
+ arguments << '--seed-config' << seed_config if seed_config
138
147
  dir ||= make_tmpdir
139
148
 
140
149
  if gemfile_source || !use_autoproj_from_rubygems
@@ -145,6 +154,8 @@ def invoke_test_script(name, *arguments,
145
154
  arguments << "--gemfile" << gemfile_path << "--gem-source" << "http://localhost:8808"
146
155
  end
147
156
 
157
+ arguments << "--no-interactive" unless interactive
158
+
148
159
  if copy_from
149
160
  test_workspace = File.expand_path(copy_from, scripts_dir)
150
161
  if File.directory?(test_workspace)
@@ -155,13 +166,13 @@ def invoke_test_script(name, *arguments,
155
166
  result = nil
156
167
  stdout, stderr = capture_subprocess_io do
157
168
  default_env = Hash[
158
- 'TEST_COMMAND_NAME' => self.to_s.gsub(/[^\w]/, '_'),
169
+ 'TEST_COMMAND_NAME' => to_s.gsub(/[^\w]/, '_'),
159
170
  'PACKAGE_BASE_DIR' => package_base_dir,
160
171
  'RUBY' => Gem.ruby
161
172
  ]
162
173
  result = Bundler.clean_system(
163
- default_env.merge(env),
164
- script, *arguments, in: :close, **Hash[chdir: dir].merge(system_options))
174
+ default_env.merge(env), script, *arguments,
175
+ in: :close, **Hash[chdir: dir].merge(system_options))
165
176
  end
166
177
 
167
178
  if !result
@@ -172,7 +183,7 @@ def invoke_test_script(name, *arguments,
172
183
  puts stdout
173
184
  puts stderr
174
185
  end
175
- return dir, stdout, stderr
186
+ [dir, stdout, stderr]
176
187
  end
177
188
 
178
189
  def fixture_gem_home
@@ -181,20 +192,29 @@ def fixture_gem_home
181
192
 
182
193
  def prepare_fixture_gem_home
183
194
  FileUtils.rm_rf fixture_gem_home
184
- bundled_gems_path = File.expand_path(File.join("..", ".."), find_gem_dir('utilrb').full_gem_path)
195
+ bundled_gems_path = File.expand_path(File.join("..", ".."),
196
+ find_gem_dir('utilrb').full_gem_path)
185
197
  FileUtils.cp_r bundled_gems_path, fixture_gem_home
186
198
 
187
199
  vendor = File.join(__dir__, '..', '..', 'vendor')
188
- cached_bundler_gem = File.join(vendor, "bundler-#{Bundler::VERSION}.gem")
189
- if !File.file?(cached_bundler_gem)
200
+ bundler_filename = "bundler-#{Bundler::VERSION}.gem"
201
+ cached_bundler_gem = File.join(vendor, bundler_filename)
202
+ unless File.file?(cached_bundler_gem)
190
203
  FileUtils.mkdir_p vendor
191
- if !system(Ops::Install.guess_gem_program, 'fetch', '-v', Bundler::VERSION, 'bundle', chdir: vendor)
204
+ Bundler.clean_system(
205
+ Ops::Install.guess_gem_program, 'fetch', '-v',
206
+ Bundler::VERSION, 'bundler', chdir: vendor)
207
+
208
+ unless File.file?(bundler_filename)
192
209
  raise "cannot download the bundler gem"
193
210
  end
194
211
  end
195
212
 
196
213
  capture_subprocess_io do
197
- Bundler.clean_system(Hash['GEM_HOME' => fixture_gem_home, 'GEM_PATH' => nil], Ops::Install.guess_gem_program, 'install', '--no-document', cached_bundler_gem)
214
+ Bundler.clean_system(
215
+ Hash['GEM_HOME' => fixture_gem_home, 'GEM_PATH' => nil],
216
+ Ops::Install.guess_gem_program, 'install', '--no-document',
217
+ cached_bundler_gem)
198
218
  end
199
219
  end
200
220
 
@@ -202,13 +222,18 @@ def start_gem_server(path = fixture_gem_home)
202
222
  require 'socket'
203
223
  require 'rubygems/server'
204
224
  if @gem_server_pid
205
- raise ArgumentError, "#start_gem_server already called, call stop_gem_server before calling start_gem_server again"
225
+ raise ArgumentError, "#start_gem_server already called, "\
226
+ "call stop_gem_server before calling start_gem_server again"
206
227
  end
207
- @gem_server_pid = spawn(Hash['RUBYOPT' => nil], Gem.ruby, Ops::Install.guess_gem_program, 'server', '--quiet', '--dir', path, out: :close, err: :close)
208
- while true
209
- begin TCPSocket.new('127.0.0.1', 8808)
228
+ @gem_server_pid = spawn(
229
+ Hash['RUBYOPT' => nil],
230
+ Gem.ruby, Ops::Install.guess_gem_program, 'server',
231
+ '--quiet', '--dir', path, out: :close, err: :close)
232
+ loop do
233
+ begin
234
+ TCPSocket.new('127.0.0.1', 8808)
210
235
  break
211
- rescue Errno::ECONNREFUSED
236
+ rescue Errno::ECONNREFUSED # rubocop:disable Lint/HandleExceptions
212
237
  end
213
238
  end
214
239
  end
@@ -219,7 +244,7 @@ def stop_gem_server
219
244
  @gem_server_pid = nil
220
245
  end
221
246
 
222
- def capture_deprecation_message(&block)
247
+ def capture_deprecation_message
223
248
  level = Autoproj.warn_deprecated_level
224
249
  Autoproj.warn_deprecated_level = -1
225
250
  capture_subprocess_io do
@@ -237,12 +262,12 @@ def find_bundled_gem_path(bundler, gem_name, gemfile)
237
262
  chdir: File.dirname(gemfile))
238
263
  out_w.close
239
264
  output = out_r.read.chomp
240
- assert result, "#{output}"
265
+ assert result, "bundler show #{gem_name} failed, output: '#{output}'"
241
266
  output
242
267
  end
243
268
 
244
269
  def workspace_env(varname)
245
- _, stdout, _ = invoke_test_script 'display-env.sh', varname, dir: install_dir
270
+ _, stdout, = invoke_test_script 'display-env.sh', varname, dir: install_dir
246
271
  stdout.chomp
247
272
  end
248
273
 
@@ -260,7 +285,7 @@ def ws_define_package_manager(name, strict: false, call_while_empty: false)
260
285
  define_method(:strict?) { strict }
261
286
  define_method(:call_while_empty?) { call_while_empty }
262
287
  end
263
- manager = flexmock(manager),
288
+ manager = flexmock(manager)
264
289
  ws_package_managers[name] = manager
265
290
  end
266
291
 
@@ -271,22 +296,26 @@ def ws_create_os_package_resolver
271
296
  os_package_manager: 'os')
272
297
  end
273
298
 
274
- def ws_create(dir = make_tmpdir)
299
+ def ws_create(dir = make_tmpdir, partial_config: false)
275
300
  require 'autoproj/ops/main_config_switcher'
276
- FileUtils.cp_r Ops::MainConfigSwitcher::MAIN_CONFIGURATION_TEMPLATE, File.join(dir, 'autoproj')
301
+ FileUtils.cp_r Ops::MainConfigSwitcher::MAIN_CONFIGURATION_TEMPLATE,
302
+ File.join(dir, 'autoproj')
277
303
  FileUtils.mkdir_p File.join(dir, '.autoproj')
278
304
 
279
305
  ws_create_os_package_resolver
280
306
  @ws = Workspace.new(
281
307
  dir, os_package_resolver: ws_os_package_resolver,
282
308
  package_managers: ws_package_managers)
283
- ws.config.set 'osdeps_mode', 'all'
284
- ws.config.set 'apt_dpkg_update', true
309
+
310
+ unless partial_config
311
+ ws.config.set 'osdeps_mode', 'all'
312
+ ws.config.set 'apt_dpkg_update', true
313
+ end
285
314
  ws.config.set 'GITHUB', 'http,ssh', true
286
315
  ws.config.set 'GITORIOUS', 'http,ssh', true
287
316
  ws.config.set 'gems_install_path', File.join(dir, 'gems')
288
- ws.config.save
289
317
  ws.prefix_dir = make_tmpdir
318
+ ws.config.save
290
319
  ws
291
320
  end
292
321
 
@@ -294,7 +323,8 @@ def ws_clear_layout
294
323
  ws.manifest.clear_layout
295
324
  end
296
325
 
297
- def ws_define_package_set(name, vcs = VCSDefinition.from_raw(type: 'none'), **options)
326
+ def ws_define_package_set(name, vcs = VCSDefinition.from_raw(type: 'none'),
327
+ **options)
298
328
  package_set = PackageSet.new(ws, vcs, name: name, **options)
299
329
  ws.manifest.register_package_set(package_set)
300
330
  package_set
@@ -311,7 +341,8 @@ def ws_create_local_package_set(name, path, source_data: Hash.new, **options)
311
341
  package_set
312
342
  end
313
343
 
314
- def ws_add_package_set_to_layout(name, vcs = VCSDefinition.from_raw(type: 'none'), **options)
344
+ def ws_add_package_set_to_layout(name, vcs = VCSDefinition.from_raw(type: 'none'),
345
+ **options)
315
346
  package_set = ws_define_package_set(name, vcs, **options)
316
347
  ws.manifest.add_package_set_to_layout(package_set)
317
348
  package_set
@@ -334,12 +365,12 @@ def ws_add_osdep_entries_to_layout(entries)
334
365
  end
335
366
  end
336
367
 
337
- def ws_define_package(package_type, package_name, package_set: ws.manifest.main_package_set, create: true)
368
+ def ws_define_package(package_type, package_name,
369
+ package_set: ws.manifest.main_package_set,
370
+ create: true)
338
371
  package = Autobuild.send(package_type, package_name)
339
372
  package.srcdir = File.join(ws.root_dir, package_name.to_s)
340
- if create
341
- FileUtils.mkdir_p package.srcdir
342
- end
373
+ FileUtils.mkdir_p package.srcdir if create
343
374
  autoproj_package = ws.register_package(package, nil, package_set)
344
375
  yield(package) if block_given?
345
376
  autoproj_package
@@ -353,8 +384,10 @@ def ws_define_package_overrides(package, package_set, vcs_spec)
353
384
  package_set.add_overrides_entry(package.name, vcs_spec)
354
385
  end
355
386
 
356
- def ws_add_package_to_layout(package_type, package_name, package_set: ws.manifest.main_package_set, &block)
357
- pkg = ws_define_package(package_type, package_name, package_set: package_set, &block)
387
+ def ws_add_package_to_layout(package_type, package_name,
388
+ package_set: ws.manifest.main_package_set, &block)
389
+ pkg = ws_define_package(package_type, package_name,
390
+ package_set: package_set, &block)
358
391
  ws.manifest.add_package_to_layout(pkg)
359
392
  pkg
360
393
  end
@@ -374,25 +407,31 @@ def ws_setup_package_dirs(package, create_srcdir: true)
374
407
  elsif File.directory?(srcdir)
375
408
  FileUtils.rm_rf srcdir
376
409
  end
377
- package.autobuild.builddir = builddir = File.join(ws.root_dir, 'build', package.name)
378
- package.autobuild.prefix = prefix = File.join(ws.root_dir, 'prefix', package.name)
379
- return srcdir, builddir, prefix
410
+ package.autobuild.builddir = builddir =
411
+ File.join(ws.root_dir, 'build', package.name)
412
+ package.autobuild.prefix = prefix =
413
+ File.join(ws.root_dir, 'prefix', package.name)
414
+ [srcdir, builddir, prefix]
380
415
  end
381
416
 
382
417
  def ws_create_git_package_set(name, source_data = Hash.new)
383
418
  dir = make_tmpdir
384
- if !system('git', 'init', chdir: dir, out: :close)
419
+ unless system('git', 'init', chdir: dir, out: :close)
385
420
  raise "failed to run git init"
386
421
  end
422
+
387
423
  File.open(File.join(dir, 'source.yml'), 'w') do |io|
388
424
  YAML.dump(Hash['name' => name].merge(source_data), io)
389
425
  end
390
- if !system('git', 'add', 'source.yml', chdir: dir, out: :close)
426
+ unless system('git', 'add', 'source.yml', chdir: dir, out: :close)
391
427
  raise "failed to add the source.yml"
392
428
  end
393
- if !system('git', 'commit', '-m', 'add source.yml', chdir: dir, out: :close)
429
+
430
+ unless system('git', 'commit', '-m', 'add source.yml',
431
+ chdir: dir, out: :close)
394
432
  raise "failed to commit the source.yml"
395
433
  end
434
+
396
435
  dir
397
436
  end
398
437
 
@@ -413,9 +452,21 @@ def ws_create_package_file(pkg, name, content)
413
452
  end
414
453
  path
415
454
  end
455
+
456
+ def gemfile_aruba
457
+ base_dir = File.expand_path('../../', __dir__)
458
+ gemfile_path = File.join(base_dir, 'tmp', 'Gemfile.local')
459
+ File.open(gemfile_path, 'w') do |io|
460
+ io.write <<~GEMFILE
461
+ source 'https://rubygems.org'
462
+ gem 'autoproj', path: '#{base_dir}'
463
+ GEMFILE
464
+ end
465
+ gemfile_path
466
+ end
416
467
  end
417
468
  end
418
469
 
419
- class Minitest::Test
470
+ class Minitest::Test # rubocop:disable Style/ClassAndModuleChildren
420
471
  include Autoproj::SelfTest
421
472
  end