1
0
mirror of https://github.com/deadc0de6/dotdrop.git synced 2026-02-07 03:40:36 +00:00

fix: report error on double config import

This commit is contained in:
Davide Laezza
2022-01-18 00:48:04 +01:00
committed by deadc0de
parent 296c179f62
commit b54da1f5c0
2 changed files with 124 additions and 2 deletions

View File

@@ -102,13 +102,14 @@ class CfgYaml:
top_entries = [key_dotfiles, key_settings, key_profiles]
def __init__(self, path, profile=None, addprofiles=None,
reloading=False, debug=False):
reloading=False, debug=False, imported_configs=None):
"""
config parser
@path: config file path
@profile: the selected profile names
@addprofiles: included profiles names (list)
@reloading: true when reloading
@imported_configs: paths of config files that have been imported so far
@debug: debug flag
"""
self._path = os.path.abspath(path)
@@ -124,6 +125,8 @@ class CfgYaml:
self._profilevarskeys = []
# included profiles
self._inc_profiles = addprofiles or []
# imported configs
self.imported_configs = imported_configs or []
# init the dictionaries
self.settings = {}
@@ -981,7 +984,8 @@ class CfgYaml:
self._dbg('included profiles: {}'.format(self._inc_profiles))
sub = CfgYaml(path, profile=self._profile,
addprofiles=self._inc_profiles,
debug=self._debug)
debug=self._debug,
imported_configs=self.imported_configs)
# settings are ignored from external file
# except for filter_file and func_file
@@ -1003,6 +1007,9 @@ class CfgYaml:
self.trans_w = self._merge_dict(self.trans_w, sub.trans_w)
self._clear_profile_vars(sub.variables)
self.imported_configs.append(path)
self.imported_configs += sub.imported_configs
if self._debug:
self._debug_dict('add import_configs var', sub.variables)
self._add_variables(sub.variables, prio=True)
@@ -1015,6 +1022,10 @@ class CfgYaml:
return
paths = self._resolve_paths(imp)
for path in paths:
if path in self.imported_configs:
err = '{} imported more than once in {}'.format(path,
self._path)
raise YamlException(err)
self._import_config(path)
def _import_sub(self, path, key, mandatory=False, patch_func=None):