autoproj 2.0.0.rc5 → 2.0.0.rc6

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.
@@ -234,7 +234,7 @@ def save_import_state(name, versions)
234
234
  # Ensure that our ref is being logged
235
235
  FileUtils.touch File.join(git_dir, 'logs', *self.class.import_state_log_ref.split("/"))
236
236
  # Create the commit with the versions info
237
- commit_id = Snapshot.create_commit(main, import_state_log_file, name) do |io|
237
+ commit_id = Snapshot.create_commit(main, import_state_log_file, name, real_author: false) do |io|
238
238
  YAML.dump(versions, io)
239
239
  end
240
240
  # And save it in our reflog
@@ -257,7 +257,7 @@ def save_import_state(name, versions)
257
257
  # the root of the git repository
258
258
  # @param [String] the commit message
259
259
  # @return [String] the commit ID
260
- def self.create_commit(pkg, path, message, parent_id = nil)
260
+ def self.create_commit(pkg, path, message, parent_id = nil, real_author: true)
261
261
  importer = pkg.importer
262
262
  object_id = Tempfile.open 'autoproj-versions' do |io|
263
263
  yield(io)
@@ -274,6 +274,14 @@ def self.create_commit(pkg, path, message, parent_id = nil)
274
274
 
275
275
  parent_id ||= importer.rev_parse(pkg, 'HEAD')
276
276
 
277
+ env = Hash.new
278
+ if !real_author
279
+ env['GIT_AUTHOR_NAME'] = 'autoproj'
280
+ env['GIT_AUTHOR_EMAIL'] = 'autoproj'
281
+ env['GIT_COMMITTER_NAME'] = 'autoproj'
282
+ env['GIT_COMMITTER_EMAIL'] = 'autoproj'
283
+ end
284
+
277
285
  # Create the tree using a temporary index in order to not mess with
278
286
  # the user's index state. read-tree initializes the new index and
279
287
  # then we add the overrides file with update-index / write-tree
@@ -294,7 +302,7 @@ def self.create_commit(pkg, path, message, parent_id = nil)
294
302
 
295
303
  importer.run_git_bare(
296
304
  pkg, 'commit-tree',
297
- tree_id, '-p', parent_id, input_streams: [message]).first
305
+ tree_id, '-p', parent_id, env: env, input_streams: [message]).first
298
306
  end
299
307
  end
300
308
  end
@@ -160,7 +160,7 @@ def osdeps_mode_option_supported_os(config)
160
160
  end
161
161
 
162
162
  def define_osdeps_mode_option
163
- if OSPackageResolver.supported_operating_system?
163
+ if os_package_resolver.supported_operating_system?
164
164
  osdeps_mode_option_supported_os(ws.config)
165
165
  else
166
166
  osdeps_mode_option_unsupported_os(ws.config)
@@ -137,7 +137,7 @@ def prefer_indep_over_os_packages=(flag); @prefer_indep_over_os_packages = flag
137
137
  # @return [String]
138
138
  def os_package_manager
139
139
  if !instance_variable_defined?(:@os_package_manager)
140
- os_names, _ = OSPackageResolver.operating_system
140
+ os_names, _ = operating_system
141
141
  os_name = os_names.find { |name| OS_PACKAGE_MANAGERS[name] }
142
142
  @os_package_manager = OS_PACKAGE_MANAGERS[os_name]
143
143
  if !@os_package_manager
@@ -162,6 +162,7 @@ def initialize(defs = Hash.new, file = nil)
162
162
 
163
163
  @sources = Hash.new
164
164
  @installed_packages = Set.new
165
+ @operating_system = self.class.operating_system
165
166
  if file
166
167
  defs.each_key do |package_name|
167
168
  sources[package_name] = file
@@ -246,7 +247,7 @@ def self.verify_definitions(hash, path = [])
246
247
 
247
248
  # Returns true if it is possible to install packages for the operating
248
249
  # system on which we are installed
249
- def self.supported_operating_system?
250
+ def supported_operating_system?
250
251
  if @supported_operating_system.nil?
251
252
  os_names, _ = operating_system
252
253
  @supported_operating_system =
@@ -258,13 +259,6 @@ def self.supported_operating_system?
258
259
  return @supported_operating_system
259
260
  end
260
261
 
261
- # Used mainly during testing to bypass the operating system
262
- # autodetection
263
- def self.operating_system=(values)
264
- @supported_operating_system = nil
265
- @operating_system = values
266
- end
267
-
268
262
  def self.guess_operating_system
269
263
  if File.exists?('/etc/debian_version')
270
264
  versions = [File.read('/etc/debian_version').strip]
@@ -345,6 +339,23 @@ def self.normalize_os_representation(names, versions)
345
339
  return names, versions
346
340
  end
347
341
 
342
+ def operating_system
343
+ @operating_system || self.class.operating_system
344
+ end
345
+
346
+ def operating_system=(values)
347
+ @supported_operating_system = nil
348
+ @operating_system = values
349
+ end
350
+
351
+ def self.operating_system
352
+ @operating_system
353
+ end
354
+
355
+ def self.operating_system=(values)
356
+ @operating_system = values
357
+ end
358
+
348
359
  # Autodetects the operating system name and version
349
360
  #
350
361
  # +osname+ is the operating system name, all in lowercase (e.g. ubuntu,
@@ -355,41 +366,16 @@ def self.normalize_os_representation(names, versions)
355
366
  # one.
356
367
  #
357
368
  # Examples: ['debian', ['sid', 'unstable']] or ['ubuntu', ['lucid lynx', '10.04']]
358
- def self.operating_system(options = Hash.new)
359
- # Validate the options. We check on the availability of
360
- # validate_options as to not break autoproj_bootstrap (in which
361
- # validate_options is not available)
362
- options = validate_options options, force: false, config: Autoproj.config
363
- config = options.fetch(:config)
364
-
369
+ def self.autodetect_operating_system
365
370
  if user_os = ENV['AUTOPROJ_OS']
366
- @operating_system =
367
- if user_os.empty? then false
368
- else
369
- names, versions = user_os.split(':')
370
- normalize_os_representation(names.split(','), versions.split(','))
371
- end
372
- return @operating_system
373
- end
374
-
375
-
376
- if options[:force]
377
- @operating_system = nil
378
- elsif !@operating_system.nil? # @operating_system can be set to false to simulate an unknown OS
379
- return @operating_system
380
- elsif config.has_value_for?('operating_system')
381
- os = config.get('operating_system')
382
- if os.respond_to?(:to_ary)
383
- if os[0].respond_to?(:to_ary) && os[0].all? { |s| s.respond_to?(:to_str) } &&
384
- os[1].respond_to?(:to_ary) && os[1].all? { |s| s.respond_to?(:to_str) }
385
- @operating_system = os
386
- return os
387
- end
371
+ if user_os.empty?
372
+ return false
373
+ else
374
+ names, versions = user_os.split(':')
375
+ return normalize_os_representation(names.split(','), versions.split(','))
388
376
  end
389
- @operating_system = nil # Invalid OS format in the configuration file
390
377
  end
391
378
 
392
- Autobuild.progress :operating_system_autodetection, "autodetecting the operating system"
393
379
  names, versions = os_from_os_release
394
380
 
395
381
  if !names
@@ -415,13 +401,7 @@ def self.operating_system(options = Hash.new)
415
401
 
416
402
  names = ensure_derivatives_refer_to_their_parents(names)
417
403
  names, versions = normalize_os_representation(names, versions)
418
-
419
- @operating_system = [names, versions]
420
- config.set('operating_system', @operating_system, true)
421
- Autobuild.progress :operating_system_autodetection, "operating system: #{(names - ['default']).join(",")} - #{(versions - ['default']).join(",")}"
422
- @operating_system
423
- ensure
424
- Autobuild.progress_done :operating_system_autodetection
404
+ return [names, versions]
425
405
  end
426
406
 
427
407
  def self.os_from_os_release(filename = '/etc/os-release')
@@ -495,7 +475,7 @@ def resolve_package(name)
495
475
  path = self.class.resolve_name(name)
496
476
  name = path.last
497
477
 
498
- os_names, os_versions = self.class.operating_system
478
+ os_names, os_versions = operating_system
499
479
  os_names = os_names.dup
500
480
  if prefer_indep_over_os_packages?
501
481
  os_names.unshift 'default'
@@ -712,7 +692,7 @@ def resolve_os_packages(dependencies)
712
692
 
713
693
  if result.empty?
714
694
  if self.class.supported_operating_system?
715
- os_names, os_versions = self.class.operating_system
695
+ os_names, os_versions = operating_system
716
696
  raise MissingOSDep.new, "there is an osdeps definition for #{name}, but not for this operating system and version (resp. #{os_names.join(", ")} and #{os_versions.join(", ")})"
717
697
  end
718
698
  result = [[os_package_manager, FOUND_PACKAGES, [name]]]
@@ -781,9 +761,9 @@ def availability_of(name)
781
761
  end
782
762
 
783
763
  if resolved.empty?
784
- if !self.class.operating_system
764
+ if !operating_system
785
765
  return UNKNOWN_OS
786
- elsif !self.class.supported_operating_system?
766
+ elsif !supported_operating_system?
787
767
  return AVAILABLE
788
768
  else return WRONG_OS
789
769
  end
@@ -30,13 +30,9 @@ def initialize_environment
30
30
 
31
31
  env.inherit 'GEM_PATH'
32
32
  env.init_from_env 'GEM_PATH'
33
- orig_gem_path = (env['GEM_PATH'] || "").split(File::PATH_SEPARATOR).find_all do |p|
34
- !Workspace.in_autoproj_project?(p)
35
- end
36
33
  env.system_env['GEM_PATH'] = Gem.default_path
37
- env.original_env['GEM_PATH'] = orig_gem_path.join(File::PATH_SEPARATOR)
38
34
 
39
- if Workspace.in_autoproj_project?(env['GEM_HOME'])
35
+ if env.original_env['GEM_HOME'].empty?
40
36
  env.unset('GEM_HOME')
41
37
  end
42
38
 
@@ -44,8 +40,7 @@ def initialize_environment
44
40
  env.inherit 'RUBYLIB'
45
41
  original_rubylib =
46
42
  (env['RUBYLIB'] || "").split(File::PATH_SEPARATOR).find_all do |p|
47
- !Workspace.in_autoproj_project?(p)
48
- !p.start_with?(Bundler.rubygems.gem_dir) &&
43
+ !p.start_with?(Bundler.rubygems.gem_dir) &&
49
44
  !Bundler.rubygems.gem_path.any? { |gem_p| p.start_with?(p) }
50
45
  end
51
46
  if system_rubylib = discover_rubylib
@@ -53,15 +48,7 @@ def initialize_environment
53
48
  env.original_env['RUBYLIB'] = (original_rubylib - system_rubylib).join(File::PATH_SEPARATOR)
54
49
  end
55
50
 
56
- dot_autoproj = ws.dot_autoproj_dir
57
- if ws.config.private_bundler?
58
- env.add_path 'GEM_PATH', File.join(dot_autoproj, 'bundler')
59
- end
60
- if ws.config.private_autoproj?
61
- env.add_path 'GEM_PATH', File.join(dot_autoproj, 'autoproj')
62
- end
63
-
64
- ws.manifest.each_reused_autoproj_installation do |p|
51
+ ws.config.each_reused_autoproj_installation do |p|
65
52
  reused_w = ws.new(p)
66
53
  reused_c = reused_w.load_config
67
54
  if reused_c.private_gems?
@@ -70,7 +57,6 @@ def initialize_environment
70
57
  env.add_path 'PATH', File.join(reused_w.prefix_dir, 'gems', 'bin')
71
58
  end
72
59
 
73
-
74
60
  gem_home = File.join(ws.prefix_dir, "gems")
75
61
  if ws.config.private_gems?
76
62
  env.set 'GEM_HOME', gem_home
@@ -86,9 +72,19 @@ def initialize_environment
86
72
  end
87
73
 
88
74
  env.set 'BUNDLE_GEMFILE', File.join(gem_home, 'Gemfile')
75
+ env.add_path 'PATH', Gem.bindir
89
76
  env.add_path 'PATH', File.join(gem_home, 'bin')
90
- env.add_path 'PATH', File.join(ws.dot_autoproj_dir, 'autoproj', 'bin')
91
- Autobuild.programs['bundler'] = File.join(ws.dot_autoproj_dir, 'autoproj', 'bin', 'bundler')
77
+
78
+ dot_autoproj = ws.dot_autoproj_dir
79
+ if ws.config.private_bundler?
80
+ env.add_path 'PATH', File.join(dot_autoproj, 'bundler', 'bin')
81
+ env.add_path 'GEM_PATH', File.join(dot_autoproj, 'bundler')
82
+ end
83
+ env.add_path 'PATH', File.join(dot_autoproj, 'autoproj', 'bin')
84
+ if ws.config.private_autoproj?
85
+ env.add_path 'GEM_PATH', File.join(dot_autoproj, 'autoproj')
86
+ end
87
+ Autobuild.programs['bundler'] = 'bundler'
92
88
 
93
89
  if bundle_rubylib = discover_bundle_rubylib
94
90
  update_env_rubylib(bundle_rubylib, system_rubylib)
@@ -96,7 +92,7 @@ def initialize_environment
96
92
  end
97
93
 
98
94
  def update_env_rubylib(bundle_rubylib, system_rubylib = discover_rubylib)
99
- current = ws.env.resolved_env['RUBYLIB'].split(File::PATH_SEPARATOR) + system_rubylib
95
+ current = (ws.env.resolved_env['RUBYLIB'] || '').split(File::PATH_SEPARATOR) + system_rubylib
100
96
  (bundle_rubylib - current).each do |p|
101
97
  ws.env.add_path('RUBYLIB', p)
102
98
  end
@@ -148,6 +144,11 @@ def install(gems)
148
144
  # Back up the existing gemfile, we'll restore it if something is
149
145
  # wrong to avoid leaving bundler in an inconsistent state
150
146
  backup_files(backups)
147
+ if !File.file?("#{gemfile_path}.orig")
148
+ File.open("#{gemfile_path}.orig", 'w') do |io|
149
+ io.puts "eval_gemfile \"#{File.join(ws.dot_autoproj_dir, 'autoproj', 'Gemfile')}\""
150
+ end
151
+ end
151
152
 
152
153
  # Generate the gemfile and remove the lockfile
153
154
  gems = gems.sort.map do |name|
@@ -161,16 +162,14 @@ def install(gems)
161
162
  end
162
163
  FileUtils.rm File.join(root_dir, 'Gemfile.lock')
163
164
 
164
- if ws.config.private_gems?
165
- options = ['--path', root_dir]
166
- end
167
-
165
+ binstubs_path = File.join(root_dir, 'bin')
168
166
  Bundler.with_clean_env do
169
167
  connections = Set.new
170
168
  Autobuild::Subprocess.run 'autoproj', 'osdeps',
171
169
  Autobuild.tool('bundler'), 'install',
172
170
  "--gemfile=#{gemfile_path}", *options,
173
- "--binstubs", File.join(root_dir, 'bin'),
171
+ "--binstubs", binstubs_path,
172
+ "--shebang", Gem.ruby,
174
173
  env: Hash['BUNDLE_GEMFILE' => gemfile_path] do |line|
175
174
 
176
175
  case line
@@ -196,6 +195,7 @@ def install(gems)
196
195
  backup_restore(backups)
197
196
  raise
198
197
  ensure
198
+ FileUtils.rm_f File.join(binstubs_path, 'bundler')
199
199
  backup_clean(backups)
200
200
  end
201
201
 
@@ -204,8 +204,8 @@ def discover_rubylib
204
204
  result = Bundler.clean_system(
205
205
  Hash['RUBYLIB' => nil],
206
206
  Autobuild.tool('ruby'), '-e', 'puts $LOAD_PATH',
207
- out: io)
208
- #err: '/dev/null')
207
+ out: io,
208
+ err: '/dev/null')
209
209
  if result
210
210
  io.readlines.map { |l| l.chomp }.find_all { |l| !l.empty? }
211
211
  end
@@ -218,8 +218,8 @@ def discover_bundle_rubylib
218
218
  result = Bundler.clean_system(
219
219
  Hash['BUNDLE_GEMFILE' => gemfile],
220
220
  Autobuild.tool('bundler'), 'exec', 'ruby', '-e', 'puts $LOAD_PATH',
221
- out: io)
222
- #err: '/dev/null')
221
+ out: io,
222
+ err: '/dev/null')
223
223
  if result
224
224
  io.readlines.map { |l| l.chomp }.find_all { |l| !l.empty? }
225
225
  end
@@ -38,7 +38,7 @@ def initialize_environment
38
38
  env.system_env['GEM_PATH'] = Gem.default_path
39
39
  env.original_env['GEM_PATH'] = orig_gem_path.join(File::PATH_SEPARATOR)
40
40
 
41
- ws.manifest.each_reused_autoproj_installation do |p|
41
+ ws.config.each_reused_autoproj_installation do |p|
42
42
  p_gems = File.join(p, '.gems')
43
43
  if File.directory?(p_gems)
44
44
  env.push_path 'GEM_PATH', p_gems
@@ -184,7 +184,7 @@ def osdeps_interaction(os_packages, shell_script)
184
184
  # packages. See the option in {#generate_auto_os_script}
185
185
  # @return [Boolean] true if packages got installed, false otherwise
186
186
  def install(packages, options = Hash.new)
187
- handled_os = OSPackageResolver.supported_operating_system?
187
+ handled_os = ws.supported_operating_system?
188
188
  if handled_os
189
189
  shell_script = generate_auto_os_script(packages, options)
190
190
  user_shell_script = generate_user_os_script(packages, options)
@@ -1,3 +1,3 @@
1
1
  module Autoproj
2
- VERSION = "2.0.0.rc5"
2
+ VERSION = "2.0.0.rc6"
3
3
  end
@@ -18,6 +18,7 @@ def initialize(root_dir)
18
18
  @env = Environment.new
19
19
  env.source_before(File.join(dot_autoproj_dir, 'env.sh'))
20
20
  @manifest = Manifest.new
21
+
21
22
  @os_package_installer = OSPackageInstaller.new(self, os_package_resolver)
22
23
  env.prepare(root_dir)
23
24
  super(root_dir)
@@ -173,6 +174,8 @@ def load_config(reconfigure = false)
173
174
  manifest.vcs = VCSDefinition.from_raw(
174
175
  type: 'local', url: config_dir)
175
176
  end
177
+ os_package_resolver.prefer_indep_over_os_packages = config.prefer_indep_over_os_packages?
178
+ OSPackageResolver.operating_system ||= config.get('operating_system', nil)
176
179
  end
177
180
  @config
178
181
  end
@@ -183,8 +186,43 @@ def load_manifest
183
186
  end
184
187
  end
185
188
 
189
+ def autodetect_operating_system(force: false)
190
+ if force || !os_package_resolver.operating_system
191
+ begin
192
+ Autobuild.progress_start :operating_system_autodetection,
193
+ "autodetecting the operating system"
194
+ names, versions = OSPackageResolver.autodetect_operating_system
195
+ OSPackageResolver.operating_system = [names, versions]
196
+ Autobuild.progress :operating_system_autodetection,
197
+ "operating system: #{(names - ['default']).join(",")} - #{(versions - ['default']).join(",")}"
198
+ ensure
199
+ Autobuild.progress_done :operating_system_autodetection
200
+ end
201
+ config.set('operating_system', os_package_resolver.operating_system, true)
202
+ end
203
+ end
204
+
205
+ def operating_system
206
+ os_package_resolver.operating_system
207
+ end
208
+
209
+ def supported_operating_system?
210
+ os_package_resolver.supported_operating_system?
211
+ end
212
+
213
+ def setup_os_package_installer
214
+ autodetect_operating_system
215
+ os_package_installer.each_manager do |pkg_mng|
216
+ pkg_mng.initialize_environment
217
+ end
218
+ os_package_resolver.load_default
219
+ os_package_installer.define_osdeps_mode_option
220
+ os_package_installer.osdeps_mode
221
+ end
222
+
186
223
  def setup
187
224
  load_config
225
+ autodetect_operating_system
188
226
  config.validate_ruby_executable
189
227
  config.apply_autobuild_configuration
190
228
  load_autoprojrc
@@ -206,14 +244,7 @@ def setup
206
244
  Autobuild::Importer.default_cache_dirs = cache_dir
207
245
  end
208
246
  env.prepare(root_dir)
209
- os_package_installer.each_manager do |pkg_mng|
210
- pkg_mng.initialize_environment
211
- end
212
-
213
- os_package_resolver.load_default
214
- os_package_installer.define_osdeps_mode_option
215
- os_package_installer.osdeps_mode
216
-
247
+ setup_os_package_installer
217
248
  install_ruby_shims
218
249
  end
219
250
 
@@ -333,6 +364,10 @@ def load_osdeps_from_package_sets
333
364
  end
334
365
 
335
366
  def load_package_sets(options = Hash.new)
367
+ if !File.file?(manifest_file_path) # empty install, just return
368
+ return
369
+ end
370
+
336
371
  options = validate_options options,
337
372
  only_local: false,
338
373
  checkout_only: true,
@@ -525,7 +560,9 @@ def finalize_package_setup
525
560
  end
526
561
 
527
562
  manifest.each_package_set do |source|
528
- load_if_present(source, source.local_dir, "overrides.rb")
563
+ if source.local_dir
564
+ load_if_present(source, source.local_dir, "overrides.rb")
565
+ end
529
566
  end
530
567
 
531
568
  Dir.glob(File.join( overrides_dir, "*.rb" ) ).sort.each do |file|