diff --git a/dotdrop/config.py b/dotdrop/config.py index 6abcc1e..28367d8 100644 --- a/dotdrop/config.py +++ b/dotdrop/config.py @@ -610,11 +610,6 @@ class Cfg: if self.key_imp_link not in self.lnk_settings: self.lnk_settings[self.key_imp_link] = self.default_link_imp - elif self.lnk_settings[self.key_imp_link] == self.lnk_children: - msg = '\"{}\" not supported in {}'.format(self.lnk_children, - self.key_imp_link) - self.log.err(msg) - return False else: key = self.lnk_settings[self.key_imp_link] if key != self.lnk_parent and \ diff --git a/dotdrop/options.py b/dotdrop/options.py index 409f6fe..ede4b49 100644 --- a/dotdrop/options.py +++ b/dotdrop/options.py @@ -6,6 +6,7 @@ stores all options to use across dotdrop """ import os +import sys import socket from docopt import docopt @@ -31,6 +32,11 @@ NAME = 'dotdrop' CONFIG = 'config.yaml' HOMECFG = '~/.config/{}'.format(NAME) +OPT_LINK = { + 'nolink': LinkTypes.NOLINK, + 'link': LinkTypes.PARENT, + 'link_children': LinkTypes.CHILDREN} + BANNER = """ _ _ _ __| | ___ | |_ __| |_ __ ___ _ __ / _` |/ _ \| __/ _` | '__/ _ \| '_ | @@ -42,7 +48,7 @@ USAGE = """ Usage: dotdrop install [-VbtfndD] [-c ] [-p ] [...] - dotdrop import [-Vbld] [-c ] [-p ] ... + dotdrop import [-Vbd] [-c ] [-p ] [-l ] ... dotdrop compare [-Vb] [-c ] [-p ] [-o ] [-C ...] [-i ...] dotdrop update [-VbfdkP] [-c ] [-p ] @@ -59,11 +65,11 @@ Options: -C --file= Path of dotfile to compare. -i --ignore= Pattern to ignore. -o --dopts= Diff options [default: ]. + -l --link= "link_import_default" (nolink|link|link_children). -n --nodiff Do not diff when installing. -t --temp Install to a temporary directory for review. -T --template Only template dotfiles. -D --showdiff Show a diff before overwriting. - -l --inv-link Invert "link_import_default". -P --show-patch Provide a one-liner to manually patch template. -f --force Do not warn if exists. -k --key Treat as a dotfile key. @@ -72,7 +78,6 @@ Options: -b --no-banner Do not display the banner. -v --version Show version. -h --help Show this screen. - """.format(BANNER, PROFILE) @@ -181,13 +186,12 @@ class Options(AttrMonitor): # import link default value self.import_link = self.link_import_default - if self.args['--inv-link']: - if self.import_link == LinkTypes.NOLINK: - self.import_link = LinkTypes.PARENT - elif self.import_link == LinkTypes.PARENT: - self.import_link = LinkTypes.NOLINK - elif self.import_link == LinkTypes.CHILDREN: - self.import_link = LinkTypes.NOLINK + link = self.args['--link'] + if link: + if link not in OPT_LINK.keys(): + self.log.err('bad option for --link: {}'.format(link)) + sys.exit(USAGE) + self.import_link = OPT_LINK[link] # "listfiles" specifics self.listfiles_templateonly = self.args['--template'] diff --git a/tests/helpers.py b/tests/helpers.py index 7eac3b1..091cac3 100644 --- a/tests/helpers.py +++ b/tests/helpers.py @@ -89,7 +89,7 @@ def _fake_args(): args['--force'] = False args['--nodiff'] = False args['--showdiff'] = True - args['--inv-link'] = False + args['--link'] = 'nolink' args['--template'] = False args['--temp'] = False args[''] = [] diff --git a/tests/test_config.py b/tests/test_config.py index 4b45013..62990ac 100644 --- a/tests/test_config.py +++ b/tests/test_config.py @@ -50,17 +50,22 @@ class TestConfig(unittest.TestCase): self.assertTrue(conf.dump() != '') def test_def_link(self): - self._test_link_import('nolink', LinkTypes.NOLINK, False) - self._test_link_import('link', LinkTypes.PARENT, False) - self._test_link_import('nolink', LinkTypes.PARENT, True) - self._test_link_import('link', LinkTypes.NOLINK, True) + self._test_link_import('nolink', LinkTypes.PARENT, 'link') + self._test_link_import('nolink', LinkTypes.NOLINK, 'nolink') + self._test_link_import('nolink', LinkTypes.CHILDREN, 'link_children') + self._test_link_import('link', LinkTypes.PARENT, 'link') + self._test_link_import('link', LinkTypes.NOLINK, 'nolink') + self._test_link_import('link', LinkTypes.CHILDREN, 'link_children') + self._test_link_import('link_children', LinkTypes.PARENT, 'link') + self._test_link_import('link_children', LinkTypes.NOLINK, 'nolink') + self._test_link_import('link_children', LinkTypes.CHILDREN, + 'link_children') self._test_link_import_fail('whatever') - self._test_link_import_fail('link_children') @patch('dotdrop.config.open', create=True) @patch('dotdrop.config.os.path.exists', create=True) def _test_link_import(self, cfgstring, expected, - invert, mock_exists, mock_open): + cliargs, mock_exists, mock_open): data = ''' config: backup: true @@ -83,8 +88,7 @@ profiles: args = _fake_args() args['--profile'] = 'p1' args['--cfg'] = 'mocked' - if invert: - args['--inv-link'] = True + args['--link'] = cliargs o = Options(args=args) self.assertTrue(o.import_link == expected)