1
0
mirror of https://github.com/deadc0de6/dotdrop.git synced 2026-02-05 06:48:49 +00:00

fix bug for #182

This commit is contained in:
deadc0de6
2019-08-15 10:06:12 +02:00
parent 8413df9ae7
commit 621a4043d6
2 changed files with 18 additions and 8 deletions

View File

@@ -10,7 +10,6 @@ import errno
# local imports
from dotdrop.logger import Logger
from dotdrop.comparator import Comparator
from dotdrop.templategen import Templategen
import dotdrop.utils as utils
@@ -275,7 +274,8 @@ class Installer:
content = templater.generate(src)
templater.restore_vars(saved)
if noempty and utils.content_empty(content):
self.log.dbg('ignoring empty template: {}'.format(src))
if self.debug:
self.log.dbg('ignoring empty template: {}'.format(src))
return False, None
if content is None:
err = 'empty template {}'.format(src)
@@ -373,7 +373,7 @@ class Installer:
if self.debug:
self.log.dbg('change detected for {}'.format(dst))
if self.showdiff:
self._diff_before_write(src, dst)
self._diff_before_write(src, dst, content=content)
if not self.log.ask('Overwrite \"{}\"'.format(dst)):
self.log.warn('ignoring {}'.format(dst))
return 1, None
@@ -404,11 +404,15 @@ class Installer:
os.chmod(dst, rights)
return 0, None
def _diff_before_write(self, src, dst):
def _diff_before_write(self, src, dst, content=None):
"""diff before writing when using --showdiff - not efficient"""
# create tmp to diff for templates
comp = Comparator(debug=self.debug)
diff = comp.compare(src, dst)
tmp = None
if content:
tmp = utils.write_to_tmpfile(content)
src = tmp
diff = utils.diff(src, dst, raw=False)
utils.remove(tmp, quiet=True)
# fake the output for readability
if not diff:
return

View File

@@ -92,11 +92,15 @@ def get_unique_tmp_name():
return os.path.join(tempfile.gettempdir(), unique)
def remove(path):
def remove(path, quiet=False):
"""remove a file/directory/symlink"""
if not os.path.lexists(path):
if quiet:
return
raise OSError("File not found: {}".format(path))
if os.path.normpath(os.path.expanduser(path)) in NOREMOVE:
if quiet:
return
err = 'Dotdrop refuses to remove {}'.format(path)
LOG.err(err)
raise OSError(err)
@@ -105,6 +109,8 @@ def remove(path):
elif os.path.isdir(path):
rmtree(path)
else:
if quiet:
return
raise OSError("Unsupported file type for deletion: {}".format(path))