mirror of
1
0
Fork 0

Allow empty link sources

If the source for a link is null, use the basename of the destination
with a single leading '.' removed, if present.
This commit is contained in:
Casey Rodarmor 2016-11-18 15:21:27 -08:00 committed by Anish Athalye
parent b482cbda58
commit d2e20c77db
3 changed files with 81 additions and 2 deletions

View File

@ -189,6 +189,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

@ -30,9 +30,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 create: if create:
success &= self._create(destination) success &= self._create(destination)
@ -46,6 +46,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
'