From 5771e6516312019d645578154470a7143aeae4d0 Mon Sep 17 00:00:00 2001 From: deadc0de6 Date: Thu, 15 Jul 2021 08:51:30 +0200 Subject: [PATCH] adding test for #314 --- tests-ng/actions-empty-dir.sh | 155 ++++++++++++++++++++++++++++++++++ 1 file changed, 155 insertions(+) create mode 100755 tests-ng/actions-empty-dir.sh diff --git a/tests-ng/actions-empty-dir.sh b/tests-ng/actions-empty-dir.sh new file mode 100755 index 0000000..79ba61d --- /dev/null +++ b/tests-ng/actions-empty-dir.sh @@ -0,0 +1,155 @@ +#!/usr/bin/env bash +# author: deadc0de6 (https://github.com/deadc0de6) +# Copyright (c) 2017, deadc0de6 +# +# test pre/post/naked actions +# 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 action temp +tmpa=`mktemp -d --suffix='-dotdrop-tests' || mktemp -d` +# 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` + +# create the config file +cfg="${tmps}/config.yaml" + +cat > ${cfg} << _EOF +actions: + clearemptydir: find -L '{0}' -empty -type d -delete +config: + backup: true + create: true + dotpath: dotfiles +dotfiles: + f_dir1: + dst: ${tmpd}/dir1 + src: dir1 + ignoreempty: true + actions: + - clearemptydir ${tmpd}/dir1 + instignore: + - '*ignore' + f_dir2: + dst: ${tmpd}/dir2 + src: dir2 + link: link_children + ignoreempty: true + actions: + - clearemptydir ${tmpd}/dir2 + instignore: + - '*ignore' +profiles: + p1: + dotfiles: + - f_dir1 + - f_dir2 +_EOF +#cat ${cfg} + +# create the dotfile +mkdir ${tmps}/dotfiles/dir1 +mkdir ${tmps}/dotfiles/dir1/empty +echo "to-ignore" > ${tmps}/dotfiles/dir1/empty/this.ignore +mkdir ${tmps}/dotfiles/dir1/not-empty +echo "file" > ${tmps}/dotfiles/dir1/not-empty/file +mkdir ${tmps}/dotfiles/dir1/sub +mkdir ${tmps}/dotfiles/dir1/sub/empty +echo "to-ignore-too" > ${tmps}/dotfiles/dir1/sub/empty/that.ignore + +# create the dotfile +mkdir ${tmps}/dotfiles/dir2 +mkdir ${tmps}/dotfiles/dir2/empty +echo "{{@@ profile @@}}" > ${tmps}/dotfiles/dir2/empty/this.ignore +mkdir ${tmps}/dotfiles/dir2/not-empty +echo "{{@@ profile @@}}" > ${tmps}/dotfiles/dir2/not-empty/file +mkdir ${tmps}/dotfiles/dir2/sub +mkdir ${tmps}/dotfiles/dir2/sub/empty +echo "{{@@ profile @@}}" > ${tmps}/dotfiles/dir2/sub/empty/that.ignore + +# install +cd ${ddpath} | ${bin} install -f -c ${cfg} -p p1 -V # 2>&1 | tee ${tmpa}/log + +# checks normal +[ ! -d ${tmpd}/dir1 ] && exit 1 +[ -d ${tmpd}/dir1/empty ] && exit 1 +[ -e ${tmpd}/dir1/empty/this.ignore ] && exit 1 +[ ! -d ${tmpd}/dir1/not-empty ] && exit 1 +[ ! -e ${tmpd}/dir1/not-empty/file ] && exit 1 +[ -d ${tmpd}/dir1/sub ] && exit 1 +[ -d ${tmpd}/dir1/sub/empty ] && exit 1 +[ -e ${tmpd}/dir1/sub/empty/that.ignore ] && exit 1 +grep "file" ${tmpd}/dir1/not-empty/file + +# checks link_children +[ ! -d ${tmpd}/dir2 ] && exit 1 +[ ! -h ${tmpd}/dir2/empty ] && exit 1 +[ -e ${tmpd}/dir2/empty/this.ignore ] && exit 1 +[ ! -d ${tmpd}/dir2/not-empty ] && exit 1 +[ ! -h ${tmpd}/dir2/not-empty ] && exit 1 +[ ! -e ${tmpd}/dir2/not-empty/file ] && exit 1 +[ ! -d ${tmpd}/dir2/sub ] && exit 1 +[ ! -h ${tmpd}/dir2/sub ] && exit 1 +[ -d ${tmpd}/dir2/sub/empty ] && exit 1 +[ -e ${tmpd}/dir2/sub/empty/that.ignore ] && exit 1 +grep "p1" ${tmpd}/dir2/not-empty/file + +# second install won't trigger the action +cd ${ddpath} | ${bin} install -f -c ${cfg} -p p1 -V # 2>&1 | tee ${tmpa}/log + +# check normal +[ -d ${tmpd}/dir1/empty ] && echo "empty directory not cleaned" && exit 1 +[ -d ${tmpd}/dir1/sub/empty ] && echo "empty directory not cleaned" && exit 1 + +# check link_children +[ -d ${tmpd}/dir2/empty ] && echo "empty directory not cleaned" && exit 1 +[ -d ${tmpd}/dir2/sub/empty ] && echo "empty directory not cleaned" && exit 1 + +## CLEANING +rm -rf ${tmps} ${tmpd} ${tmpa} + +echo "OK" +exit 0