From 640310c0a4f782ad6e37011a4cbcbb7cd30a8574 Mon Sep 17 00:00:00 2001 From: deadc0de6 Date: Sun, 22 Nov 2020 10:45:02 +0100 Subject: [PATCH] fix fake dotfiles actions not executed --- dotdrop/dotdrop.py | 32 +++++++++----------------------- dotdrop/installer.py | 5 +++++ tests-ng/actions.sh | 15 +++++++++++++++ 3 files changed, 29 insertions(+), 23 deletions(-) diff --git a/dotdrop/dotdrop.py b/dotdrop/dotdrop.py index f1ea6e6..b2ed3b2 100644 --- a/dotdrop/dotdrop.py +++ b/dotdrop/dotdrop.py @@ -298,7 +298,7 @@ def cmd_install(o): if o.install_temporary: tmpdir = get_tmpdir() - installed = 0 + installed = [] # execute profile pre-action if o.debug: @@ -317,43 +317,29 @@ def cmd_install(o): wait_for = [] for dotfile in dotfiles: - if not dotfile.src or not dotfile.dst: - # fake dotfile are always considered installed - if o.debug: - LOG.dbg('fake dotfile installed') - installed += 1 - else: - j = ex.submit(_dotfile_install, o, dotfile, tmpdir=tmpdir) - wait_for.append(j) + j = ex.submit(_dotfile_install, o, dotfile, tmpdir=tmpdir) + wait_for.append(j) # check result for f in futures.as_completed(wait_for): r, key, err = f.result() if r: - installed += 1 + installed.append(key) elif err: LOG.err('installing \"{}\" failed: {}'.format(key, err)) else: # sequentially for dotfile in dotfiles: - if not dotfile.src or not dotfile.dst: - # fake dotfile are always considered installed - if o.debug: - LOG.dbg('fake dotfile installed') - key = dotfile.key - r = True - err = None - else: - r, key, err = _dotfile_install(o, dotfile, tmpdir=tmpdir) + r, key, err = _dotfile_install(o, dotfile, tmpdir=tmpdir) # check result if r: - installed += 1 + installed.append(key) elif err: LOG.err('installing \"{}\" failed: {}'.format(key, err)) # execute profile post-action - if installed > 0 or o.install_force_action: + if len(installed) > 0 or o.install_force_action: if o.debug: msg = 'run {} profile post actions' LOG.dbg(msg.format(len(pro_post_actions))) @@ -362,11 +348,11 @@ def cmd_install(o): return False if o.debug: - LOG.dbg('install done - {} installed'.format(installed)) + LOG.dbg('install done: installed \"{}\"'.format(','.join(installed))) if o.install_temporary: LOG.log('\ninstalled to tmp \"{}\".'.format(tmpdir)) - LOG.log('\n{} dotfile(s) installed.'.format(installed)) + LOG.log('\n{} dotfile(s) installed.'.format(len(installed))) return True diff --git a/dotdrop/installer.py b/dotdrop/installer.py index 5d6c9c3..91ae289 100644 --- a/dotdrop/installer.py +++ b/dotdrop/installer.py @@ -85,6 +85,11 @@ class Installer: - False, error_msg : error - False, None : ignored """ + if not src or not dst: + # fake dotfile + self.log.dbg('fake dotfile installed') + self._exec_pre_actions(actionexec) + return True, None if self.debug: msg = 'installing \"{}\" to \"{}\" (link: {})' self.log.dbg(msg.format(src, dst, str(linktype))) diff --git a/tests-ng/actions.sh b/tests-ng/actions.sh index 20486f2..dd202d1 100755 --- a/tests-ng/actions.sh +++ b/tests-ng/actions.sh @@ -62,11 +62,13 @@ actions: pre: preaction: echo 'pre' > ${tmpa}/pre preaction2: echo 'pre2' > ${tmpa}/pre2 + fake_pre: echo 'fake pre' > ${tmpa}/fake_pre post: postaction: echo 'post' > ${tmpa}/post postaction2: echo 'post2' > ${tmpa}/post2 nakedaction: echo 'naked' > ${tmpa}/naked _silentaction: echo 'silent' + fakeaction: echo 'fake' > ${tmpa}/fake config: backup: true create: true @@ -82,10 +84,17 @@ dotfiles: - preaction2 - postaction2 - _silentaction + f_fake: + dst: + src: + actions: + - fakeaction + - fake_pre profiles: p1: dotfiles: - f_abc + - f_fake _EOF #cat ${cfg} @@ -111,6 +120,12 @@ grep "executing \"echo 'naked' > ${tmpa}/naked" ${tmpa}/log >/dev/null grep "executing \"echo 'silent'" ${tmpa}/log >/dev/null && false grep "executing silent action \"_silentaction\"" ${tmpa}/log >/dev/null +# fake action +[ ! -e ${tmpa}/fake ] && echo 'fake post action not executed' && exit 1 +grep fake ${tmpa}/fake >/dev/null +[ ! -e ${tmpa}/fake_pre ] && echo 'fake pre action not executed' && exit 1 +grep 'fake pre' ${tmpa}/fake_pre >/dev/null + ## CLEANING rm -rf ${tmps} ${tmpd} ${tmpa}