From 53dfbc8aa37397f628c04ca4d1f24e5840594871 Mon Sep 17 00:00:00 2001 From: deadc0de6 Date: Tue, 21 Jan 2020 09:03:24 +0100 Subject: [PATCH] fix bug for #204 --- dotdrop/cfg_yaml.py | 15 ++++++++++++++- tests-ng/filter_file.sh | 27 ++++++++++++++++++++++++++- tests-ng/func_file.sh | 27 ++++++++++++++++++++++++++- 3 files changed, 66 insertions(+), 3 deletions(-) diff --git a/dotdrop/cfg_yaml.py b/dotdrop/cfg_yaml.py index 3ab663e..f117b67 100644 --- a/dotdrop/cfg_yaml.py +++ b/dotdrop/cfg_yaml.py @@ -618,13 +618,26 @@ class CfgYaml: self.log.warn(err) return sub = CfgYaml(path, profile=self.profile, debug=self.debug) - # settings is ignored + + # settings are ignored from external file + # except for filter_file and func_file + self.settings[Settings.key_func_file] += [ + self._norm_path(func_file) + for func_file in sub.settings[Settings.key_func_file] + ] + self.settings[Settings.key_filter_file] += [ + self._norm_path(func_file) + for func_file in sub.settings[Settings.key_filter_file] + ] + + # merge top entries self.dotfiles = self._merge_dict(self.dotfiles, sub.dotfiles) self.profiles = self._merge_dict(self.profiles, sub.profiles) self.actions = self._merge_dict(self.actions, sub.actions) self.trans_r = self._merge_dict(self.trans_r, sub.trans_r) self.trans_w = self._merge_dict(self.trans_w, sub.trans_w) self._clear_profile_vars(sub.variables) + if self.debug: self.log.dbg('add import_configs var: {}'.format(sub.variables)) self.variables = self._merge_dict(sub.variables, self.variables) diff --git a/tests-ng/filter_file.sh b/tests-ng/filter_file.sh index 8043941..09aec9e 100755 --- a/tests-ng/filter_file.sh +++ b/tests-ng/filter_file.sh @@ -53,9 +53,11 @@ tmpd=`mktemp -d --suffix='-dotdrop-tests' || mktemp -d` #echo "dotfile destination: ${tmpd}" filter_file=`mktemp` filter_file2=`mktemp` +filter_file3=`mktemp` # create the config file cfg="${tmps}/config.yaml" +cfgext="${tmps}/ext.yaml" cat > ${cfg} << _EOF config: @@ -65,6 +67,8 @@ config: filter_file: - ${filter_file} - ${filter_file2} + import_configs: + - ${cfgext} dotfiles: f_abc: dst: ${tmpd}/abc @@ -76,6 +80,17 @@ profiles: _EOF #cat ${cfg} +cat > ${cfgext} << _EOF +config: + backup: true + create: true + dotpath: dotfiles + filter_file: + - ${filter_file3} +profiles: +dotfiles: +_EOF + cat << _EOF > ${filter_file} def filter1(arg1): return "filtered" @@ -88,6 +103,11 @@ def filter3(integer): return str(int(integer) - 10) _EOF +cat << _EOF > ${filter_file3} +def filter_ext(arg1): + return "external" +_EOF + # create the dotfile echo "this is the test dotfile" > ${tmps}/dotfiles/abc @@ -95,6 +115,7 @@ echo "this is the test dotfile" > ${tmps}/dotfiles/abc echo "{{@@ "abc" | filter1 @@}}" >> ${tmps}/dotfiles/abc echo "{{@@ "arg1" | filter2('arg2') @@}}" >> ${tmps}/dotfiles/abc echo "{{@@ "13" | filter3() @@}}" >> ${tmps}/dotfiles/abc +echo "{{@@ "something" | filter_ext() @@}}" >> ${tmps}/dotfiles/abc # install cd ${ddpath} | ${bin} install -f -c ${cfg} -p p1 -V @@ -104,9 +125,13 @@ cd ${ddpath} | ${bin} install -f -c ${cfg} -p p1 -V grep '^filtered$' ${tmpd}/abc >/dev/null grep '^arg2$' ${tmpd}/abc >/dev/null grep '^3$' ${tmpd}/abc >/dev/null +grep '^external$' ${tmpd}/abc >/dev/null +set +e +grep '^something$' ${tmpd}/abc >/dev/null && exit 1 +set -e ## CLEANING -rm -rf ${tmps} ${tmpd} ${filter_file} ${filter_file2} +rm -rf ${tmps} ${tmpd} ${filter_file} ${filter_file2} ${filter_file3} echo "OK" exit 0 diff --git a/tests-ng/func_file.sh b/tests-ng/func_file.sh index 85e1eaa..1c8967d 100755 --- a/tests-ng/func_file.sh +++ b/tests-ng/func_file.sh @@ -53,9 +53,11 @@ tmpd=`mktemp -d --suffix='-dotdrop-tests' || mktemp -d` #echo "dotfile destination: ${tmpd}" func_file=`mktemp` func_file2=`mktemp` +func_file3=`mktemp` # create the config file cfg="${tmps}/config.yaml" +cfgext="${tmps}/ext.yaml" cat > ${cfg} << _EOF config: @@ -65,6 +67,8 @@ config: func_file: - ${func_file} - ${func_file2} + import_configs: + - ${cfgext} dotfiles: f_abc: dst: ${tmpd}/abc @@ -76,6 +80,17 @@ profiles: _EOF #cat ${cfg} +cat > ${cfgext} << _EOF +config: + backup: true + create: true + dotpath: dotfiles + func_file: + - ${func_file3} +dotfiles: +profiles: +_EOF + cat << _EOF > ${func_file} def func1(something): if something: @@ -88,6 +103,11 @@ def func2(inp): return not inp _EOF +cat << _EOF > ${func_file3} +def func3(inp): + return "external" +_EOF + # create the dotfile echo "this is the test dotfile" > ${tmps}/dotfiles/abc @@ -108,6 +128,10 @@ echo "{%@@ if func2(False) @@%}" >> ${tmps}/dotfiles/abc echo "yes" >> ${tmps}/dotfiles/abc echo "{%@@ endif @@%}" >> ${tmps}/dotfiles/abc +echo "{%@@ if func3("whatever") == "external" @@%}" >> ${tmps}/dotfiles/abc +echo "externalok" >> ${tmps}/dotfiles/abc +echo "{%@@ endif @@%}" >> ${tmps}/dotfiles/abc + # install cd ${ddpath} | ${bin} install -f -c ${cfg} -p p1 -V @@ -116,12 +140,13 @@ cd ${ddpath} | ${bin} install -f -c ${cfg} -p p1 -V grep '^this should exist$' ${tmpd}/abc >/dev/null grep '^this should exist too$' ${tmpd}/abc >/dev/null grep '^yes$' ${tmpd}/abc >/dev/null +grep '^externalok$' ${tmpd}/abc >/dev/null set +e grep '^nope$' ${tmpd}/abc >/dev/null && exit 1 set -e ## CLEANING -rm -rf ${tmps} ${tmpd} ${func_file} ${func_file2} +rm -rf ${tmps} ${tmpd} ${func_file} ${func_file2} ${func_file3} echo "OK" exit 0