autoproj 2.8.8 → 2.9.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.
- checksums.yaml +4 -4
- data/bin/alog +5 -3
- data/lib/autoproj.rb +2 -0
- data/lib/autoproj/cli/base.rb +8 -1
- data/lib/autoproj/cli/build.rb +5 -3
- data/lib/autoproj/cli/locate.rb +5 -1
- data/lib/autoproj/cli/osdeps.rb +1 -0
- data/lib/autoproj/cli/status.rb +13 -4
- data/lib/autoproj/cli/update.rb +9 -5
- data/lib/autoproj/default.osdeps +14 -0
- data/lib/autoproj/manifest.rb +7 -9
- data/lib/autoproj/ops/build.rb +48 -2
- data/lib/autoproj/ops/configuration.rb +18 -0
- data/lib/autoproj/os_package_installer.rb +27 -0
- data/lib/autoproj/os_repository_installer.rb +53 -0
- data/lib/autoproj/os_repository_resolver.rb +137 -0
- data/lib/autoproj/package_managers/apt_dpkg_manager.rb +70 -10
- data/lib/autoproj/package_managers/bundler_manager.rb +9 -2
- data/lib/autoproj/package_managers/debian_version.rb +123 -0
- data/lib/autoproj/package_managers/manager.rb +9 -0
- data/lib/autoproj/package_managers/pip_manager.rb +4 -0
- data/lib/autoproj/package_selection.rb +36 -10
- data/lib/autoproj/package_set.rb +39 -4
- data/lib/autoproj/repository_managers/apt.rb +289 -0
- data/lib/autoproj/repository_managers/manager.rb +26 -0
- data/lib/autoproj/repository_managers/unknown_os_manager.rb +30 -0
- data/lib/autoproj/test.rb +1 -0
- data/lib/autoproj/version.rb +1 -1
- data/lib/autoproj/workspace.rb +21 -7
- metadata +8 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: a79f0dc8faf8c992dedb96e65c997ab35f41d62107845dd9dd20bc260630f0a2
         | 
| 4 | 
            +
              data.tar.gz: 2e3db38917f2cefa9defa70fa248ced0c05ad909817003b135d9b7f6179ca8bc
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 346bdce3bf52c42187143908ef04767a03e1e71b24738b0c333591bd73d113355a871ccdf67bec9b69018d30e3302e6a53946e007922a4a3e01fb82fa371eae8
         | 
| 7 | 
            +
              data.tar.gz: 470faaa51b2d58609f70e794173d07d41003feee472c3c9e3dd9bb8024e66746403a480becad1dc0222066084e76c0205104465e138afc714d8555fc32d60d55
         | 
    
        data/bin/alog
    CHANGED
    
    | @@ -24,10 +24,12 @@ Autoproj.report(silent: true) do | |
| 24 24 | 
             
                if log_files.size == 1
         | 
| 25 25 | 
             
                    logfile = log_files.first
         | 
| 26 26 | 
             
                elsif log_files.size > 1
         | 
| 27 | 
            -
                     | 
| 27 | 
            +
                    begin
         | 
| 28 | 
            +
                        logfile = cli.select_log_file(log_files)
         | 
| 29 | 
            +
                        puts File.read(logfile)
         | 
| 30 | 
            +
                    rescue Interrupt
         | 
| 31 | 
            +
                    end
         | 
| 28 32 | 
             
                elsif log_files.empty?
         | 
| 29 33 | 
             
                    raise "no logs found for #{string}"
         | 
| 30 34 | 
             
                end
         | 
| 31 | 
            -
             | 
| 32 | 
            -
                puts File.read(logfile)
         | 
| 33 35 | 
             
            end
         | 
    
        data/lib/autoproj.rb
    CHANGED
    
    | @@ -30,6 +30,8 @@ | |
| 30 30 | 
             
            require 'autoproj/installation_manifest'
         | 
| 31 31 | 
             
            require 'autoproj/os_package_installer'
         | 
| 32 32 | 
             
            require 'autoproj/os_package_resolver'
         | 
| 33 | 
            +
            require 'autoproj/os_repository_resolver'
         | 
| 34 | 
            +
            require 'autoproj/os_repository_installer'
         | 
| 33 35 | 
             
            require 'autoproj/system'
         | 
| 34 36 | 
             
            require 'autoproj/build_option'
         | 
| 35 37 | 
             
            require 'autoproj/configuration'
         | 
    
        data/lib/autoproj/cli/base.rb
    CHANGED
    
    | @@ -206,7 +206,14 @@ def self.validate_options(args, options) | |
| 206 206 | 
             
                        end
         | 
| 207 207 |  | 
| 208 208 | 
             
                        def export_env_sh(shell_helpers: ws.config.shell_helpers?)
         | 
| 209 | 
            -
                            @env_sh_updated  | 
| 209 | 
            +
                            # @env_sh_updated == nil means "did not even export".
         | 
| 210 | 
            +
                            # make sure that it is set to 'true' or 'false'
         | 
| 211 | 
            +
                            @env_sh_updated =
         | 
| 212 | 
            +
                                if ws.export_env_sh(shell_helpers: shell_helpers)
         | 
| 213 | 
            +
                                    true
         | 
| 214 | 
            +
                                else
         | 
| 215 | 
            +
                                    false
         | 
| 216 | 
            +
                                end
         | 
| 210 217 | 
             
                        end
         | 
| 211 218 |  | 
| 212 219 | 
             
                        def notify_env_sh_updated
         | 
    
        data/lib/autoproj/cli/build.rb
    CHANGED
    
    | @@ -27,7 +27,10 @@ def run(selected_packages, options) | |
| 27 27 | 
             
                                confirm: true
         | 
| 28 28 |  | 
| 29 29 | 
             
                            command_line_selection, source_packages, _osdep_packages =
         | 
| 30 | 
            -
                                super(selected_packages, | 
| 30 | 
            +
                                super(selected_packages,
         | 
| 31 | 
            +
                                      ignore_errors: options[:keep_going],
         | 
| 32 | 
            +
                                      checkout_only: true,
         | 
| 33 | 
            +
                                      **options)
         | 
| 31 34 |  | 
| 32 35 | 
             
                            parallel = build_options[:parallel] || ws.config.parallel_build_level
         | 
| 33 36 |  | 
| @@ -41,7 +44,7 @@ def run(selected_packages, options) | |
| 41 44 |  | 
| 42 45 | 
             
                            Autobuild.ignore_errors = options[:keep_going]
         | 
| 43 46 |  | 
| 44 | 
            -
                            ops = Ops::Build.new(ws.manifest)
         | 
| 47 | 
            +
                            ops = Ops::Build.new(ws.manifest, report_dir: ws.log_dir)
         | 
| 45 48 | 
             
                            if build_options[:rebuild] || build_options[:force]
         | 
| 46 49 | 
             
                                packages_to_rebuild =
         | 
| 47 50 | 
             
                                    if options[:deps] || command_line_selection.empty?
         | 
| @@ -77,7 +80,6 @@ def run(selected_packages, options) | |
| 77 80 |  | 
| 78 81 | 
             
                            Autobuild.do_build = true
         | 
| 79 82 | 
             
                            ops.build_packages(source_packages, parallel: parallel)
         | 
| 80 | 
            -
                            Autobuild.apply(source_packages, "autoproj-build", ['install'])
         | 
| 81 83 | 
             
                            Main.run_post_command_hook(:build, ws, source_packages: source_packages)
         | 
| 82 84 | 
             
                        ensure
         | 
| 83 85 | 
             
                            export_env_sh
         | 
    
        data/lib/autoproj/cli/locate.rb
    CHANGED
    
    | @@ -285,7 +285,11 @@ def select_log_file(log_files) | |
| 285 285 | 
             
                            end
         | 
| 286 286 |  | 
| 287 287 | 
             
                            prompt = TTY::Prompt.new
         | 
| 288 | 
            -
                             | 
| 288 | 
            +
                            begin
         | 
| 289 | 
            +
                                prompt.select("Select the log file", choices)
         | 
| 290 | 
            +
                            rescue TTY::Reader::InputInterrupt
         | 
| 291 | 
            +
                                raise Interrupt
         | 
| 292 | 
            +
                            end
         | 
| 289 293 | 
             
                        end
         | 
| 290 294 | 
             
                    end
         | 
| 291 295 | 
             
                end
         | 
    
        data/lib/autoproj/cli/osdeps.rb
    CHANGED
    
    
    
        data/lib/autoproj/cli/status.rb
    CHANGED
    
    | @@ -73,6 +73,15 @@ def snapshot_overrides_vcs?(importer, vcs, snapshot) | |
| 73 73 | 
             
                            end
         | 
| 74 74 | 
             
                        end
         | 
| 75 75 |  | 
| 76 | 
            +
                        def report_exception(package_status, msg, e)
         | 
| 77 | 
            +
                            package_status.msg << Autoproj.color("  #{msg} (#{e})", :red)
         | 
| 78 | 
            +
                            if Autobuild.debug
         | 
| 79 | 
            +
                                package_status.msg.concat(e.backtrace.map do |line|
         | 
| 80 | 
            +
                                    Autoproj.color("    #{line}", :red)
         | 
| 81 | 
            +
                                end)
         | 
| 82 | 
            +
                            end
         | 
| 83 | 
            +
                        end
         | 
| 84 | 
            +
             | 
| 76 85 | 
             
                        PackageStatus = Struct.new :msg, :sync, :uncommitted, :local, :remote
         | 
| 77 86 | 
             
                        def status_of_package(package_description, only_local: false, snapshot: false)
         | 
| 78 87 | 
             
                            pkg = package_description.autobuild
         | 
| @@ -85,9 +94,9 @@ def status_of_package(package_description, only_local: false, snapshot: false) | |
| 85 94 | 
             
                            elsif !File.directory?(pkg.srcdir)
         | 
| 86 95 | 
             
                                package_status.msg << Autoproj.color("  is not imported yet", :magenta)
         | 
| 87 96 | 
             
                            else
         | 
| 88 | 
            -
                                begin status = importer.status(pkg, only_local)
         | 
| 97 | 
            +
                                begin status = importer.status(pkg, only_local: only_local)
         | 
| 89 98 | 
             
                                rescue StandardError => e
         | 
| 90 | 
            -
                                    package_status | 
| 99 | 
            +
                                    report_exception(package_status, "failed to fetch status information", e)
         | 
| 91 100 | 
             
                                    return package_status
         | 
| 92 101 | 
             
                                end
         | 
| 93 102 |  | 
| @@ -99,7 +108,7 @@ def status_of_package(package_description, only_local: false, snapshot: false) | |
| 99 108 | 
             
                                        rescue Autobuild::PackageException
         | 
| 100 109 | 
             
                                            Hash.new
         | 
| 101 110 | 
             
                                        rescue StandardError => e
         | 
| 102 | 
            -
                                            package_status | 
| 111 | 
            +
                                            report_exception(package_status, "failed to fetch snapshotting information", e)
         | 
| 103 112 | 
             
                                            return package_status
         | 
| 104 113 | 
             
                                        end
         | 
| 105 114 | 
             
                                    if snapshot_overrides_vcs?(importer, package_description.vcs, snapshot_version)
         | 
| @@ -227,7 +236,7 @@ def display_status(packages, parallel: ws.config.parallel_import_level, snapshot | |
| 227 236 | 
             
                                end
         | 
| 228 237 | 
             
                            end
         | 
| 229 238 |  | 
| 230 | 
            -
                            result = each_package_status(packages, parallel: parallel, progress: progress) do |pkg, status|
         | 
| 239 | 
            +
                            result = each_package_status(packages, only_local: only_local, parallel: parallel, progress: progress) do |pkg, status|
         | 
| 231 240 | 
             
                                if spinner
         | 
| 232 241 | 
             
                                    spinner.stop
         | 
| 233 242 | 
             
                                    spinner = nil
         | 
    
        data/lib/autoproj/cli/update.rb
    CHANGED
    
    | @@ -44,7 +44,7 @@ def validate_options(selection, options) | |
| 44 44 | 
             
                                (options[:autoproj] || (
         | 
| 45 45 | 
             
                                    options[:autoproj] != false &&
         | 
| 46 46 | 
             
                                    !has_explicit_selection &&
         | 
| 47 | 
            -
                                    !options[:config] && | 
| 47 | 
            +
                                    !options[:config] &&
         | 
| 48 48 | 
             
                                    !options[:checkout_only])
         | 
| 49 49 | 
             
                                )
         | 
| 50 50 |  | 
| @@ -97,6 +97,8 @@ def run(selected_packages, run_hook: false, **options) | |
| 97 97 | 
             
                                command_line_selection, selected_packages =
         | 
| 98 98 | 
             
                                    finish_loading_configuration(selected_packages)
         | 
| 99 99 | 
             
                            else
         | 
| 100 | 
            +
                                ws.setup_all_package_directories
         | 
| 101 | 
            +
                                ws.finalize_package_setup
         | 
| 100 102 | 
             
                                command_line_selection, selected_packages = [], PackageSelection.new
         | 
| 101 103 | 
             
                            end
         | 
| 102 104 |  | 
| @@ -106,10 +108,11 @@ def run(selected_packages, run_hook: false, **options) | |
| 106 108 | 
             
                                osdeps: options[:osdeps],
         | 
| 107 109 | 
             
                                osdeps_filter_uptodate: options[:osdeps_filter_uptodate])
         | 
| 108 110 |  | 
| 109 | 
            -
                            source_packages, osdep_packages, import_failure = | 
| 111 | 
            +
                            source_packages, osdep_packages, import_failure =
         | 
| 110 112 | 
             
                                update_packages(
         | 
| 111 113 | 
             
                                    selected_packages,
         | 
| 112 | 
            -
                                    osdeps: options[:osdeps], | 
| 114 | 
            +
                                    osdeps: options[:osdeps],
         | 
| 115 | 
            +
                                    osdeps_options: osdeps_options,
         | 
| 113 116 | 
             
                                    from: options[:from],
         | 
| 114 117 | 
             
                                    checkout_only: options[:checkout_only],
         | 
| 115 118 | 
             
                                    only_local: options[:only_local],
         | 
| @@ -124,6 +127,7 @@ def run(selected_packages, run_hook: false, **options) | |
| 124 127 | 
             
                            ws.export_installation_manifest
         | 
| 125 128 |  | 
| 126 129 | 
             
                            if options[:osdeps] && !osdep_packages.empty?
         | 
| 130 | 
            +
                                ws.install_os_repositories
         | 
| 127 131 | 
             
                                ws.install_os_packages(osdep_packages, **osdeps_options)
         | 
| 128 132 | 
             
                            end
         | 
| 129 133 |  | 
| @@ -141,7 +145,7 @@ def run(selected_packages, run_hook: false, **options) | |
| 141 145 |  | 
| 142 146 | 
             
                            export_env_sh
         | 
| 143 147 |  | 
| 144 | 
            -
                            if !options[:auto_exclude]
         | 
| 148 | 
            +
                            if !options[:auto_exclude] && !options[:ignore_errors]
         | 
| 145 149 | 
             
                                if import_failure && configuration_import_failure
         | 
| 146 150 | 
             
                                    raise ImportFailed.new(configuration_import_failure.original_errors + import_failure.original_errors)
         | 
| 147 151 | 
             
                                elsif import_failure
         | 
| @@ -198,7 +202,7 @@ def update_packages(selected_packages, | |
| 198 202 | 
             
                            end
         | 
| 199 203 |  | 
| 200 204 | 
             
                            ops = Autoproj::Ops::Import.new(ws)
         | 
| 201 | 
            -
                            source_packages, osdep_packages = | 
| 205 | 
            +
                            source_packages, osdep_packages =
         | 
| 202 206 | 
             
                                    ops.import_packages(selected_packages,
         | 
| 203 207 | 
             
                                                    checkout_only: checkout_only,
         | 
| 204 208 | 
             
                                                    only_local: only_local,
         | 
    
        data/lib/autoproj/default.osdeps
    CHANGED
    
    | @@ -160,9 +160,23 @@ pip: | |
| 160 160 | 
             
              opensuse: python-pip
         | 
| 161 161 | 
             
              fedora: python-pip
         | 
| 162 162 | 
             
              freebsd: pip
         | 
| 163 | 
            +
              default: ignore # assume pip will be installed by the user
         | 
| 163 164 |  | 
| 164 165 | 
             
            sudo:
         | 
| 165 166 | 
             
              macos-brew: ignore
         | 
| 166 167 | 
             
              default: sudo
         | 
| 167 168 |  | 
| 169 | 
            +
            archive-keyring:
         | 
| 170 | 
            +
              ubuntu: ubuntu-keyring
         | 
| 171 | 
            +
              debian: debian-archive-keyring
         | 
| 172 | 
            +
              default: ignore
         | 
| 173 | 
            +
             | 
| 174 | 
            +
            gnupg:
         | 
| 175 | 
            +
              ubuntu,debian: gnupg
         | 
| 176 | 
            +
              default: ignore
         | 
| 177 | 
            +
             | 
| 178 | 
            +
            apt-transport-https:
         | 
| 179 | 
            +
              ubuntu,debian: apt-transport-https
         | 
| 180 | 
            +
              default: ignore
         | 
| 181 | 
            +
             | 
| 168 182 | 
             
            # vim: expandtab
         | 
    
        data/lib/autoproj/manifest.rb
    CHANGED
    
    | @@ -892,16 +892,14 @@ def package_selected?(name, validate = true) | |
| 892 892 | 
             
                    #
         | 
| 893 893 | 
             
                    # @return [Array<PackageDefinition>]
         | 
| 894 894 | 
             
                    def all_selected_source_packages(validate = true)
         | 
| 895 | 
            -
                         | 
| 896 | 
            -
             | 
| 895 | 
            +
                        default_packages(validate).all_selected_source_packages(self)
         | 
| 896 | 
            +
                    end
         | 
| 897 897 |  | 
| 898 | 
            -
             | 
| 899 | 
            -
             | 
| 900 | 
            -
             | 
| 901 | 
            -
             | 
| 902 | 
            -
                         | 
| 903 | 
            -
                            find_package_definition(pkg_name)
         | 
| 904 | 
            -
                        end
         | 
| 898 | 
            +
                    # Returns the set of osdep packages that are selected by the layout
         | 
| 899 | 
            +
                    #
         | 
| 900 | 
            +
                    # @return [Array<String>]
         | 
| 901 | 
            +
                    def all_selected_osdep_packages(validate = true)
         | 
| 902 | 
            +
                        default_packages(validate).all_selected_osdep_packages(self)
         | 
| 905 903 | 
             
                    end
         | 
| 906 904 |  | 
| 907 905 | 
             
                    # Returns the set of packages that are selected by the layout
         | 
    
        data/lib/autoproj/ops/build.rb
    CHANGED
    
    | @@ -1,3 +1,4 @@ | |
| 1 | 
            +
            require 'erb'
         | 
| 1 2 | 
             
            module Autoproj
         | 
| 2 3 | 
             
                module Ops
         | 
| 3 4 | 
             
                    # Operations related to building packages
         | 
| @@ -10,8 +11,11 @@ class Build | |
| 10 11 | 
             
                        # @return [Manifest]
         | 
| 11 12 | 
             
                        attr_reader :manifest
         | 
| 12 13 |  | 
| 13 | 
            -
                         | 
| 14 | 
            +
                        # @param [String] report_dir the log directory in which to build
         | 
| 15 | 
            +
                        #   the build report. If left to nil, no report will be generated
         | 
| 16 | 
            +
                        def initialize(manifest, report_dir: nil)
         | 
| 14 17 | 
             
                            @manifest = manifest
         | 
| 18 | 
            +
                            @report_dir = report_dir
         | 
| 15 19 | 
             
                        end
         | 
| 16 20 |  | 
| 17 21 | 
             
                        # Triggers a rebuild of all packages
         | 
| @@ -73,6 +77,7 @@ def force_build_packages(selected_packages, all_enabled_packages) | |
| 73 77 | 
             
                            build_packages(all_enabled_packages)
         | 
| 74 78 | 
             
                        end
         | 
| 75 79 |  | 
| 80 | 
            +
             | 
| 76 81 | 
             
                        # Builds the listed packages
         | 
| 77 82 | 
             
                        #
         | 
| 78 83 | 
             
                        # Only build steps that are actually needed will be performed. See
         | 
| @@ -84,7 +89,48 @@ def force_build_packages(selected_packages, all_enabled_packages) | |
| 84 89 | 
             
                        def build_packages(all_enabled_packages, options = Hash.new)
         | 
| 85 90 | 
             
                            Autobuild.do_rebuild = false
         | 
| 86 91 | 
             
                            Autobuild.do_forced_build = false
         | 
| 87 | 
            -
                             | 
| 92 | 
            +
                            begin
         | 
| 93 | 
            +
                                Autobuild.apply(all_enabled_packages, "autoproj-build", ['build'], options)
         | 
| 94 | 
            +
                            ensure
         | 
| 95 | 
            +
                                build_report(all_enabled_packages) if @report_dir
         | 
| 96 | 
            +
                            end
         | 
| 97 | 
            +
                        end
         | 
| 98 | 
            +
             | 
| 99 | 
            +
                        REPORT_BASENAME = "build_report.json"
         | 
| 100 | 
            +
             | 
| 101 | 
            +
                        # The path to the report file
         | 
| 102 | 
            +
                        #
         | 
| 103 | 
            +
                        # @return [String,nil] the path, or nil if the report should not
         | 
| 104 | 
            +
                        #    be generated
         | 
| 105 | 
            +
                        def report_path
         | 
| 106 | 
            +
                            File.join(@report_dir, REPORT_BASENAME) if @report_dir
         | 
| 107 | 
            +
                        end
         | 
| 108 | 
            +
             | 
| 109 | 
            +
                        def build_report(package_list)
         | 
| 110 | 
            +
                            FileUtils.mkdir_p @report_dir
         | 
| 111 | 
            +
             | 
| 112 | 
            +
                            packages = package_list.map do |pkg_name|
         | 
| 113 | 
            +
                                pkg = manifest.find_autobuild_package(pkg_name)
         | 
| 114 | 
            +
             | 
| 115 | 
            +
                                {
         | 
| 116 | 
            +
                                    name: pkg.name,
         | 
| 117 | 
            +
                                    import_invoked: pkg.import_invoked?,
         | 
| 118 | 
            +
                                    prepare_invoked: pkg.prepare_invoked?,
         | 
| 119 | 
            +
                                    build_invoked: pkg.build_invoked?,
         | 
| 120 | 
            +
                                    failed: pkg.failed?,
         | 
| 121 | 
            +
                                    imported: pkg.imported?,
         | 
| 122 | 
            +
                                    prepared: pkg.prepared?,
         | 
| 123 | 
            +
                                    built: pkg.built?
         | 
| 124 | 
            +
                                }
         | 
| 125 | 
            +
                            end
         | 
| 126 | 
            +
             | 
| 127 | 
            +
                            build_report = JSON.pretty_generate({
         | 
| 128 | 
            +
                                build_report: {
         | 
| 129 | 
            +
                                    timestamp: Time.now,
         | 
| 130 | 
            +
                                    packages: packages
         | 
| 131 | 
            +
                                }
         | 
| 132 | 
            +
                            })
         | 
| 133 | 
            +
                            IO.write(report_path, build_report)
         | 
| 88 134 | 
             
                        end
         | 
| 89 135 | 
             
                    end
         | 
| 90 136 | 
             
                end
         | 
| @@ -464,6 +464,9 @@ def load_package_set_information(mainline: nil) | |
| 464 464 | 
             
                            end
         | 
| 465 465 | 
             
                        end
         | 
| 466 466 |  | 
| 467 | 
            +
                        # Loads OS repository definitions once and for all
         | 
| 468 | 
            +
                        load_osrepos_from_package_sets
         | 
| 469 | 
            +
             | 
| 467 470 | 
             
                        # Loads OS package definitions once and for all
         | 
| 468 471 | 
             
                        load_osdeps_from_package_sets
         | 
| 469 472 |  | 
| @@ -580,6 +583,21 @@ def load_osdeps_from_package_sets | |
| 580 583 | 
             
                        end
         | 
| 581 584 | 
             
                    end
         | 
| 582 585 |  | 
| 586 | 
            +
                    # Load OS repository information contained in our registered package
         | 
| 587 | 
            +
                    # sets into the provided osrepo object
         | 
| 588 | 
            +
                    #
         | 
| 589 | 
            +
                    # This is included in {load_package_sets}
         | 
| 590 | 
            +
                    #
         | 
| 591 | 
            +
                    # @return [void]
         | 
| 592 | 
            +
                    def load_osrepos_from_package_sets
         | 
| 593 | 
            +
                        ws.manifest.each_package_set do |pkg_set|
         | 
| 594 | 
            +
                            pkg_set.each_osrepos_file do |file|
         | 
| 595 | 
            +
                                file_osrepos = pkg_set.load_osrepos(file)
         | 
| 596 | 
            +
                                ws.os_repository_resolver.merge(file_osrepos)
         | 
| 597 | 
            +
                            end
         | 
| 598 | 
            +
                        end
         | 
| 599 | 
            +
                    end
         | 
| 600 | 
            +
             | 
| 583 601 | 
             
                    def update_package_sets(only_local: false,
         | 
| 584 602 | 
             
                                            checkout_only: !Autobuild.do_update,
         | 
| 585 603 | 
             
                                            keep_going: false,
         | 
| @@ -188,6 +188,10 @@ def osdeps_mode_string_to_value(string) | |
| 188 188 | 
             
                        modes
         | 
| 189 189 | 
             
                    end
         | 
| 190 190 |  | 
| 191 | 
            +
                    def configure_manager
         | 
| 192 | 
            +
                        os_package_manager.configure_manager if osdeps_mode.include?('os')
         | 
| 193 | 
            +
                    end
         | 
| 194 | 
            +
             | 
| 191 195 | 
             
                    # If set to true (the default), #install will try to remove the list of
         | 
| 192 196 | 
             
                    # already uptodate packages from the installed packages. Set to false to
         | 
| 193 197 | 
             
                    # install all packages regardless of their status
         | 
| @@ -380,6 +384,29 @@ def resolve_and_partition_osdep_packages(osdep_packages, all_osdep_packages = ni | |
| 380 384 |  | 
| 381 385 | 
             
                            partitioned_packages[manager] = manager_packages
         | 
| 382 386 | 
             
                        end
         | 
| 387 | 
            +
                        resolve_managers_dependencies(partitioned_packages)
         | 
| 388 | 
            +
                    end
         | 
| 389 | 
            +
             | 
| 390 | 
            +
                    def resolve_managers_dependencies(partitioned_packages)
         | 
| 391 | 
            +
                        partitioned_packages.clone.each do |manager, packages|
         | 
| 392 | 
            +
                            # Skip if the manager is not being used
         | 
| 393 | 
            +
                            next if packages&.empty?
         | 
| 394 | 
            +
             | 
| 395 | 
            +
                            manager_dependencies = os_package_resolver.resolve_os_packages(manager.os_dependencies)
         | 
| 396 | 
            +
                            manager_dependencies = resolve_package_managers_in_mapping(manager_dependencies)
         | 
| 397 | 
            +
                            manager_dependencies.each_key do |nested_manager|
         | 
| 398 | 
            +
                                deps = manager_dependencies.fetch(nested_manager, Set.new).to_set
         | 
| 399 | 
            +
                                next if deps.empty?
         | 
| 400 | 
            +
             | 
| 401 | 
            +
                                unless partitioned_packages[nested_manager]
         | 
| 402 | 
            +
                                    partitioned_packages[nested_manager] = Set.new
         | 
| 403 | 
            +
                                    enable_recursion = true
         | 
| 404 | 
            +
                                end
         | 
| 405 | 
            +
             | 
| 406 | 
            +
                                partitioned_packages[nested_manager] += deps
         | 
| 407 | 
            +
                                partitioned_packages = resolve_managers_dependencies(partitioned_packages) if enable_recursion
         | 
| 408 | 
            +
                           end
         | 
| 409 | 
            +
                        end
         | 
| 383 410 | 
             
                        partitioned_packages
         | 
| 384 411 | 
             
                    end
         | 
| 385 412 |  | 
| @@ -0,0 +1,53 @@ | |
| 1 | 
            +
            require 'autoproj/repository_managers/manager'
         | 
| 2 | 
            +
            require 'autoproj/repository_managers/unknown_os_manager'
         | 
| 3 | 
            +
            require 'autoproj/repository_managers/apt'
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            module Autoproj
         | 
| 6 | 
            +
                class OSRepositoryInstaller
         | 
| 7 | 
            +
                    # The workspace object
         | 
| 8 | 
            +
                    attr_reader :ws
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                    # Returns the set of repository managers
         | 
| 11 | 
            +
                    attr_reader :repository_managers
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                    OS_REPOSITORY_MANAGERS = {
         | 
| 14 | 
            +
                        'debian' => RepositoryManagers::APT
         | 
| 15 | 
            +
                    }.freeze
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                    def initialize(ws)
         | 
| 18 | 
            +
                        @ws = ws
         | 
| 19 | 
            +
                        @repository_managers = {}
         | 
| 20 | 
            +
                        OS_REPOSITORY_MANAGERS.each do |name, klass|
         | 
| 21 | 
            +
                            @repository_managers[name] = klass.new(ws)
         | 
| 22 | 
            +
                        end
         | 
| 23 | 
            +
                    end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                    def os_repository_resolver
         | 
| 26 | 
            +
                        ws.os_repository_resolver
         | 
| 27 | 
            +
                    end
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                    # Returns the repository manager object for the current OS
         | 
| 30 | 
            +
                    def os_repository_manager
         | 
| 31 | 
            +
                        return @os_repository_manager if @os_repository_manager
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                        os_names, = os_repository_resolver.operating_system
         | 
| 34 | 
            +
                        os_name = os_names.find { |name| OS_REPOSITORY_MANAGERS[name] }
         | 
| 35 | 
            +
             | 
| 36 | 
            +
                        @os_repository_manager =
         | 
| 37 | 
            +
                            repository_managers[os_name] ||
         | 
| 38 | 
            +
                            RepositoryManagers::UnknownOSManager.new(ws)
         | 
| 39 | 
            +
                    end
         | 
| 40 | 
            +
             | 
| 41 | 
            +
                    def each_manager(&block)
         | 
| 42 | 
            +
                        repository_managers.each_value(&block)
         | 
| 43 | 
            +
                    end
         | 
| 44 | 
            +
             | 
| 45 | 
            +
                    def install_os_repositories
         | 
| 46 | 
            +
                        return if os_repository_resolver.resolved_entries.empty?
         | 
| 47 | 
            +
             | 
| 48 | 
            +
                        deps = os_repository_manager.os_dependencies
         | 
| 49 | 
            +
                        ws.install_os_packages(deps, all: nil) unless deps.empty?
         | 
| 50 | 
            +
                        os_repository_manager.install(os_repository_resolver.resolved_entries)
         | 
| 51 | 
            +
                    end
         | 
| 52 | 
            +
                end
         | 
| 53 | 
            +
            end
         |