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

adding ability to compare transformed files

This commit is contained in:
deadc0de6
2018-06-13 15:20:38 +02:00
parent 81d6cebbb6
commit 1f28c789f9
2 changed files with 43 additions and 23 deletions

View File

@@ -103,20 +103,8 @@ def install(opts, conf):
src = dotfile.src
tmp = None
if dotfile.trans:
tmp = '{}.{}'.format(src, TRANS_SUFFIX)
err = False
for trans in dotfile.trans:
LOG.dbg('executing transformation {}'.format(trans))
s = os.path.join(opts['dotpath'], src)
temp = os.path.join(opts['dotpath'], tmp)
if not trans.transform(s, temp):
msg = 'transformation \"{}\" failed for {}'
LOG.err(msg.format(trans.key, dotfile.key))
err = True
break
if err:
if tmp and os.path.exists(tmp):
remove(tmp)
tmp = apply_trans(opts, dotfile)
if not tmp:
continue
src = tmp
r = inst.install(t, opts['profile'], src, dotfile.dst)
@@ -139,6 +127,28 @@ def install(opts, conf):
return True
def apply_trans(opts, dotfile):
"""apply the transformation to the dotfile
return None if fails and new source if succeed"""
src = dotfile.src
new_src = '{}.{}'.format(src, TRANS_SUFFIX)
err = False
for trans in dotfile.trans:
LOG.dbg('executing transformation {}'.format(trans))
s = os.path.join(opts['dotpath'], src)
temp = os.path.join(opts['dotpath'], new_src)
if not trans.transform(s, temp):
msg = 'transformation \"{}\" failed for {}'
LOG.err(msg.format(trans.key, dotfile.key))
err = True
break
if err:
if new_src and os.path.exists(new_src):
remove(new_src)
return None
return new_src
def compare(opts, conf, tmp, focus=None):
"""compare dotfiles and return True if all identical"""
dotfiles = conf.get_dotfiles(opts['profile'])
@@ -169,13 +179,20 @@ def compare(opts, conf, tmp, focus=None):
for dotfile in selected:
LOG.dbg('comparing {}'.format(dotfile))
src = dotfile.src
tmpsrc = None
if dotfile.trans:
msg = 'ignore {} as it uses transformation(s)'
LOG.log(msg.format(dotfile.key))
continue
tmpsrc = apply_trans(opts, dotfile)
if not tmpsrc:
continue
src = tmpsrc
# create a fake dotfile which is the result of the transformation
same, diff = inst.compare(t, tmp, opts['profile'],
dotfile.src, dotfile.dst,
opts=opts['dopts'])
src, dotfile.dst, opts=opts['dopts'])
if tmpsrc:
tmpsrc = os.path.join(opts['dotpath'], tmpsrc)
if os.path.exists(tmpsrc):
remove(tmpsrc)
if same:
LOG.dbg('diffing \"{}\" VS \"{}\"'.format(dotfile.key,
dotfile.dst))

View File

@@ -183,6 +183,7 @@ class Installer:
def compare(self, templater, tmpdir, profile, src, dst, opts=''):
"""compare a temporary generated dotfile with the local one"""
# saved some flags while comparing
self.comparing = True
retval = False, ''
drysaved = self.dry
@@ -191,16 +192,17 @@ class Installer:
self.diff = False
createsaved = self.create
self.create = True
# normalize src and dst
src = os.path.expanduser(src)
dst = os.path.expanduser(dst)
self.log.dbg('comparing {} and {}'.format(src, dst))
if not os.path.exists(dst):
# destination dotfile does not exist
retval = False, '\"{}\" does not exist on local\n'.format(dst)
else:
ret, tmpdst = self._install_to_temp(templater,
profile,
src, dst,
tmpdir)
# install the dotfile to a temp directory for comparing
ret, tmpdst = self._install_to_temp(templater, profile,
src, dst, tmpdir)
if ret:
self.log.dbg('diffing {} and {}'.format(tmpdst, dst))
diff = utils.diff(tmpdst, dst, raw=False, opts=opts)
@@ -208,6 +210,7 @@ class Installer:
retval = True, ''
else:
retval = False, diff
# reset flags
self.dry = drysaved
self.diff = diffsaved
self.comparing = False