|
|
|
@ -2,6 +2,7 @@ import os |
|
|
|
|
import glob |
|
|
|
|
import shutil |
|
|
|
|
import dotbot |
|
|
|
|
import subprocess |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Link(dotbot.Plugin): |
|
|
|
@ -31,6 +32,10 @@ class Link(dotbot.Plugin): |
|
|
|
|
use_glob = defaults.get('glob', False) |
|
|
|
|
if isinstance(source, dict): |
|
|
|
|
# extended config |
|
|
|
|
test = source.get('if') |
|
|
|
|
if test is not None and not self._test_success(test): |
|
|
|
|
self._log.lowinfo('Skipping %s' % destination) |
|
|
|
|
continue |
|
|
|
|
relative = source.get('relative', relative) |
|
|
|
|
force = source.get('force', force) |
|
|
|
|
relink = source.get('relink', relink) |
|
|
|
@ -90,6 +95,19 @@ class Link(dotbot.Plugin): |
|
|
|
|
self._log.error('Some links were not successfully set up') |
|
|
|
|
return success |
|
|
|
|
|
|
|
|
|
def _test_success(self, command): |
|
|
|
|
with open(os.devnull, 'w') as devnull: |
|
|
|
|
ret = subprocess.call( |
|
|
|
|
command, |
|
|
|
|
shell=True, |
|
|
|
|
stdout=devnull, |
|
|
|
|
stderr=devnull, |
|
|
|
|
executable=os.environ.get('SHELL'), |
|
|
|
|
) |
|
|
|
|
if ret != 0: |
|
|
|
|
self._log.debug('Test \'%s\' returned false' % command) |
|
|
|
|
return ret == 0 |
|
|
|
|
|
|
|
|
|
def _default_source(self, destination, source): |
|
|
|
|
if source is None: |
|
|
|
|
basename = os.path.basename(destination) |
|
|
|
|