From fe163d37d555888f3f40434c5ff2bdad5c8ab509 Mon Sep 17 00:00:00 2001 From: deadc0de6 Date: Mon, 11 Feb 2019 21:10:42 +0100 Subject: [PATCH] rebase --- dotdrop/comparator.py | 13 +++++++++++++ tests/test_compare.py | 36 ++++++++++++++++++++++++++++++------ 2 files changed, 43 insertions(+), 6 deletions(-) diff --git a/dotdrop/comparator.py b/dotdrop/comparator.py index 9d20c52..5449015 100644 --- a/dotdrop/comparator.py +++ b/dotdrop/comparator.py @@ -32,11 +32,15 @@ class Comparator: self.log.dbg('comparing {} and {}'.format(left, right)) self.log.dbg('ignore pattern(s): {}'.format(ignore)) if not os.path.isdir(left): + if self.debug: + self.log.dbg('is file') return self._comp_file(left, right, ignore) return self._comp_dir(left, right, ignore) def _comp_file(self, left, right, ignore): """compare a file""" + if self.debug: + self.log.dbg('compare file {} with {}'.format(left, right)) if utils.must_ignore([left, right], ignore, debug=self.debug): if self.debug: self.log.dbg('ignoring diff {} and {}'.format(left, right)) @@ -45,6 +49,8 @@ class Comparator: def _comp_dir(self, left, right, ignore): """compare a directory""" + if self.debug: + self.log.dbg('compare directory {} with {}'.format(left, right)) if not os.path.exists(right): return '' if utils.must_ignore([left, right], ignore, debug=self.debug): @@ -61,6 +67,7 @@ class Comparator: ignore, debug=self.debug): continue ret.append('=> \"{}\" does not exist on local\n'.format(i)) + # handle files only in dotpath file for i in comp.right_only: if utils.must_ignore([os.path.join(right, i)], ignore, debug=self.debug): @@ -86,6 +93,12 @@ class Comparator: diff = self._diff(lfile, rfile, header=True) ret.append(diff) + # recursively compare subdirs + for i in comp.common_dirs: + subleft = os.path.join(left, i) + subright = os.path.join(right, i) + ret.extend(self._comp_dir(subleft, subright, ignore)) + return ''.join(ret) def _diff(self, left, right, header=False): diff --git a/tests/test_compare.py b/tests/test_compare.py index b86280d..cfed415 100644 --- a/tests/test_compare.py +++ b/tests/test_compare.py @@ -72,21 +72,33 @@ class TestCompare(unittest.TestCase): d1, c1 = create_random_file(fold_config) self.assertTrue(os.path.exists(d1)) self.addCleanup(clean, d1) + d2, c2 = create_random_file(fold_subcfg) self.assertTrue(os.path.exists(d2)) self.addCleanup(clean, d2) + d3, c3 = create_random_file(fold_tmp) self.assertTrue(os.path.exists(d3)) self.addCleanup(clean, d3) + d4, c4 = create_random_file(fold_tmp, binary=True) self.assertTrue(os.path.exists(d4)) self.addCleanup(clean, d4) + d5 = get_tempdir() self.assertTrue(os.path.exists(d5)) self.addCleanup(clean, d5) + d6, _ = create_random_file(d5) self.assertTrue(os.path.exists(d6)) + d9 = get_tempdir() + self.assertTrue(os.path.exists(d9)) + self.addCleanup(clean, d9) + d9sub = os.path.join(d9, get_string(5)) + create_dir(d9sub) + d9f1, _ = create_random_file(d9sub) + # create the config file profile = get_string(5) confpath = create_fake_config(dotfilespath, @@ -97,7 +109,7 @@ class TestCompare(unittest.TestCase): self.assertTrue(os.path.exists(confpath)) o = load_options(confpath, profile) o.longkey = True - dfiles = [d1, d2, d3, d4, d5] + dfiles = [d1, d2, d3, d4, d5, d9] # import the files o.import_path = dfiles @@ -105,33 +117,45 @@ class TestCompare(unittest.TestCase): o = load_options(confpath, profile) # compare the files - expected = {d1: True, d2: True, d3: True, d4: True, d5: True} + expected = {d1: True, d2: True, d3: True, d4: True, + d5: True, d9: True} results = self.compare(o, tmp, len(dfiles)) self.assertTrue(results == expected) # modify file edit_content(d1, get_string(20)) - expected = {d1: False, d2: True, d3: True, d4: True, d5: True} + expected = {d1: False, d2: True, d3: True, d4: True, + d5: True, d9: True} results = self.compare(o, tmp, len(dfiles)) self.assertTrue(results == expected) # modify binary file edit_content(d4, bytes(get_string(20), 'ascii'), binary=True) - expected = {d1: False, d2: True, d3: True, d4: False, d5: True} + expected = {d1: False, d2: True, d3: True, d4: False, + d5: True, d9: True} results = self.compare(o, tmp, len(dfiles)) self.assertTrue(results == expected) # add file in directory d7, _ = create_random_file(d5) self.assertTrue(os.path.exists(d7)) - expected = {d1: False, d2: True, d3: True, d4: False, d5: False} + expected = {d1: False, d2: True, d3: True, d4: False, + d5: False, d9: True} results = self.compare(o, tmp, len(dfiles)) self.assertTrue(results == expected) # modify all files edit_content(d2, get_string(20)) edit_content(d3, get_string(21)) - expected = {d1: False, d2: False, d3: False, d4: False, d5: False} + expected = {d1: False, d2: False, d3: False, d4: False, + d5: False, d9: True} + results = self.compare(o, tmp, len(dfiles)) + self.assertTrue(results == expected) + + # edit sub file + edit_content(d9f1, get_string(12)) + expected = {d1: False, d2: False, d3: False, d4: False, + d5: False, d9: False} results = self.compare(o, tmp, len(dfiles)) self.assertTrue(results == expected)