From fef31dbc438205265e46256e0dd318908ac9fe76 Mon Sep 17 00:00:00 2001 From: Thomas Roehr Date: Mon, 11 Oct 2021 22:03:58 +0200 Subject: [PATCH] Allow defining distribution specific overrides in a package sets overrides.d folder --- lib/autoproj/local_package_set.rb | 18 ------------- lib/autoproj/package_set.rb | 45 ++++++++++++++++++++++++++++++- 2 files changed, 44 insertions(+), 19 deletions(-) diff --git a/lib/autoproj/local_package_set.rb b/lib/autoproj/local_package_set.rb index b68dec99..3f57ff8c 100644 --- a/lib/autoproj/local_package_set.rb +++ b/lib/autoproj/local_package_set.rb @@ -44,24 +44,6 @@ def load_description_file parse_source_definition(source_definition) end - # Load the files in overrides.d in addition to the overrides: field in - # the yaml file - def load_overrides(source_definition) - files = Dir.glob(File.join(ws.overrides_dir, "*.yml")).sort - overrides = files.map do |file| - source_data = Autoproj.in_file(file, Autoproj::YAML_LOAD_ERROR) do - YAML.load(File.read(file)) || Array.new - end - source_data = - if source_data.respond_to?(:to_ary) - source_data - else source_data["overrides"] || Hash.new - end - [file, source_data] - end - overrides + super - end - def raw_description_file description = Hash[ "imports" => Array.new, diff --git a/lib/autoproj/package_set.rb b/lib/autoproj/package_set.rb index 51638a6f..a2884d6f 100644 --- a/lib/autoproj/package_set.rb +++ b/lib/autoproj/package_set.rb @@ -510,9 +510,52 @@ def load_description_file parse_source_definition(source_definition) end + # Load the files in overrides.d and in source.yml overrides def load_overrides(source_definition) + overrides = [] if (data = source_definition["overrides"]) - [[source_file, data]] + overrides << [source_file, data] + end + + pkgset_overrides_dir = File.join(raw_local_dir, "overrides.d") + return overrides unless File.exist?(pkgset_overrides_dir) + + overrides += load_overrides_from_dir(pkgset_overrides_dir) + + # operating system is, for instance, + # [["ubuntu", "debian"], ["18.04", "18.04.4", "lts", "bionic", "beaver", "default"]] + + ws.operating_system[0].each do |release_name| + distribution_overrides_dir = File.join(pkgset_overrides_dir, release_name) + if File.exist?(distribution_overrides_dir) + overrides += load_overrides_from_dir(distribution_overrides_dir) + end + + ws.operating_system[1].each do |release_version| + distribution_version_overrides_dir = File.join(pkgset_overrides_dir, release_name, release_version) + if File.exist?(distribution_version_overrides_dir) + overrides += load_overrides_from_dir(distribution_version_overrides_dir) + end + end + end + + overrides + end + + # Load the override files from a given directory + def load_overrides_from_dir(dir) + files = Dir.glob(File.join(dir, "*.yml")).sort + files.map do |file| + source_data = Autoproj.in_file(file, Autoproj::YAML_LOAD_ERROR) do + YAML.load(File.read(file)) || Array.new + end + source_data = + if source_data.respond_to?(:to_ary) + source_data + else + source_data["overrides"] || Hash.new + end + [file, source_data] end end