diff --git a/dotdrop/importer.py b/dotdrop/importer.py index 9f45fdf..abcf4d4 100644 --- a/dotdrop/importer.py +++ b/dotdrop/importer.py @@ -186,13 +186,20 @@ class Importer: self.log.dry('would copy {} to {}'.format(dst, srcf)) else: # copy the file to the dotpath - if os.path.isdir(dst): - if os.path.exists(srcf): - shutil.rmtree(srcf) - shutil.copytree(dst, srcf, copy_function=self._cp, - ignore=shutil.ignore_patterns(*self.ignore)) - else: - shutil.copy2(dst, srcf) + try: + if os.path.isdir(dst): + if os.path.exists(srcf): + shutil.rmtree(srcf) + ig = shutil.ignore_patterns(*self.ignore) + shutil.copytree(dst, srcf, + copy_function=self._cp, + ignore=ig) + else: + shutil.copy2(dst, srcf) + except shutil.Error as e: + src = e.args[0][0][0] + why = e.args[0][0][2] + self.log.err('importing \"{}\" failed: {}'.format(src, why)) return True diff --git a/tests-ng/import.sh b/tests-ng/import.sh index 854388e..81eb79c 100755 --- a/tests-ng/import.sh +++ b/tests-ng/import.sh @@ -101,6 +101,35 @@ cntpost=`find ${tmps}/dotfiles -type f | wc -l` [ "${cntpost}" != "${cntpre}" ] && echo "import issue" && exit 1 +####################################### +# import directory with named pipe + +cat > ${cfg} << _EOF +config: + backup: true + create: true + dotpath: dotfiles +dotfiles: +profiles: +_EOF + +# create the dotfile +d="${tmpd}/with_named_pipe" +mkdir -p ${d} +echo "file1" > ${d}/file1 +echo "fil2" > ${d}/file2 +mkfifo ${d}/fifo + +# import +cd ${ddpath} | ${bin} import -c ${cfg} -p p2 -V ${d} + +# ensure exists and is not link +[ ! -d ${tmps}/dotfiles/${d} ] && echo "not a directory" && exit 1 +[ ! -e ${tmps}/dotfiles/${d}/file1 ] && echo "not exist" && exit 1 +[ ! -e ${tmps}/dotfiles/${d}/file2 ] && echo "not exist" && exit 1 + +cat ${cfg} | grep ${d} >/dev/null 2>&1 + ## CLEANING rm -rf ${tmps} ${tmpd} diff --git a/tests.sh b/tests.sh index 722f973..d98f76b 100755 --- a/tests.sh +++ b/tests.sh @@ -100,4 +100,4 @@ fi #fi ## done -echo "All test finished successfully in ${SECONDS}s" +echo "All test finished successfully"