autoproj 1.13.7 → 2.0.0.b1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gemtest +0 -0
- data/Manifest.txt +27 -21
- data/Rakefile +4 -6
- data/bin/alocate +5 -1
- data/bin/amake +3 -53
- data/bin/aup +3 -50
- data/bin/autoproj +3 -264
- data/bin/autoproj_bootstrap +294 -349
- data/bin/autoproj_bootstrap.in +27 -3
- data/lib/autoproj.rb +23 -1
- data/lib/autoproj/autobuild.rb +51 -89
- data/lib/autoproj/base.rb +0 -9
- data/lib/autoproj/build_option.rb +1 -3
- data/lib/autoproj/cli.rb +1 -0
- data/lib/autoproj/cli/base.rb +155 -0
- data/lib/autoproj/cli/bootstrap.rb +119 -0
- data/lib/autoproj/cli/build.rb +72 -0
- data/lib/autoproj/cli/cache.rb +31 -0
- data/lib/autoproj/cli/clean.rb +37 -0
- data/lib/autoproj/cli/commit.rb +41 -0
- data/lib/autoproj/cli/doc.rb +22 -0
- data/lib/autoproj/cli/envsh.rb +22 -0
- data/lib/autoproj/cli/inspection_tool.rb +73 -0
- data/lib/autoproj/cli/locate.rb +96 -0
- data/lib/autoproj/cli/log.rb +26 -0
- data/lib/autoproj/cli/main.rb +249 -0
- data/lib/autoproj/cli/main_test.rb +57 -0
- data/lib/autoproj/cli/osdeps.rb +30 -0
- data/lib/autoproj/cli/query.rb +43 -0
- data/lib/autoproj/cli/reconfigure.rb +19 -0
- data/lib/autoproj/cli/reset.rb +7 -32
- data/lib/autoproj/cli/show.rb +219 -0
- data/lib/autoproj/cli/snapshot.rb +1 -1
- data/lib/autoproj/cli/status.rb +149 -0
- data/lib/autoproj/cli/switch_config.rb +28 -0
- data/lib/autoproj/cli/tag.rb +9 -35
- data/lib/autoproj/cli/test.rb +34 -55
- data/lib/autoproj/cli/update.rb +158 -0
- data/lib/autoproj/cli/versions.rb +32 -69
- data/lib/autoproj/configuration.rb +95 -34
- data/lib/autoproj/default.osdeps +25 -35
- data/lib/autoproj/environment.rb +85 -63
- data/lib/autoproj/exceptions.rb +50 -0
- data/lib/autoproj/gitorious.rb +11 -9
- data/lib/autoproj/manifest.rb +199 -231
- data/lib/autoproj/metapackage.rb +0 -8
- data/lib/autoproj/ops/build.rb +1 -17
- data/lib/autoproj/ops/configuration.rb +92 -90
- data/lib/autoproj/ops/import.rb +222 -0
- data/lib/autoproj/ops/loader.rb +18 -8
- data/lib/autoproj/ops/main_config_switcher.rb +45 -73
- data/lib/autoproj/ops/snapshot.rb +5 -10
- data/lib/autoproj/ops/tools.rb +10 -44
- data/lib/autoproj/options.rb +35 -6
- data/lib/autoproj/osdeps.rb +97 -68
- data/lib/autoproj/package_selection.rb +39 -20
- data/lib/autoproj/package_set.rb +26 -24
- data/lib/autoproj/reporter.rb +91 -0
- data/lib/autoproj/system.rb +50 -149
- data/lib/autoproj/variable_expansion.rb +32 -6
- data/lib/autoproj/vcs_definition.rb +57 -17
- data/lib/autoproj/version.rb +1 -1
- data/lib/autoproj/workspace.rb +550 -0
- data/test/ops/test_snapshot.rb +26 -0
- data/test/test_package.rb +30 -0
- data/test/test_vcs_definition.rb +46 -0
- metadata +55 -50
- data/bin/autolocate +0 -3
- data/bin/autoproj-bootstrap +0 -68
- data/bin/autoproj-cache +0 -18
- data/bin/autoproj-clean +0 -13
- data/bin/autoproj-commit +0 -10
- data/bin/autoproj-create-set +0 -118
- data/bin/autoproj-doc +0 -28
- data/bin/autoproj-envsh +0 -14
- data/bin/autoproj-list +0 -69
- data/bin/autoproj-locate +0 -85
- data/bin/autoproj-log +0 -5
- data/bin/autoproj-query +0 -82
- data/bin/autoproj-reset +0 -13
- data/bin/autoproj-show +0 -192
- data/bin/autoproj-snapshot +0 -27
- data/bin/autoproj-switch-config +0 -24
- data/bin/autoproj-tag +0 -13
- data/bin/autoproj-test +0 -31
- data/bin/autoproj-versions +0 -20
- data/bin/autoproj_stress_test +0 -40
- data/lib/autoproj/cmdline.rb +0 -1649
data/lib/autoproj/osdeps.rb
CHANGED
@@ -32,10 +32,6 @@ module Autoproj
|
|
32
32
|
@silent = true
|
33
33
|
end
|
34
34
|
|
35
|
-
def parse_package_entry(entry)
|
36
|
-
entry
|
37
|
-
end
|
38
|
-
|
39
35
|
# The primary name for this package manager
|
40
36
|
def name
|
41
37
|
names.first
|
@@ -45,7 +41,7 @@ module Autoproj
|
|
45
41
|
# order to have a properly functioning package manager
|
46
42
|
#
|
47
43
|
# This is e.g. needed for python pip or rubygems
|
48
|
-
def self.initialize_environment
|
44
|
+
def self.initialize_environment(_env = nil, _manifest = nil, _root_dir = Autoproj.root_dir)
|
49
45
|
end
|
50
46
|
end
|
51
47
|
|
@@ -310,7 +306,7 @@ fi
|
|
310
306
|
false)
|
311
307
|
end
|
312
308
|
|
313
|
-
def filter_uptodate_packages(packages)
|
309
|
+
def filter_uptodate_packages(packages, options = Hash.new)
|
314
310
|
# TODO there might be duplicates in packages which should be fixed
|
315
311
|
# somewhere else
|
316
312
|
packages = packages.uniq
|
@@ -377,7 +373,7 @@ fi
|
|
377
373
|
"zypper -n install '%s'")
|
378
374
|
end
|
379
375
|
|
380
|
-
def filter_uptodate_packages(packages)
|
376
|
+
def filter_uptodate_packages(packages, options = Hash.new)
|
381
377
|
result = `LANG=C rpm -q --whatprovides '#{packages.join("' '")}'`
|
382
378
|
has_all_pkgs = $?.success?
|
383
379
|
|
@@ -416,7 +412,7 @@ fi
|
|
416
412
|
"yum install -y '%s'")
|
417
413
|
end
|
418
414
|
|
419
|
-
def filter_uptodate_packages(packages)
|
415
|
+
def filter_uptodate_packages(packages, options = Hash.new)
|
420
416
|
result = `LANG=C rpm -q --queryformat "%{NAME}\n" '#{packages.join("' '")}'`
|
421
417
|
|
422
418
|
installed_packages = []
|
@@ -519,7 +515,7 @@ fi
|
|
519
515
|
end
|
520
516
|
end
|
521
517
|
|
522
|
-
def filter_uptodate_packages(packages)
|
518
|
+
def filter_uptodate_packages(packages, options = Hash.new)
|
523
519
|
packages.find_all do |package_name|
|
524
520
|
!installed?(package_name)
|
525
521
|
end
|
@@ -529,43 +525,65 @@ fi
|
|
529
525
|
# Package manager interface for the RubyGems system
|
530
526
|
class GemManager < Manager
|
531
527
|
class << self
|
532
|
-
|
528
|
+
attr_writer :with_prerelease
|
533
529
|
attr_accessor :with_doc
|
534
530
|
end
|
535
531
|
@with_prerelease = false
|
536
532
|
@with_doc = false
|
537
533
|
|
534
|
+
def self.with_prerelease(*value)
|
535
|
+
if value.empty?
|
536
|
+
@with_prerelease
|
537
|
+
else
|
538
|
+
begin
|
539
|
+
saved_flag = @with_prerelease
|
540
|
+
@with_prerelease = value.first
|
541
|
+
yield
|
542
|
+
ensure
|
543
|
+
@with_prerelease = saved_flag
|
544
|
+
end
|
545
|
+
end
|
546
|
+
end
|
547
|
+
|
538
548
|
# Filters all paths that come from other autoproj installations out
|
539
549
|
# of GEM_PATH
|
540
|
-
def self.initialize_environment
|
541
|
-
|
542
|
-
(
|
550
|
+
def self.initialize_environment(env = Autobuild.env, manifest = Autoproj.manifest, root_dir = Autoproj.root_dir)
|
551
|
+
env.original_env['GEM_PATH'] =
|
552
|
+
(env['GEM_PATH'] || "").split(File::PATH_SEPARATOR).find_all do |p|
|
543
553
|
!Autoproj.in_autoproj_installation?(p)
|
544
554
|
end.join(File::PATH_SEPARATOR)
|
545
|
-
|
546
|
-
|
555
|
+
env.inherit 'GEM_PATH'
|
556
|
+
env.init_from_env 'GEM_PATH'
|
547
557
|
|
548
|
-
orig_gem_path =
|
549
|
-
|
550
|
-
|
558
|
+
orig_gem_path = env.original_env['GEM_PATH'].split(File::PATH_SEPARATOR)
|
559
|
+
env.system_env['GEM_PATH'] = Gem.default_path
|
560
|
+
env.original_env['GEM_PATH'] = orig_gem_path.join(File::PATH_SEPARATOR)
|
551
561
|
|
552
|
-
|
562
|
+
manifest.each_reused_autoproj_installation do |p|
|
553
563
|
p_gems = File.join(p, '.gems')
|
554
564
|
if File.directory?(p_gems)
|
555
|
-
|
556
|
-
|
565
|
+
env.push_path 'GEM_PATH', p_gems
|
566
|
+
env.push_path 'PATH', File.join(p_gems, 'bin')
|
557
567
|
end
|
558
568
|
end
|
559
|
-
|
560
|
-
|
561
|
-
|
569
|
+
|
570
|
+
@gem_home = (ENV['AUTOPROJ_GEM_HOME'] || File.join(root_dir, ".gems"))
|
571
|
+
env.push_path 'GEM_PATH', gem_home
|
572
|
+
env.set 'GEM_HOME', gem_home
|
573
|
+
env.push_path 'PATH', "#{gem_home}/bin"
|
562
574
|
|
563
575
|
# Now, reset the directories in our own RubyGems instance
|
564
|
-
Gem.paths =
|
576
|
+
Gem.paths = env.resolved_env
|
565
577
|
|
566
578
|
use_cache_dir
|
567
579
|
end
|
568
580
|
|
581
|
+
# Override the gem home detected by {initialize_environment}, or set
|
582
|
+
# it in cases where calling {initialize_environment} is not possible
|
583
|
+
def self.gem_home=(gem_home)
|
584
|
+
@gem_home = gem_home
|
585
|
+
end
|
586
|
+
|
569
587
|
# A global cache directory that should be used to avoid
|
570
588
|
# re-downloading gems
|
571
589
|
def self.cache_dir
|
@@ -591,7 +609,7 @@ fi
|
|
591
609
|
|
592
610
|
# Return the directory in which RubyGems package should be installed
|
593
611
|
def self.gem_home
|
594
|
-
|
612
|
+
@gem_home
|
595
613
|
end
|
596
614
|
|
597
615
|
# Returns the set of default options that are added to gem
|
@@ -685,7 +703,9 @@ fi
|
|
685
703
|
Autoproj.message " installing/updating RubyGems dependencies: #{gems.map { |g| g.join(" ") }.sort.join(", ")}"
|
686
704
|
|
687
705
|
cmdlines.each do |c|
|
688
|
-
Autobuild::Subprocess.run 'autoproj', 'osdeps', *c
|
706
|
+
Autobuild::Subprocess.run 'autoproj', 'osdeps', *c,
|
707
|
+
env: Hash['GEM_HOME' => Gem.paths.home,
|
708
|
+
'GEM_PATH' => Gem.paths.path.join(":")]
|
689
709
|
end
|
690
710
|
gems.each do |name, v|
|
691
711
|
installed_gems << name
|
@@ -696,7 +716,10 @@ fi
|
|
696
716
|
|
697
717
|
# Returns the set of RubyGem packages in +packages+ that are not already
|
698
718
|
# installed, or that can be upgraded
|
699
|
-
def filter_uptodate_packages(gems)
|
719
|
+
def filter_uptodate_packages(gems, options = Hash.new)
|
720
|
+
options = validate_options options,
|
721
|
+
install_only: !Autobuild.do_update
|
722
|
+
|
700
723
|
# Don't install gems that are already there ...
|
701
724
|
gems = gems.dup
|
702
725
|
gems.delete_if do |name, version|
|
@@ -714,7 +737,7 @@ fi
|
|
714
737
|
Gem.source_index.find_name(name, version_requirements)
|
715
738
|
end
|
716
739
|
|
717
|
-
if !installed.empty? &&
|
740
|
+
if !installed.empty? && !options[:install_only]
|
718
741
|
# Look if we can update the package ...
|
719
742
|
dep = Gem::Dependency.new(name, version_requirements)
|
720
743
|
available =
|
@@ -803,14 +826,14 @@ fi
|
|
803
826
|
|
804
827
|
attr_reader :installed_gems
|
805
828
|
|
806
|
-
def self.initialize_environment
|
807
|
-
|
829
|
+
def self.initialize_environment(env = Autobuild.env, _manifest = nil, root_dir = Autoproj.root_dir)
|
830
|
+
env.set 'PYTHONUSERBASE', pip_home(env, root_dir)
|
808
831
|
end
|
809
832
|
|
810
833
|
# Return the directory where python packages are installed to.
|
811
834
|
# The actual path is pip_home/lib/pythonx.y/site-packages.
|
812
|
-
def self.pip_home
|
813
|
-
|
835
|
+
def self.pip_home(env = Autobuild.env, root_dir = Autobuild.root_dir)
|
836
|
+
env['AUTOPROJ_PYTHONUSERBASE'] || File.join(root_dir,".pip")
|
814
837
|
end
|
815
838
|
|
816
839
|
|
@@ -1256,12 +1279,8 @@ fi
|
|
1256
1279
|
# Validate the options. We check on the availability of
|
1257
1280
|
# validate_options as to not break autoproj_bootstrap (in which
|
1258
1281
|
# validate_options is not available)
|
1259
|
-
options =
|
1260
|
-
|
1261
|
-
Kernel.validate_options options, :force => false
|
1262
|
-
else
|
1263
|
-
options.dup
|
1264
|
-
end
|
1282
|
+
options = validate_options options, force: false, config: Autoproj.config
|
1283
|
+
config = options.fetch(:config)
|
1265
1284
|
|
1266
1285
|
if user_os = ENV['AUTOPROJ_OS']
|
1267
1286
|
@operating_system =
|
@@ -1278,8 +1297,8 @@ fi
|
|
1278
1297
|
@operating_system = nil
|
1279
1298
|
elsif !@operating_system.nil? # @operating_system can be set to false to simulate an unknown OS
|
1280
1299
|
return @operating_system
|
1281
|
-
elsif
|
1282
|
-
os =
|
1300
|
+
elsif config.has_value_for?('operating_system')
|
1301
|
+
os = config.get('operating_system')
|
1283
1302
|
if os.respond_to?(:to_ary)
|
1284
1303
|
if os[0].respond_to?(:to_ary) && os[0].all? { |s| s.respond_to?(:to_str) } &&
|
1285
1304
|
os[1].respond_to?(:to_ary) && os[1].all? { |s| s.respond_to?(:to_str) }
|
@@ -1318,7 +1337,7 @@ fi
|
|
1318
1337
|
names, versions = normalize_os_representation(names, versions)
|
1319
1338
|
|
1320
1339
|
@operating_system = [names, versions]
|
1321
|
-
|
1340
|
+
config.set('operating_system', @operating_system, true)
|
1322
1341
|
Autobuild.progress :operating_system_autodetection, "operating system: #{(names - ['default']).join(",")} - #{(versions - ['default']).join(",")}"
|
1323
1342
|
@operating_system
|
1324
1343
|
ensure
|
@@ -1445,15 +1464,11 @@ fi
|
|
1445
1464
|
end
|
1446
1465
|
|
1447
1466
|
result.map do |handler, status, entries|
|
1448
|
-
|
1449
|
-
|
1450
|
-
|
1451
|
-
|
1452
|
-
e
|
1453
|
-
end
|
1467
|
+
if handler.respond_to?(:parse_package_entry)
|
1468
|
+
[handler, status, entries.map { |s| handler.parse_package_entry(s) }]
|
1469
|
+
else
|
1470
|
+
[handler, status, entries]
|
1454
1471
|
end
|
1455
|
-
|
1456
|
-
[handler, status, entries]
|
1457
1472
|
end
|
1458
1473
|
end
|
1459
1474
|
|
@@ -1603,8 +1618,6 @@ fi
|
|
1603
1618
|
return found, result
|
1604
1619
|
end
|
1605
1620
|
|
1606
|
-
class MissingOSDep < ConfigError; end
|
1607
|
-
|
1608
1621
|
# Resolves the given OS dependencies into the actual packages that need
|
1609
1622
|
# to be installed on this particular OS.
|
1610
1623
|
#
|
@@ -1722,7 +1735,7 @@ fi
|
|
1722
1735
|
HANDLE_OS = 'os'
|
1723
1736
|
HANDLE_NONE = 'none'
|
1724
1737
|
|
1725
|
-
def self.osdeps_mode_option_unsupported_os
|
1738
|
+
def self.osdeps_mode_option_unsupported_os(config = Autoproj.config)
|
1726
1739
|
long_doc =<<-EOT
|
1727
1740
|
The software packages that autoproj will have to build may require other
|
1728
1741
|
prepackaged softwares (a.k.a. OS dependencies) to be installed (RubyGems
|
@@ -1753,13 +1766,13 @@ So, what do you want ? (all, none or a comma-separated list of: gem pip)
|
|
1753
1766
|
EOT
|
1754
1767
|
message = [ "Which prepackaged software (a.k.a. 'osdeps') should autoproj install automatically (all, none or a comma-separated list of: gem pip) ?", long_doc.strip ]
|
1755
1768
|
|
1756
|
-
|
1769
|
+
config.declare 'osdeps_mode', 'string',
|
1757
1770
|
:default => 'ruby',
|
1758
1771
|
:doc => message,
|
1759
1772
|
:lowercase => true
|
1760
1773
|
end
|
1761
1774
|
|
1762
|
-
def self.osdeps_mode_option_supported_os
|
1775
|
+
def self.osdeps_mode_option_supported_os(config = Autoproj.config)
|
1763
1776
|
long_doc =<<-EOT
|
1764
1777
|
The software packages that autoproj will have to build may require other
|
1765
1778
|
prepackaged softwares (a.k.a. OS dependencies) to be installed (RubyGems
|
@@ -1794,17 +1807,17 @@ So, what do you want ? (all, none or a comma-separated list of: os gem pip)
|
|
1794
1807
|
EOT
|
1795
1808
|
message = [ "Which prepackaged software (a.k.a. 'osdeps') should autoproj install automatically (all, none or a comma-separated list of: os gem pip) ?", long_doc.strip ]
|
1796
1809
|
|
1797
|
-
|
1810
|
+
config.declare 'osdeps_mode', 'string',
|
1798
1811
|
:default => 'all',
|
1799
1812
|
:doc => message,
|
1800
1813
|
:lowercase => true
|
1801
1814
|
end
|
1802
1815
|
|
1803
|
-
def self.define_osdeps_mode_option
|
1816
|
+
def self.define_osdeps_mode_option(config = Autoproj.config)
|
1804
1817
|
if supported_operating_system?
|
1805
|
-
osdeps_mode_option_supported_os
|
1818
|
+
osdeps_mode_option_supported_os(config)
|
1806
1819
|
else
|
1807
|
-
osdeps_mode_option_unsupported_os
|
1820
|
+
osdeps_mode_option_unsupported_os(config)
|
1808
1821
|
end
|
1809
1822
|
end
|
1810
1823
|
|
@@ -1856,10 +1869,10 @@ So, what do you want ? (all, none or a comma-separated list of: os gem pip)
|
|
1856
1869
|
@osdeps_mode = OSDependencies.osdeps_mode
|
1857
1870
|
end
|
1858
1871
|
|
1859
|
-
def self.osdeps_mode
|
1872
|
+
def self.osdeps_mode(config = Autoproj.config)
|
1860
1873
|
while true
|
1861
1874
|
mode =
|
1862
|
-
if !
|
1875
|
+
if !config.has_value_for?('osdeps_mode') &&
|
1863
1876
|
mode_name = ENV['AUTOPROJ_OSDEPS_MODE']
|
1864
1877
|
begin OSDependencies.osdeps_mode_string_to_value(mode_name)
|
1865
1878
|
rescue ArgumentError
|
@@ -1867,7 +1880,7 @@ So, what do you want ? (all, none or a comma-separated list of: os gem pip)
|
|
1867
1880
|
nil
|
1868
1881
|
end
|
1869
1882
|
else
|
1870
|
-
mode_name =
|
1883
|
+
mode_name = config.get('osdeps_mode')
|
1871
1884
|
begin OSDependencies.osdeps_mode_string_to_value(mode_name)
|
1872
1885
|
rescue ArgumentError
|
1873
1886
|
Autoproj.warn "invalid osdeps mode stored in configuration file"
|
@@ -1877,12 +1890,12 @@ So, what do you want ? (all, none or a comma-separated list of: os gem pip)
|
|
1877
1890
|
|
1878
1891
|
if mode
|
1879
1892
|
@osdeps_mode = mode
|
1880
|
-
|
1893
|
+
config.set('osdeps_mode', mode_name, true)
|
1881
1894
|
return mode
|
1882
1895
|
end
|
1883
1896
|
|
1884
1897
|
# Invalid configuration values. Retry
|
1885
|
-
|
1898
|
+
config.reset('osdeps_mode')
|
1886
1899
|
ENV['AUTOPROJ_OSDEPS_MODE'] = nil
|
1887
1900
|
end
|
1888
1901
|
end
|
@@ -1904,7 +1917,8 @@ So, what do you want ? (all, none or a comma-separated list of: os gem pip)
|
|
1904
1917
|
def setup_package_handlers(options = Hash.new)
|
1905
1918
|
options =
|
1906
1919
|
if Kernel.respond_to?(:validate_options)
|
1907
|
-
Kernel.validate_options options,
|
1920
|
+
Kernel.validate_options options,
|
1921
|
+
osdeps_mode: osdeps_mode
|
1908
1922
|
else
|
1909
1923
|
options = options.dup
|
1910
1924
|
options[:osdeps_mode] ||= osdeps_mode
|
@@ -1947,7 +1961,7 @@ So, what do you want ? (all, none or a comma-separated list of: os gem pip)
|
|
1947
1961
|
# This is usually called as a rebuild step to make sure that all these
|
1948
1962
|
# packages are updated to whatever required the rebuild
|
1949
1963
|
def pristine(packages, options = Hash.new)
|
1950
|
-
|
1964
|
+
install(packages, options.merge(install_only: true))
|
1951
1965
|
packages = resolve_os_dependencies(packages)
|
1952
1966
|
|
1953
1967
|
_, other_packages =
|
@@ -1965,12 +1979,16 @@ So, what do you want ? (all, none or a comma-separated list of: os gem pip)
|
|
1965
1979
|
packages = packages.to_set - installed_packages
|
1966
1980
|
return false if packages.empty?
|
1967
1981
|
|
1982
|
+
filter_options, options =
|
1983
|
+
filter_options options, install_only: !Autobuild.do_update
|
1968
1984
|
setup_package_handlers(options)
|
1969
1985
|
|
1970
1986
|
packages = resolve_os_dependencies(packages)
|
1987
|
+
|
1988
|
+
needs_filter = (filter_uptodate_packages? || filter_options[:install_only])
|
1971
1989
|
packages = packages.map do |handler, list|
|
1972
|
-
if
|
1973
|
-
list = handler.filter_uptodate_packages(list)
|
1990
|
+
if needs_filter && handler.respond_to?(:filter_uptodate_packages)
|
1991
|
+
list = handler.filter_uptodate_packages(list, filter_options)
|
1974
1992
|
end
|
1975
1993
|
|
1976
1994
|
if !list.empty?
|
@@ -1990,6 +2008,17 @@ So, what do you want ? (all, none or a comma-separated list of: os gem pip)
|
|
1990
2008
|
end
|
1991
2009
|
true
|
1992
2010
|
end
|
2011
|
+
|
2012
|
+
def reinstall(options = Hash.new)
|
2013
|
+
# We also reinstall the osdeps that provide the
|
2014
|
+
# functionality
|
2015
|
+
managers = setup_package_handlers(options)
|
2016
|
+
managers.each do |mng|
|
2017
|
+
if mng.enabled? && mng.respond_to?(:reinstall)
|
2018
|
+
mng.reinstall
|
2019
|
+
end
|
2020
|
+
end
|
2021
|
+
end
|
1993
2022
|
end
|
1994
2023
|
end
|
1995
2024
|
|
@@ -1,14 +1,4 @@
|
|
1
1
|
module Autoproj
|
2
|
-
# Exception raised by
|
3
|
-
# PackageSelection#filter_excluded_and_ignored_packages when a given
|
4
|
-
# selection is completely excluded
|
5
|
-
class ExcludedSelection < ConfigError
|
6
|
-
attr_reader :selection
|
7
|
-
def initialize(selection)
|
8
|
-
@selection = selection
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
2
|
# Class holding information about which packages have been selected, and
|
13
3
|
# why. It is used to decide whether some non-availability of packages
|
14
4
|
# are errors or simply warnings (i.e. if the user really wants a given
|
@@ -37,6 +27,10 @@ module Autoproj
|
|
37
27
|
# contains the set of package ignores that have been ignored because
|
38
28
|
# the corresponding metapackage has a weak dependency policy
|
39
29
|
attr_reader :ignores
|
30
|
+
# The set of source packages that have been selected
|
31
|
+
attr_reader :source_packages
|
32
|
+
# The set of osdeps that have been selected
|
33
|
+
attr_reader :osdeps
|
40
34
|
|
41
35
|
def initialize
|
42
36
|
@selection = Hash.new { |h, k| h[k] = Set.new }
|
@@ -44,11 +38,8 @@ module Autoproj
|
|
44
38
|
@weak_dependencies = Hash.new
|
45
39
|
@ignores = Hash.new { |h, k| h[k] = Set.new }
|
46
40
|
@exclusions = Hash.new { |h, k| h[k] = Set.new }
|
47
|
-
|
48
|
-
|
49
|
-
# The set of packages that have been selected
|
50
|
-
def packages
|
51
|
-
selection.keys
|
41
|
+
@source_packages = Set.new
|
42
|
+
@osdeps = Set.new
|
52
43
|
end
|
53
44
|
|
54
45
|
def include?(pkg_name)
|
@@ -60,16 +51,44 @@ module Autoproj
|
|
60
51
|
end
|
61
52
|
|
62
53
|
def each(&block)
|
63
|
-
|
54
|
+
Autoproj.warn_deprecated "PackageSelection#each", "use PackageSelection#each_source_package_name instead", 0
|
55
|
+
each_source_package_name(&block)
|
56
|
+
end
|
57
|
+
|
58
|
+
def each_source_package_name(&block)
|
59
|
+
source_packages.each(&block)
|
64
60
|
end
|
65
61
|
|
66
|
-
def
|
67
|
-
|
68
|
-
|
62
|
+
def each_osdep_package_name(&block)
|
63
|
+
osdeps.each(&block)
|
64
|
+
end
|
65
|
+
|
66
|
+
def packages
|
67
|
+
Autoproj.warn_deprecated "PackageSelection#packages", "use PackageSelection#source_packages instead", 0
|
68
|
+
source_packages
|
69
|
+
end
|
70
|
+
|
71
|
+
def select(sel, packages, options = Hash.new)
|
72
|
+
if !options.kind_of?(Hash)
|
73
|
+
Autoproj.warn_deprecated "calling PackageSelection#select with a boolean as third argument", "use e.g. weak: true instead", 0
|
74
|
+
options = Hash[weak: options]
|
75
|
+
end
|
76
|
+
options = Kernel.validate_options options,
|
77
|
+
weak: false,
|
78
|
+
osdep: false
|
79
|
+
|
80
|
+
packages = Array(packages).to_set
|
81
|
+
matches[sel].merge(packages)
|
69
82
|
packages.each do |pkg_name|
|
70
83
|
selection[pkg_name] << sel
|
71
84
|
end
|
72
|
-
|
85
|
+
if options[:osdep]
|
86
|
+
osdeps.merge(packages)
|
87
|
+
else
|
88
|
+
source_packages.merge(packages)
|
89
|
+
end
|
90
|
+
|
91
|
+
weak_dependencies[sel] = options[:weak]
|
73
92
|
end
|
74
93
|
|
75
94
|
def initialize_copy(old)
|