From 69cf14e302ad87ba99f59c58f2a90d9aa221883c Mon Sep 17 00:00:00 2001 From: deadc0de6 Date: Fri, 4 Sep 2020 07:10:41 +0200 Subject: [PATCH] fix compare bug --- dotdrop/cfg_aggregator.py | 5 +++-- dotdrop/dotdrop.py | 15 +++++++++++---- dotdrop/installer.py | 7 ++++--- dotdrop/templategen.py | 6 ++++-- tests/test_compare.py | 4 ++-- 5 files changed, 24 insertions(+), 13 deletions(-) diff --git a/dotdrop/cfg_aggregator.py b/dotdrop/cfg_aggregator.py index 2be9297..ecc3d9c 100644 --- a/dotdrop/cfg_aggregator.py +++ b/dotdrop/cfg_aggregator.py @@ -135,8 +135,9 @@ class CfgAggregator: objects.append(o) if not islist: objects = objects[0] - if self.debug: - self.log.dbg('patching {}.{} with {}'.format(c, keys, objects)) + # if self.debug: + # er = 'patching {}.{} with {}' + # self.log.dbg(er.format(c, keys, objects)) setattr(c, keys, objects) def del_dotfile(self, dotfile): diff --git a/dotdrop/dotdrop.py b/dotdrop/dotdrop.py index efe618d..d27a437 100644 --- a/dotdrop/dotdrop.py +++ b/dotdrop/dotdrop.py @@ -230,6 +230,7 @@ def cmd_compare(o, tmp): newvars = dotfile.get_dotfile_variables() t.add_tmp_vars(newvars=newvars) + # dotfiles does not exist / not installed if o.debug: LOG.dbg('comparing {}'.format(dotfile)) src = dotfile.src @@ -239,9 +240,9 @@ def cmd_compare(o, tmp): same = False continue + # apply transformation tmpsrc = None if dotfile.trans_r: - # apply transformation if o.debug: LOG.dbg('applying transformation before comparing') tmpsrc = apply_trans(o.dotpath, dotfile, t, debug=o.debug) @@ -261,20 +262,26 @@ def cmd_compare(o, tmp): LOG.dbg('points to itself') continue - # install dotfile to temporary dir - ret, insttmp = inst.install_to_temp(t, tmp, src, dotfile.dst) + # install dotfile to temporary dir and compare + ret, err, insttmp = inst.install_to_temp(t, tmp, src, dotfile.dst) if not ret: # failed to install to tmp + line = '=> compare {}: error' + LOG.log(line.format(dotfile.key, err)) + LOG.err(err) same = False continue ignores = list(set(o.compare_ignore + dotfile.cmpignore)) ignores = patch_ignores(ignores, dotfile.dst, debug=o.debug) diff = comp.compare(insttmp, dotfile.dst, ignore=ignores) + + # clean tmp transformed dotfile if any if tmpsrc: - # clean tmp transformed dotfile if any tmpsrc = os.path.join(o.dotpath, tmpsrc) if os.path.exists(tmpsrc): remove(tmpsrc) + + # print diff result if diff == '': if o.debug: line = '=> compare {}: diffing with \"{}\"' diff --git a/dotdrop/installer.py b/dotdrop/installer.py index 773c1c2..ef0e0a9 100644 --- a/dotdrop/installer.py +++ b/dotdrop/installer.py @@ -551,9 +551,10 @@ class Installer: src = os.path.expanduser(src) dst = os.path.expanduser(dst) if self.debug: - self.log.dbg('tmp install {} to {}'.format(src, dst)) + self.log.dbg('tmp install {} (defined dst: {})'.format(src, dst)) # install the dotfile to a temp directory for comparing - ret, tmpdst = self._install_to_temp(templater, src, dst, tmpdir) + r, tmpdst = self._install_to_temp(templater, src, dst, tmpdir) + ret, err = r if self.debug: self.log.dbg('tmp installed in {}'.format(tmpdst)) # reset flags @@ -561,4 +562,4 @@ class Installer: self.diff = diffsaved self.comparing = False self.create = createsaved - return ret, tmpdst + return ret, err, tmpdst diff --git a/dotdrop/templategen.py b/dotdrop/templategen.py index ff2f06b..feb7db0 100644 --- a/dotdrop/templategen.py +++ b/dotdrop/templategen.py @@ -90,7 +90,8 @@ class Templategen: try: return self._handle_file(src) except UndefinedError as e: - raise UndefinedException(e.message) + err = 'undefined variable: {}'.format(e.message) + raise UndefinedException(err) def generate_string(self, string): """ @@ -103,7 +104,8 @@ class Templategen: try: return self.env.from_string(string).render(self.variables) except UndefinedError as e: - raise UndefinedException(e.message) + err = 'undefined variable: {}'.format(e.message) + raise UndefinedException(err) def add_tmp_vars(self, newvars={}): """add vars to the globals, make sure to call restore_vars""" diff --git a/tests/test_compare.py b/tests/test_compare.py index 6c24db4..b436c92 100644 --- a/tests/test_compare.py +++ b/tests/test_compare.py @@ -36,8 +36,8 @@ class TestCompare(unittest.TestCase): results = {} for dotfile in dotfiles: path = os.path.expanduser(dotfile.dst) - ret, insttmp = inst.install_to_temp(t, tmp, dotfile.src, - dotfile.dst) + ret, err, insttmp = inst.install_to_temp(t, tmp, dotfile.src, + dotfile.dst) if not ret: results[path] = False continue