From 04abcb4710c4691a73ad359cf0836b6644347995 Mon Sep 17 00:00:00 2001 From: deadc0de6 Date: Sat, 21 May 2022 22:46:26 +0200 Subject: [PATCH] add test and fix for #349 --- dotdrop/importer.py | 8 +- tests-ng/profile-import-dotfiles.sh | 113 ++++++++++++++++++++++++++++ 2 files changed, 118 insertions(+), 3 deletions(-) create mode 100755 tests-ng/profile-import-dotfiles.sh diff --git a/dotdrop/importer.py b/dotdrop/importer.py index 143c035..0db389a 100644 --- a/dotdrop/importer.py +++ b/dotdrop/importer.py @@ -55,6 +55,7 @@ class Importer: 0: ignored -1: error """ + path = os.path.abspath(path) self.log.dbg('import {}'.format(path)) if not os.path.exists(path): self.log.err('\"{}\" does not exist, ignored!'.format(path)) @@ -114,7 +115,7 @@ class Importer: self.log.err('importing \"{}\" failed!'.format(path)) return -1 - if self._already_exists(src, dst): + if self._already_exists(path, dst): return -1 self.log.dbg('import dotfile: src:{} dst:{}'.format(src, dst)) @@ -135,7 +136,7 @@ class Importer: # handle file mode chmod = None dflperm = get_default_file_perms(dst, self.umask) - self.log.dbg('import mode: {}'.format(import_mode)) + self.log.dbg('import chmod: {}'.format(import_mode)) if import_mode or perm != dflperm: msg = 'adopt mode {:o} (umask {:o})' self.log.dbg(msg.format(perm, dflperm)) @@ -234,7 +235,8 @@ class Importer: not self.conf.get_dotfile_by_src_dst(src, dst): # same profile # different src - self.log.err('duplicate dotfile for this profile') + msg = 'duplicate dotfile: {}' + self.log.err(msg.format(dotfile.key)) return True return False diff --git a/tests-ng/profile-import-dotfiles.sh b/tests-ng/profile-import-dotfiles.sh new file mode 100755 index 0000000..8505cdc --- /dev/null +++ b/tests-ng/profile-import-dotfiles.sh @@ -0,0 +1,113 @@ +#!/usr/bin/env bash +# author: deadc0de6 (https://github.com/deadc0de6) +# Copyright (c) 2022, deadc0de6 +# +# test dotfiles imported in profile +# and importing +# 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 +################################################################ + +# the dotfile source +tmps=`mktemp -d --suffix='-dotdrop-tests' || mktemp -d` +mkdir -p ${tmps}/dotfiles +# the dotfile destination +tmpd=`mktemp -d --suffix='-dotdrop-tests' || mktemp -d` + +clear_on_exit "${tmps}" +clear_on_exit "${tmpd}" + +# create the config file +cfg="${tmps}/config.yaml" +cfg2="${tmps}/dotfiles.yaml" + +src="dotdrop-test" +dst=".dotdrop-test" +clear_on_exit "${HOME}/${dst}" + +cat > ${cfg} << _EOF +config: + dotpath: dotfiles +dotfiles: + f_abc: + dst: ${tmpd}/abc + src: abc + f_def: + dst: ~/${dst} + src: ${src} +profiles: + p1: + import: + - dotfiles.yaml + dotfiles: + - f_abc +_EOF +cat ${cfg} + +cat > ${cfg2} << _EOF +dotfiles: + - f_def +_EOF +#cat ${cfg2} + +# create the dotfile +echo "abc" > ${tmps}/dotfiles/abc +echo "abc" > ${tmpd}/abc +echo "def" > ${tmps}/dotfiles/${src} +echo "def" > ${HOME}/${dst} + +# import +## this is a special case since the dotfile must +## be in home (because it is strip) +echo ${ddpath} +echo ${bin} +cd ${ddpath} | ${bin} import -f -c ${cfg} -p p1 --verbose ~/${dst} + +cat ${cfg} +echo '----------' +cat ${cfg2} + +cnt=$(cd ${ddpath} | ${bin} files -G -c ${cfg} -p p1 | grep '^f_def' | wc -l) +[ "${cnt}" != "1" ] && echo "imported twice!" && exit 1 + +echo "OK" +exit 0