From bd09d4070f378cd442bcdb887d549f1ace9a7f97 Mon Sep 17 00:00:00 2001 From: deadc0de6 Date: Mon, 26 Oct 2020 13:22:13 +0100 Subject: [PATCH] remove error reported by logger for #268 --- dotdrop/dotdrop.py | 16 ++++++---------- dotdrop/installer.py | 2 +- dotdrop/updater.py | 8 ++++---- dotdrop/utils.py | 40 +++++++++++++++++++++++++++------------- 4 files changed, 38 insertions(+), 28 deletions(-) diff --git a/dotdrop/dotdrop.py b/dotdrop/dotdrop.py index 34b23c8..4712458 100644 --- a/dotdrop/dotdrop.py +++ b/dotdrop/dotdrop.py @@ -154,7 +154,7 @@ def cmd_install(o): if tmp: tmp = os.path.join(o.dotpath, tmp) if os.path.exists(tmp): - remove(tmp) + remove(tmp, LOG) if r: # dotfile was installed if not o.install_temporary: @@ -287,7 +287,7 @@ def cmd_compare(o, tmp): if tmpsrc: tmpsrc = os.path.join(o.dotpath, tmpsrc) if os.path.exists(tmpsrc): - remove(tmpsrc) + remove(tmpsrc, LOG) # print diff result if diff == '': @@ -584,11 +584,7 @@ def cmd_remove(o): # remove dotfile from dotpath dtpath = os.path.join(o.dotpath, dotfile.src) - try: - remove(dtpath) - except OSError: - # did not exist - pass + remove(dtpath, LOG) # remove empty directory parent = os.path.dirname(dtpath) # remove any empty parent up to dotpath @@ -597,7 +593,7 @@ def cmd_remove(o): msg = 'Remove empty dir \"{}\"'.format(parent) if o.safe and not LOG.ask(msg): break - remove(parent) + remove(parent, LOG) parent = os.path.dirname(parent) removed.append(dotfile.key) @@ -669,7 +665,7 @@ def apply_trans(dotpath, dotfile, templater, debug=False): msg = 'transformation \"{}\" failed for {}' LOG.err(msg.format(trans.key, dotfile.key)) if new_src and os.path.exists(new_src): - remove(new_src) + remove(new_src, LOG) return None return new_src @@ -728,7 +724,7 @@ def main(): tmp = get_tmpdir() ret = cmd_compare(o, tmp) # clean tmp directory - remove(tmp) + remove(tmp, LOG) elif o.cmd_import: # import dotfile(s) diff --git a/dotdrop/installer.py b/dotdrop/installer.py index 6f1cb73..a173e8c 100644 --- a/dotdrop/installer.py +++ b/dotdrop/installer.py @@ -537,7 +537,7 @@ class Installer: diff = utils.diff(modified=src, original=dst, raw=False, diff_cmd=self.diff_cmd) if tmp: - utils.remove(tmp, quiet=True) + utils.remove(tmp, logger=self.log) if not quiet and diff: self._print_diff(src, dst, diff) diff --git a/dotdrop/updater.py b/dotdrop/updater.py index c5cef2f..c377434 100644 --- a/dotdrop/updater.py +++ b/dotdrop/updater.py @@ -114,7 +114,7 @@ class Updater: ret = self._handle_file(new_path, dtpath) # clean temporary files if new_path != path and os.path.exists(new_path): - remove(new_path) + remove(new_path, logger=self.log) return ret def _apply_trans_w(self, path, dotfile): @@ -133,7 +133,7 @@ class Updater: msg = 'transformation \"{}\" failed for {}' self.log.err(msg.format(trans.key, dotfile.key)) if os.path.exists(tmp): - remove(tmp) + remove(tmp, logger=self.log) return None return tmp @@ -273,7 +273,7 @@ class Updater: self.log.dbg('rm -r {}'.format(old)) if not self._confirm_rm_r(old): continue - remove(old) + remove(old, logger=self.log) self.log.sub('\"{}\" dir removed'.format(old)) # handle files diff @@ -326,7 +326,7 @@ class Updater: continue if self.debug: self.log.dbg('rm {}'.format(new)) - remove(new) + remove(new, logger=self.log) self.log.sub('\"{}\" removed'.format(new)) # compare rights diff --git a/dotdrop/utils.py b/dotdrop/utils.py index 61f3d44..6048952 100644 --- a/dotdrop/utils.py +++ b/dotdrop/utils.py @@ -103,28 +103,42 @@ def get_unique_tmp_name(): return os.path.join(tempfile.gettempdir(), unique) -def remove(path, quiet=False): - """remove a file/directory/symlink""" +def remove(path, logger=None): + """ + remove a file/directory/symlink + if logger is defined, OSError are catched + and printed to logger.warn instead of being forwarded + as OSError + """ if not path: return if not os.path.lexists(path): - if quiet: + err = 'File not found: {}'.format(path) + if logger: + logger.warn(err) return - raise OSError("File not found: {}".format(path)) + raise OSError(err) if os.path.normpath(os.path.expanduser(path)) in NOREMOVE: - if quiet: - return err = 'Dotdrop refuses to remove {}'.format(path) + if logger: + logger.warn(err) + return LOG.err(err) raise OSError(err) - if os.path.islink(path) or os.path.isfile(path): - os.unlink(path) - elif os.path.isdir(path): - rmtree(path) - else: - if quiet: + try: + if os.path.islink(path) or os.path.isfile(path): + os.unlink(path) + elif os.path.isdir(path): + rmtree(path) + else: + err = 'Unsupported file type for deletion: {}'.format(path) + raise OSError(err) + except Exception as e: + err = str(e) + if logger: + logger.warn(err) return - raise OSError("Unsupported file type for deletion: {}".format(path)) + raise OSError(err) def samefile(path1, path2):