From cd3a1a26a2dd24c0ed99cd3293d8ce6ad25b3617 Mon Sep 17 00:00:00 2001 From: deadc0de6 Date: Thu, 26 May 2022 22:23:07 +0200 Subject: [PATCH] add ability to template dotpath for #346 --- dotdrop/cfg_yaml.py | 15 ++++- tests-ng/template-dotpath.sh | 117 +++++++++++++++++++++++++++++++++++ 2 files changed, 130 insertions(+), 2 deletions(-) create mode 100755 tests-ng/template-dotpath.sh diff --git a/dotdrop/cfg_yaml.py b/dotdrop/cfg_yaml.py index e1237b1..25a9e07 100644 --- a/dotdrop/cfg_yaml.py +++ b/dotdrop/cfg_yaml.py @@ -222,6 +222,13 @@ class CfgYaml: title = 'variables defined (after template include)' self._debug_dict(title, self.variables) + ################################################## + # template config entries + ################################################## + entry = self.settings[self.key_settings_dotpath] + val = self._template_item(entry) + self.settings[self.key_settings_dotpath] = val + ################################################## # parse the other blocks ################################################## @@ -1273,8 +1280,12 @@ class CfgYaml: def _redefine_templater(self): """create templater based on current variables""" - fufile = self.settings[Settings.key_func_file] - fifile = self.settings[Settings.key_filter_file] + fufile = None + fifile = None + if Settings.key_func_file in self.settings: + fufile = self.settings[Settings.key_func_file] + if Settings.key_filter_file in self.settings: + fifile = self.settings[Settings.key_filter_file] self._tmpl = Templategen(variables=self.variables, func_file=fufile, filter_file=fifile) diff --git a/tests-ng/template-dotpath.sh b/tests-ng/template-dotpath.sh new file mode 100755 index 0000000..ed4b283 --- /dev/null +++ b/tests-ng/template-dotpath.sh @@ -0,0 +1,117 @@ +#!/usr/bin/env bash +# author: deadc0de6 (https://github.com/deadc0de6) +# Copyright (c) 2022, deadc0de6 +# +# test dotpath templated +# returns 1 in case of error +# + +# exit on first error +set -e + +# all this crap to get current path +rl="readlink -f" +if ! ${rl} "${0}" >/dev/null 2>&1; then + rl="realpath" + + if ! hash ${rl}; then + echo "\"${rl}\" not found !" && exit 1 + fi +fi +cur=$(dirname "$(${rl} "${0}")") + +#hash dotdrop >/dev/null 2>&1 +#[ "$?" != "0" ] && echo "install dotdrop to run tests" && exit 1 + +#echo "called with ${1}" + +# dotdrop path can be pass as argument +ddpath="${cur}/../" +[ "${1}" != "" ] && ddpath="${1}" +[ ! -d ${ddpath} ] && echo "ddpath \"${ddpath}\" is not a directory" && exit 1 + +export PYTHONPATH="${ddpath}:${PYTHONPATH}" +bin="python3 -m dotdrop.dotdrop" +hash coverage 2>/dev/null && bin="coverage run -a --source=dotdrop -m dotdrop.dotdrop" || true + +echo "dotdrop path: ${ddpath}" +echo "pythonpath: ${PYTHONPATH}" + +# get the helpers +source ${cur}/helpers + +echo -e "$(tput setaf 6)==> RUNNING $(basename $BASH_SOURCE) <==$(tput sgr0)" + +################################################################ +# this is the test +################################################################ + +dotpath="xyz" + +# dotdrop directory +tmps=`mktemp -d --suffix='-dotdrop-tests' || mktemp -d` +mkdir -p ${tmps}/${dotpath} +echo "[+] dotdrop dir: ${tmps}" +echo "[+] dotpath dir: ${tmps}/${dotpath}" + +# dotfile destination +tmpd=`mktemp -d --suffix='-dotdrop-tests' || mktemp -d` + +clear_on_exit "${tmps}" +clear_on_exit "${tmpd}" + +echo "content" > ${tmps}/${dotpath}/abc + +# create the config file +cfg="${tmps}/config.yaml" +cat > ${cfg} << _EOF +config: + backup: true + create: true + dotpath: "{{@@ env['DOTDROP_DOTPATH'] @@}}" +dotfiles: + f_abc: + src: abc + dst: ${tmpd}/abc +profiles: + p1: + dotfiles: + - f_abc +_EOF + +echo "[+] install" +export DOTDROP_DOTPATH=${dotpath} +cd ${ddpath} | ${bin} install -c ${cfg} -f -p p1 --verbose | grep '^1 dotfile(s) installed.$' +[ "$?" != "0" ] && exit 1 + +[ ! -e ${tmpd}/abc ] && echo "f_abc not installed" && exit 1 + +# clean +rm ${tmpd}/abc + +# create the config file +cat > ${cfg} << _EOF +config: + backup: true + create: true + dotpath: "{{@@ var1 @@}}" +variables: + var1: "${dotpath}" +dotfiles: + f_abc: + src: abc + dst: ${tmpd}/abc +profiles: + p1: + dotfiles: + - f_abc +_EOF + +echo "[+] install" +cd ${ddpath} | ${bin} install -c ${cfg} -f -p p1 --verbose | grep '^1 dotfile(s) installed.$' +[ "$?" != "0" ] && exit 1 + +[ ! -e ${tmpd}/abc ] && echo "f_abc not installed" && exit 1 + +echo "OK" +exit 0