armbian-build/lib/tools/common/patching_config.py

102 lines
4.2 KiB
Python
Raw Normal View History

#
# SPDX-License-Identifier: GPL-2.0
# Copyright (c) 2023 Ricardo Pardini <ricardo@pardini.net>
# This file is a part of the Armbian Build Framework https://github.com/armbian/build/
#
import logging
import yaml
log: logging.Logger = logging.getLogger("patching_config")
class PatchingAutoPatchMakefileDTConfig:
def __init__(self, data: dict):
self.config_var: str = data.get("config-var", None)
self.directory: str = data.get("directory", None)
self.incremental: bool = not not data.get("incremental", False)
def __str__(self):
return f"PatchingAutoPatchMakefileDTConfig(config-var={self.config_var}, directory={self.directory}, incremental={self.incremental})"
class PatchingDTSDirectoryConfig:
def __init__(self, data: dict):
self.source: str = data.get("source", None)
self.target: str = data.get("target", None)
def __str__(self):
return f"PatchingDTSDirectoryConfig(source={self.source}, target={self.target})"
class PatchingOverlayDirectoryConfig:
def __init__(self, data: dict):
self.source: str = data.get("source", None)
self.target: str = data.get("target", None)
def __str__(self):
return f"PatchingOverlayDirectoryConfig(source={self.source}, target={self.target})"
class PatchingB4AMConfig:
def __init__(self, data: dict):
self.prefix: str = data.get("prefix", None)
self.lore: str = data.get("lore", None)
def __str__(self):
return f"PatchingB4AMConfig(prefix={self.prefix}, lore={self.lore})"
class PatchingToGitConfig:
def __init__(self, data: dict):
self.do_not_commit_files: list[str] = data.get("do-not-commit-files", [])
self.do_not_commit_regexes: list[str] = data.get("do-not-commit-regexes", [])
def __str__(self):
return f"PatchingToGitConfig(do_not_commit_files={self.do_not_commit_files}, do_not_commit_regexes={self.do_not_commit_regexes})"
class PatchingConfig:
def __init__(self, yaml_config_file_paths: list[str]):
self.yaml_config_file_paths = yaml_config_file_paths
if len(yaml_config_file_paths) == 0:
self.yaml_config = {}
else:
# I'm lazy, single one for now.
self.yaml_config = self.read_yaml_config(yaml_config_file_paths[0])["config"]
self.patches_to_git_config: PatchingToGitConfig = PatchingToGitConfig(self.yaml_config.get("patches-to-git", {}))
# Parse out the different parts of the config
# DT Makefile auto-patch config
self.autopatch_makefile_dt_configs: list[PatchingAutoPatchMakefileDTConfig] = [
PatchingAutoPatchMakefileDTConfig(data) for data in self.yaml_config.get("auto-patch-dt-makefile", [])
]
self.has_autopatch_makefile_dt_configs: bool = len(self.autopatch_makefile_dt_configs) > 0
# DTS directories to copy config
self.dts_directories: list[PatchingDTSDirectoryConfig] = [
PatchingDTSDirectoryConfig(data) for data in self.yaml_config.get("dts-directories", [])
]
self.has_dts_directories: bool = len(self.dts_directories) > 0
# Overlay directories to copy config
self.overlay_directories: list[PatchingOverlayDirectoryConfig] = [
PatchingOverlayDirectoryConfig(data) for data in self.yaml_config.get("overlay-directories", [])
]
self.has_overlay_directories: bool = len(self.overlay_directories) > 0
# 'b4' auto 'am' patching config
# DTS directories to copy config
self.b4_am_configs: list[PatchingB4AMConfig] = [
PatchingB4AMConfig(data) for data in self.yaml_config.get("b4-am", [])
]
self.has_b4_am_configs: bool = len(self.b4_am_configs) > 0
def read_yaml_config(self, yaml_config_file_path):
with open(yaml_config_file_path) as f:
yaml_config = yaml.load(f, Loader=yaml.FullLoader)
return yaml_config