class Autoproj::CLI::MainSync

The 'jenkins' subcommand for autoproj

Public Instance Methods

add(name, uri) click to toggle source
# File lib/autoproj/cli/main_sync.rb, line 58
def add(name, uri)
    if remote = config.find_remote_by_name(name)
        STDERR.puts "There is already a target called #{name} pointing to "\
            "#{remote.uri}"
        exit 1
    end

    remote = Sync::Remote.from_uri(URI.parse(uri), name: name)
    config.add_remote(remote)
    packages, = Autoproj.silent { ws_load }
    remote.start do |sftp|
        remote.update(sftp, ws, packages)
    end
end
config() click to toggle source
# File lib/autoproj/cli/main_sync.rb, line 22
def config
    unless @config
        @config = Sync::Config.new(ws)
    end
    @config
end
disable(*names) click to toggle source
# File lib/autoproj/cli/main_sync.rb, line 135
def disable(*names)
    names = ws.config.get('sync', Hash.new).keys if names.empty?
    names.each do |name|
        config.update_remote_config(name) do |config|
            config['enabled'] = false
        end
    end
end
enable(*names) click to toggle source
# File lib/autoproj/cli/main_sync.rb, line 117
def enable(*names)
    names = ws.config.get('sync', Hash.new).keys if names.empty?
    packages = nil
    names.each do |name|
        config.update_remote_config(name) do |remote_config|
            unless remote_config['enabled']
                remote = config.remote_by_name(name)
                packages, = Autoproj.silent { ws_load } unless packages
                remote.start do |sftp|
                    remote.update(sftp, ws, packages)
                end
                remote_config['enabled'] = true
            end
        end
    end
end
exec(remote_name, *command) click to toggle source
# File lib/autoproj/cli/main_sync.rb, line 172
def exec(remote_name, *command)
    remote = config.remote_by_name(remote_name)
    status = remote.start do |sftp|
        remote.remote_autoproj(sftp, ws.root_dir, "exec", *command,
            interactive: options[:interactive],
            chdir: options[:chdir] || ws.root_dir)
    end
    unless options[:interactive]
        if status[:exit_signal]
            exit 255
        else
            exit status[:exit_code]
        end
    end
end
install_osdeps(manager_type, *packages) click to toggle source
# File lib/autoproj/cli/main_sync.rb, line 147
def install_osdeps(manager_type, *packages)
    Autobuild.silent { ws_load }
    installer = ws.os_package_installer

    installer.setup_package_managers
    manager = installer.package_managers.fetch(manager_type)
    installer.install_manager_packages(manager, packages)
end
list() click to toggle source
# File lib/autoproj/cli/main_sync.rb, line 79
def list
    config.each_remote do |remote|
        enabled = remote.enabled? ? 'enabled' : 'disabled'
        puts "#{remote.name}: #{remote.uri} (#{enabled})"
    end
end
osdeps(*names) click to toggle source
# File lib/autoproj/cli/main_sync.rb, line 157
def osdeps(*names)
    _, osdep_packages = Autobuild.silent { ws_load }
    remotes = resolve_selected_remotes(*names)
    remotes.each do |r|
        r.start do |sftp|
            r.osdeps(sftp, ws, osdep_packages)
        end
    end
end
remove(name) click to toggle source
# File lib/autoproj/cli/main_sync.rb, line 74
def remove(name)
    config.delete_remote(name)
end
resolve_selected_remotes(*names) click to toggle source
# File lib/autoproj/cli/main_sync.rb, line 47
def resolve_selected_remotes(*names)
    if names.empty?
        config.each_enabled_remote
    else
        names.map { |n| config.remote_by_name(n) }
    end
end
status(*names) click to toggle source
# File lib/autoproj/cli/main_sync.rb, line 88
def status(*names)
    remotes = resolve_selected_remotes(*names)
    packages, = Autoproj.silent { ws_load }

    remotes.each do |r|
        outdated_packages =
            r.start do |sftp|
                r.each_outdated_package(sftp, @ws, packages).to_a
            end
        puts "#{outdated_packages.size} outdated packages"
        outdated_packages.each do |pkg|
            puts "  #{pkg.name}"
        end
    end
end
update(*names) click to toggle source
# File lib/autoproj/cli/main_sync.rb, line 105
def update(*names)
    remotes = resolve_selected_remotes(*names)
    packages, = Autoproj.silent { ws_load }

    remotes.each do |r|
        r.start do |sftp|
            r.update(sftp, ws, packages)
        end
    end
end
ws() click to toggle source
# File lib/autoproj/cli/main_sync.rb, line 10
def ws
    unless @ws
        @ws = Autoproj::Workspace.default
        @ws.load_config
        unless @ws.config.separate_prefixes?
            raise RuntimeError, "autoproj-sync only works on workspaces "\
                "that have separate prefixes enabled"
        end
    end
    @ws
end
ws_load() click to toggle source
# File lib/autoproj/cli/main_sync.rb, line 29
def ws_load
    ws.setup
    ws.load_package_sets
    ws.setup_all_package_directories
    ws.finalize_package_setup

    source_packages, osdep_packages, _resolved_selection =
        ws.load_packages(ws.manifest.default_packages(false),
            recursive: true,
            non_imported_packages: :ignore,
            auto_exclude: false)
    ws.finalize_setup
    source_packages = source_packages.map do |name|
        ws.manifest.find_package_definition(name)
    end
    [source_packages, osdep_packages]
end