Following recent discussion, this PR refactors install and os plugins. Based on that the resolve is given a major overhaul and install is implemented.
Some more concrete changes:
removed "priority" based resolution and replaced with notion of "core" and "addiontal" installers
installer and os plugins are now based on plugin_utils and have a more uniform API (preferring properties over getters). New base classes InstallerBase and OSBase implement some common functionality (while the abstract base classes Installer and OS contain no implementation).
both plugin types have options, which are passed through from the config files and utilize config_utils for describing the structure and parsing
only the normal info output goes to stdout, everything else like error, warning and info_v goes to stderr
installer plugin now have a "prerequisite" abstraction for checking things like if the installer is present, if it is updated, and if resolution-specfic options are met (e.g. taps for homebrew or repositories for apt)
installer plugins use config_utils to parse installer_rules reusing that code for improved error handling and warning the user about unknown keys (in the installer_rule)
added option to disable specific plugins
added xubuntu OS plugin to showcase how derivative OS's with matching versions are supposed to work
reorganize tests to run in order unit tests, system tests, code style tests
improved the handling and printing of "chained exceptions"
all exception classes are now defined in their corresponding modules
introduced XylemInternalError to wrap errors that are likely bugs, not user/config/environment errors
improved top level error handling:
at the top level XylemErros are caught and printed showing chained exceptions
no tracebacks are shown, except in debug mode, or for XylemInternalErrors
Following recent discussion, this PR refactors install and os plugins. Based on that the
resolve
is given a major overhaul andinstall
is implemented.Some more concrete changes:
plugin_utils
and have a more uniform API (preferring properties over getters). New base classesInstallerBase
andOSBase
implement some common functionality (while the abstract base classesInstaller
andOS
contain no implementation).config_utils
for describing the structure and parsinginfo
output goes to stdout, everything else likeerror
,warning
andinfo_v
goes to stderrconfig_utils
to parseinstaller_rules
reusing that code for improved error handling and warning the user about unknown keys (in the installer_rule)