diff options
author | Anish Athalye <me@anishathalye.com> | 2016-11-23 14:13:00 -0500 |
---|---|---|
committer | Anish Athalye <me@anishathalye.com> | 2016-11-23 14:13:00 -0500 |
commit | 847cb101d486319da882f958b1cb58b515cc6db2 (patch) | |
tree | c42dd92dab7dc01c74c97f80a42ad2c8e128378d | |
parent | 4468fff67a9e9d9f611d5dade4a9486e75dafa1c (diff) | |
parent | d2e20c77db3811d8d0ef640a743f8dcc85075fdc (diff) |
Merge branch 'casey/empty-source'
-rw-r--r-- | README.md | 43 | ||||
-rw-r--r-- | plugins/link.py | 14 | ||||
-rw-r--r-- | test/tests/link-default-source.bash | 26 |
3 files changed, 81 insertions, 2 deletions
@@ -192,6 +192,49 @@ symbolic link should have a relative path. path: zshrc ``` +If the source location is omitted or set to `null`, Dotbot will use the +basename of the destination, with a leading `.` stripped if present. This makes +the following three config files equivalent: + +```yaml +- link: + ~/bin/ack: ack + ~/.vim: vim + ~/.vimrc: + relink: true + path: vimrc + ~/.zshrc: + force: true + path: zshrc +``` + +```yaml +- link: + ~/bin/ack: + ~/.vim: + ~/.vimrc: + relink: true + ~/.zshrc: + force: true +``` + +```json +[ + { + "link": { + "~/bin/ack": null, + "~/.vim": null, + "~/.vimrc": { + "relink": true + }, + "~/.zshrc": { + "force": true + } + } + } +] +``` + ### Shell Shell commands specify shell commands to be run. Shell commands are run in the diff --git a/plugins/link.py b/plugins/link.py index 3c7b8d4..4b50320 100644 --- a/plugins/link.py +++ b/plugins/link.py @@ -33,9 +33,9 @@ class Link(dotbot.Plugin): force = source.get('force', force) relink = source.get('relink', relink) create = source.get('create', create) - path = source['path'] + path = self._default_source(destination, source.get('path')) else: - path = source + path = self._default_source(destination, source) path = os.path.expandvars(os.path.expanduser(path)) if not self._exists(os.path.join(self._context.base_directory(), path)): success = False @@ -53,6 +53,16 @@ class Link(dotbot.Plugin): self._log.error('Some links were not successfully set up') return success + def _default_source(self, destination, source): + if source is None: + basename = os.path.basename(destination) + if basename.startswith('.'): + return basename[1:] + else: + return basename + else: + return source + def _is_link(self, path): ''' Returns true if the path is a symbolic link. diff --git a/test/tests/link-default-source.bash b/test/tests/link-default-source.bash new file mode 100644 index 0000000..60527d9 --- /dev/null +++ b/test/tests/link-default-source.bash @@ -0,0 +1,26 @@ +test_description='link uses destination if source is null' +. '../test-lib.bash' + +test_expect_success 'setup' ' +echo "apple" > ${DOTFILES}/f && +echo "grape" > ${DOTFILES}/fd +' + +test_expect_success 'run' ' +run_dotbot <<EOF +- link: + ~/f: + ~/.f: + ~/fd: + force: false + ~/.fd: + force: false +EOF +' + +test_expect_success 'test' ' +grep "apple" ~/f && +grep "apple" ~/.f && +grep "grape" ~/fd && +grep "grape" ~/.fd +' |