mirror of
1
0
Fork 0

Merge branch 'casey/empty-source'

This commit is contained in:
Anish Athalye 2016-11-23 14:13:00 -05:00
commit 847cb101d4
3 changed files with 81 additions and 2 deletions

View File

@ -192,6 +192,49 @@ symbolic link should have a relative path.
path: zshrc 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
Shell commands specify shell commands to be run. Shell commands are run in the Shell commands specify shell commands to be run. Shell commands are run in the

View File

@ -33,9 +33,9 @@ class Link(dotbot.Plugin):
force = source.get('force', force) force = source.get('force', force)
relink = source.get('relink', relink) relink = source.get('relink', relink)
create = source.get('create', create) create = source.get('create', create)
path = source['path'] path = self._default_source(destination, source.get('path'))
else: else:
path = source path = self._default_source(destination, source)
path = os.path.expandvars(os.path.expanduser(path)) path = os.path.expandvars(os.path.expanduser(path))
if not self._exists(os.path.join(self._context.base_directory(), path)): if not self._exists(os.path.join(self._context.base_directory(), path)):
success = False success = False
@ -53,6 +53,16 @@ class Link(dotbot.Plugin):
self._log.error('Some links were not successfully set up') self._log.error('Some links were not successfully set up')
return success 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): def _is_link(self, path):
''' '''
Returns true if the path is a symbolic link. Returns true if the path is a symbolic link.

View File

@ -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
'