|
|
|
@ -31,6 +31,7 @@ class Link(dotbot.Plugin): |
|
|
|
|
create = defaults.get('create', False) |
|
|
|
|
use_glob = defaults.get('glob', False) |
|
|
|
|
test = defaults.get('if', None) |
|
|
|
|
ignore_missing = defaults.get('ignore-missing', False) |
|
|
|
|
if isinstance(source, dict): |
|
|
|
|
# extended config |
|
|
|
|
test = source.get('if', test) |
|
|
|
@ -39,6 +40,7 @@ class Link(dotbot.Plugin): |
|
|
|
|
relink = source.get('relink', relink) |
|
|
|
|
create = source.get('create', create) |
|
|
|
|
use_glob = source.get('glob', use_glob) |
|
|
|
|
ignore_missing = source.get('ignore-missing', ignore_missing) |
|
|
|
|
path = self._default_source(destination, source.get('path')) |
|
|
|
|
else: |
|
|
|
|
path = self._default_source(destination, source) |
|
|
|
@ -67,7 +69,7 @@ class Link(dotbot.Plugin): |
|
|
|
|
success &= self._create(destination) |
|
|
|
|
if force or relink: |
|
|
|
|
success &= self._delete(path, destination, relative, force) |
|
|
|
|
success &= self._link(path, destination, relative) |
|
|
|
|
success &= self._link(path, destination, relative, ignore_missing) |
|
|
|
|
else: |
|
|
|
|
self._log.lowinfo("Globs from '" + path + "': " + str(glob_results)) |
|
|
|
|
glob_base = path[:glob_star_loc] |
|
|
|
@ -78,18 +80,22 @@ class Link(dotbot.Plugin): |
|
|
|
|
success &= self._create(glob_link_destination) |
|
|
|
|
if force or relink: |
|
|
|
|
success &= self._delete(glob_full_item, glob_link_destination, relative, force) |
|
|
|
|
success &= self._link(glob_full_item, glob_link_destination, relative) |
|
|
|
|
success &= self._link(glob_full_item, glob_link_destination, relative, ignore_missing) |
|
|
|
|
else: |
|
|
|
|
if create: |
|
|
|
|
success &= self._create(destination) |
|
|
|
|
if not self._exists(os.path.join(self._context.base_directory(), path)): |
|
|
|
|
if not ignore_missing and not self._exists(os.path.join(self._context.base_directory(), path)): |
|
|
|
|
# we seemingly check this twice (here and in _link) because |
|
|
|
|
# if the file doesn't exist and force is True, we don't |
|
|
|
|
# want to remove the original (this is tested by |
|
|
|
|
# link-force-leaves-when-nonexistent.bash) |
|
|
|
|
success = False |
|
|
|
|
self._log.warning('Nonexistent source %s -> %s' % |
|
|
|
|
(destination, path)) |
|
|
|
|
continue |
|
|
|
|
if force or relink: |
|
|
|
|
success &= self._delete(path, destination, relative, force) |
|
|
|
|
success &= self._link(path, destination, relative) |
|
|
|
|
success &= self._link(path, destination, relative, ignore_missing) |
|
|
|
|
if success: |
|
|
|
|
self._log.info('All links have been set up') |
|
|
|
|
else: |
|
|
|
@ -189,7 +195,7 @@ class Link(dotbot.Plugin): |
|
|
|
|
destination_dir = os.path.dirname(destination) |
|
|
|
|
return os.path.relpath(source, destination_dir) |
|
|
|
|
|
|
|
|
|
def _link(self, source, link_name, relative): |
|
|
|
|
def _link(self, source, link_name, relative, ignore_missing): |
|
|
|
|
''' |
|
|
|
|
Links link_name to source. |
|
|
|
|
|
|
|
|
@ -209,7 +215,7 @@ class Link(dotbot.Plugin): |
|
|
|
|
# we need to use absolute_source below because our cwd is the dotfiles |
|
|
|
|
# directory, and if source is relative, it will be relative to the |
|
|
|
|
# destination directory |
|
|
|
|
elif not self._exists(link_name) and self._exists(absolute_source): |
|
|
|
|
elif not self._exists(link_name) and (ignore_missing or self._exists(absolute_source)): |
|
|
|
|
try: |
|
|
|
|
os.symlink(source, destination) |
|
|
|
|
except OSError: |
|
|
|
|