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

refactoring

This commit is contained in:
deadc0de6
2018-10-08 18:13:13 +02:00
parent c0cb08c226
commit f6db3d3866
5 changed files with 86 additions and 78 deletions

View File

@@ -77,7 +77,7 @@ Options:
###########################################################
def install(opts, conf, temporary=False, keys=[]):
def cmd_install(opts, conf, temporary=False, keys=[]):
"""install dotfiles for this profile"""
dotfiles = conf.get_dotfiles(opts['profile'])
if keys:
@@ -139,45 +139,7 @@ def install(opts, conf, temporary=False, keys=[]):
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:
if opts['debug']:
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 _select(selections, dotfiles):
selected = []
for selection in selections:
df = next(
(x for x in dotfiles
if os.path.expanduser(x.dst) == os.path.expanduser(selection)),
None
)
if df:
selected.append(df)
else:
LOG.err('no dotfile matches \"{}\"'.format(selection))
return selected
def compare(opts, conf, tmp, focus=[], ignore=[]):
def cmd_compare(opts, conf, tmp, focus=[], ignore=[]):
"""compare dotfiles and return True if all identical"""
dotfiles = conf.get_dotfiles(opts['profile'])
if dotfiles == []:
@@ -241,7 +203,7 @@ def compare(opts, conf, tmp, focus=[], ignore=[]):
return same
def update(opts, conf, paths):
def cmd_update(opts, conf, paths):
"""update the dotfile(s) from path(s)"""
updater = Updater(conf, opts['dotpath'], opts['dry'],
opts['safe'], opts['debug'])
@@ -249,7 +211,7 @@ def update(opts, conf, paths):
updater.update(path, opts['profile'])
def importer(opts, conf, paths):
def cmd_importer(opts, conf, paths):
"""import dotfile(s) from paths"""
home = os.path.expanduser(TILD)
cnt = 0
@@ -309,7 +271,7 @@ def importer(opts, conf, paths):
LOG.log('\n{} file(s) imported.'.format(cnt))
def list_profiles(conf):
def cmd_list_profiles(conf):
"""list all profiles"""
LOG.log('Available profile(s):')
for p in conf.get_profiles():
@@ -317,7 +279,7 @@ def list_profiles(conf):
LOG.log('')
def list_files(opts, conf, templateonly=False):
def cmd_list_files(opts, conf, templateonly=False):
"""list all dotfiles for a specific profile"""
if not opts['profile'] in conf.get_profiles():
LOG.warn('unknown profile \"{}\"'.format(opts['profile']))
@@ -336,13 +298,60 @@ def list_files(opts, conf, templateonly=False):
LOG.sub('{}'.format(dotfile.dst))
LOG.log('')
###########################################################
# helpers
###########################################################
def header():
def _header():
"""print the header"""
LOG.log(BANNER)
LOG.log('')
def _select(selections, dotfiles):
selected = []
for selection in selections:
df = next(
(x for x in dotfiles
if os.path.expanduser(x.dst) == os.path.expanduser(selection)),
None
)
if df:
selected.append(df)
else:
LOG.err('no dotfile matches \"{}\"'.format(selection))
return selected
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:
if opts['debug']:
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
###########################################################
# main
###########################################################
def main():
"""entry point"""
ret = True
@@ -371,40 +380,39 @@ def main():
if ENV_NOBANNER not in os.environ \
and opts['banner'] \
and not args['--no-banner']:
header()
_header()
try:
if args['list']:
# list existing profiles
list_profiles(conf)
cmd_list_profiles(conf)
elif args['listfiles']:
# list files for selected profile
list_files(opts, conf, templateonly=args['--template'])
cmd_list_files(opts, conf, templateonly=args['--template'])
elif args['install']:
# install the dotfiles stored in dotdrop
keys = args['<key>']
ret = install(opts, conf, temporary=args['--temp'],
keys=keys)
ret = cmd_install(opts, conf, temporary=args['--temp'],
keys=args['<key>'])
elif args['compare']:
# compare local dotfiles with dotfiles stored in dotdrop
tmp = get_tmpdir()
opts['dopts'] = args['--dopts']
ret = compare(opts, conf, tmp, focus=args['--file'],
ignore=args['--ignore'])
ret = cmd_compare(opts, conf, tmp, focus=args['--file'],
ignore=args['--ignore'])
# clean tmp directory
remove(tmp)
elif args['import']:
# import dotfile(s)
importer(opts, conf, args['<paths>'])
cmd_importer(opts, conf, args['<paths>'])
elif args['update']:
# update a dotfile
update(opts, conf, args['<paths>'])
cmd_update(opts, conf, args['<paths>'])
except KeyboardInterrupt:
LOG.err('interrupted')

View File

@@ -10,8 +10,8 @@ import os
import yaml
from dotdrop.config import Cfg
from dotdrop.dotdrop import importer
from dotdrop.dotdrop import compare
from dotdrop.dotdrop import cmd_importer
from dotdrop.dotdrop import cmd_compare
from dotdrop.dotfile import Dotfile
from dotdrop.installer import Installer
from dotdrop.comparator import Comparator
@@ -103,7 +103,7 @@ class TestCompare(unittest.TestCase):
dfiles = [d1, d2, d3, d4, d5]
# import the files
importer(opts, conf, dfiles)
cmd_importer(opts, conf, dfiles)
conf, opts = load_config(confpath, profile)
# compare the files
@@ -138,10 +138,10 @@ class TestCompare(unittest.TestCase):
self.assertTrue(results == expected)
# test compare from dotdrop
self.assertFalse(compare(opts, conf, tmp))
self.assertFalse(cmd_compare(opts, conf, tmp))
# test focus
self.assertFalse(compare(opts, conf, tmp, focus=d4))
self.assertFalse(compare(opts, conf, tmp, focus='/tmp/fake'))
self.assertFalse(cmd_compare(opts, conf, tmp, focus=d4))
self.assertFalse(cmd_compare(opts, conf, tmp, focus='/tmp/fake'))
def main():

View File

@@ -9,11 +9,11 @@ import unittest
import os
import yaml
from dotdrop.dotdrop import importer
from dotdrop.dotdrop import list_profiles
from dotdrop.dotdrop import list_files
from dotdrop.dotdrop import header
from dotdrop.dotdrop import update
from dotdrop.dotdrop import cmd_importer
from dotdrop.dotdrop import cmd_list_profiles
from dotdrop.dotdrop import cmd_list_files
from dotdrop.dotdrop import _header
from dotdrop.dotdrop import cmd_update
from dotdrop.config import Cfg
from tests.helpers import *
@@ -107,11 +107,11 @@ class TestImport(unittest.TestCase):
# import the dotfiles
dfiles = [dotfile1, dotfile2, dotfile3, dotfile4, dotfile5]
importer(opts, conf, dfiles)
cmd_importer(opts, conf, dfiles)
# import symlink
opts[Cfg.key_dotfiles_link] = True
sfiles = [dotfile6, dotfile7]
importer(opts, conf, sfiles)
cmd_importer(opts, conf, sfiles)
opts[Cfg.key_dotfiles_link] = False
# reload the config
@@ -193,15 +193,15 @@ class TestImport(unittest.TestCase):
self.assertTrue(os.path.islink(dotfile7))
self.assertTrue(os.path.realpath(dotfile7) == indt7)
list_profiles(conf)
list_files(opts, conf)
header()
cmd_list_profiles(conf)
cmd_list_files(opts, conf)
_header()
# fake test update
editcontent = 'edited'
edit_content(dotfile1, editcontent)
opts['safe'] = False
update(opts, conf, [dotfile1])
cmd_update(opts, conf, [dotfile1])
c2 = open(indt1, 'r').read()
self.assertTrue(editcontent == c2)

View File

@@ -9,9 +9,9 @@ import filecmp
from tests.helpers import *
from dotdrop.dotfile import Dotfile
from dotdrop.dotdrop import install
from dotdrop.installer import Installer
from dotdrop.action import Action
from dotdrop.dotdrop import cmd_install
class TestInstall(unittest.TestCase):
@@ -176,7 +176,7 @@ exec bspwm
opts['debug'] = True
opts['showdiff'] = True
opts['variables'] = {}
install(opts, conf)
cmd_install(opts, conf)
# now compare the generated files
self.assertTrue(os.path.exists(dst1))

View File

@@ -10,8 +10,8 @@ import os
import yaml
from dotdrop.config import Cfg
from dotdrop.dotdrop import importer
from dotdrop.dotdrop import update
from dotdrop.dotdrop import cmd_update
from dotdrop.dotdrop import cmd_importer
from dotdrop.dotfile import Dotfile
from tests.helpers import *
@@ -68,7 +68,7 @@ class TestUpdate(unittest.TestCase):
dfiles = [d1, dir1]
# import the files
importer(opts, conf, dfiles)
cmd_importer(opts, conf, dfiles)
conf, opts = load_config(confpath, profile)
# edit the files
@@ -86,7 +86,7 @@ class TestUpdate(unittest.TestCase):
# update it
opts['safe'] = False
opts['debug'] = True
update(opts, conf, [d1, dir1])
cmd_update(opts, conf, [d1, dir1])
# test content
newcontent = open(d1, 'r').read()