Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: allow to disable osdeps overload warnings #409

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 22 additions & 0 deletions lib/autoproj/configuration.rb
Original file line number Diff line number Diff line change
Expand Up @@ -370,6 +370,28 @@ def prefix_dir=(path)
set("prefix", path, true)
end

# Whether Autoproj should warn if a package set overrides the osdep of
# another
#
# It is true for historical reasons. Set this to false in your
# workspace's init.rb for the new behavior
#
# @see osdeps_warn_overrides=
def osdeps_warn_overrides?
get "osdeps_warn_overrides", true
end

# Sets whether Autoproj should warn if a package set overrides the osdep
# of another
#
# It is true for historical reasons. Set this to false in your
# workspace's init.rb for the new behavior
#
# @see osdeps_warn_overrides?
def osdeps_warn_overrides=(flag)
set "osdeps_warn_overrides", flag
end

# The directory in which packages will be installed.
#
# If it is a relative path, it is relative to the root dir of the
Expand Down
2 changes: 1 addition & 1 deletion lib/autoproj/manifest.rb
Original file line number Diff line number Diff line change
Expand Up @@ -185,7 +185,7 @@ def accept_unavailable_osdeps?
# build nothing) and no layout at all
attr_predicate :has_layout?

def initialize(ws, os_package_resolver: OSPackageResolver.new)
def initialize(ws, os_package_resolver: OSPackageResolver.new(ws))
@ws = ws
@vcs = VCSDefinition.none
@file = nil
Expand Down
25 changes: 16 additions & 9 deletions lib/autoproj/os_package_resolver.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
module Autoproj
# Manager for packages provided by external package managers
class OSPackageResolver
def self.load(file, suffixes: [], **options)
def self.load(ws, file, suffixes: [], **options)
unless File.file?(file)
raise ArgumentError, "no such file or directory #{file}"
end
Expand All @@ -19,7 +19,7 @@ def self.load(file, suffixes: [], **options)
ArgumentError
end

result = new(**options)
result = new(ws, **options)
candidates.each do |file_candidate|
next unless File.file?(file_candidate)

Expand All @@ -32,7 +32,9 @@ def self.load(file, suffixes: [], **options)
"#{e.message}", e.backtrace
end

result.merge(new(data, file_candidate, **options))
result.merge(
new(ws, data, file_candidate, **options)
)
end
result
end
Expand All @@ -49,18 +51,18 @@ def self.autodetect_ruby_program
end

AUTOPROJ_OSDEPS = File.join(__dir__, "default.osdeps")
def self.load_default
def self.load_default(ws)
file = ENV["AUTOPROJ_DEFAULT_OSDEPS"] || AUTOPROJ_OSDEPS
unless File.file?(file)
Autoproj.warn "#{file} (from AUTOPROJ_DEFAULT_OSDEPS) is not a file, "\
"falling back to #{AUTOPROJ_OSDEPS}"
file = AUTOPROJ_OSDEPS
end
load(file)
load(ws, file)
end

def load_default
merge(self.class.load_default)
merge(self.class.load_default(@ws))
end

PACKAGE_MANAGERS = OSPackageInstaller::PACKAGE_MANAGERS.keys
Expand Down Expand Up @@ -140,10 +142,13 @@ def os_package_manager

# The Gem::SpecFetcher object that should be used to query RubyGems, and
# install RubyGems packages
def initialize(defs = Hash.new, file = nil,
def initialize(
ws, defs = {}, file = nil,
operating_system: nil,
package_managers: PACKAGE_MANAGERS.dup,
os_package_manager: nil)
os_package_manager: nil
)
@ws = ws
@definitions = defs.to_hash
@resolve_package_cache = Hash.new
@all_definitions = Hash.new { |h, k| h[k] = Array.new }
Expand Down Expand Up @@ -205,7 +210,9 @@ def invalidate_resolve_package_cache
# takes precedence
def merge(info, suffixes: [])
@definitions = definitions.merge(info.definitions) do |h, v1, v2|
warn_about_merge_collisions(info, suffixes, h, v1, v2) if v1 != v2
if v1 != v2 && ws.config.osdeps_warn_overrides?
warn_about_merge_collisions(info, suffixes, h, v1, v2)
end
v2
end
invalidate_resolve_package_cache
Expand Down
3 changes: 2 additions & 1 deletion lib/autoproj/package_set.rb
Original file line number Diff line number Diff line change
Expand Up @@ -167,6 +167,7 @@ def initialize(
@name = name
@os_repository_resolver = OSRepositoryResolver.new
@os_package_resolver = OSPackageResolver.new(
ws,
operating_system: ws.os_package_resolver.operating_system,
package_managers: ws.os_package_resolver.package_managers,
os_package_manager: ws.os_package_resolver.os_package_manager
Expand All @@ -191,7 +192,7 @@ def initialize(
# Load a new osdeps file for this package set
def load_osdeps(file, **options)
new_osdeps = OSPackageResolver.load(
file,
@ws, file,
suffixes: ws.osdep_suffixes,
**options
)
Expand Down
1 change: 1 addition & 0 deletions lib/autoproj/test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -312,6 +312,7 @@ def ws_define_package_manager(name, strict: false, call_while_empty: false)

def ws_create_os_package_resolver
@ws_os_package_resolver = OSPackageResolver.new(
@ws,
operating_system: [["test_os_family"], ["test_os_version"]],
package_managers: ws_package_managers.keys,
os_package_manager: "os"
Expand Down
2 changes: 1 addition & 1 deletion lib/autoproj/workspace.rb
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ class Workspace < Ops::Loader
attr_reader :osdep_suffixes

def initialize(root_dir,
os_package_resolver: OSPackageResolver.new,
os_package_resolver: OSPackageResolver.new(self),
package_managers: OSPackageInstaller::PACKAGE_MANAGERS,
os_repository_resolver: OSRepositoryResolver.new(
operating_system: os_package_resolver.operating_system
Expand Down
Loading