summaryrefslogtreecommitdiff
path: root/dotbot/executor/cleaner.py
diff options
context:
space:
mode:
Diffstat (limited to 'dotbot/executor/cleaner.py')
-rw-r--r--dotbot/executor/cleaner.py52
1 files changed, 0 insertions, 52 deletions
diff --git a/dotbot/executor/cleaner.py b/dotbot/executor/cleaner.py
deleted file mode 100644
index 504c0de..0000000
--- a/dotbot/executor/cleaner.py
+++ /dev/null
@@ -1,52 +0,0 @@
-import os
-from . import Executor
-
-class Cleaner(Executor):
- '''
- Cleans broken symbolic links.
- '''
-
- _directive = 'clean'
-
- def can_handle(self, directive):
- return directive == self._directive
-
- def handle(self, directive, data):
- if directive != self._directive:
- raise ValueError('Cleaner cannot handle directive %s' % directive)
- return self._process_clean(data)
-
- def _process_clean(self, targets):
- success = True
- for target in targets:
- success &= self._clean(target)
- if success:
- self._log.info('All targets have been cleaned')
- else:
- self._log.error('Some targets were not successfully cleaned')
- return success
-
- def _clean(self, target):
- '''
- Cleans all the broken symbolic links in target that point to
- a subdirectory of the base directory.
- '''
- if not os.path.isdir(os.path.expanduser(target)):
- self._log.debug('Ignoring nonexistent directory %s' % target)
- return True
- for item in os.listdir(os.path.expanduser(target)):
- path = os.path.join(os.path.expanduser(target), item)
- if not os.path.exists(path) and os.path.islink(path):
- if self._in_directory(path, self._base_directory):
- self._log.lowinfo('Removing invalid link %s -> %s' %
- (path, os.path.join(os.path.dirname(path), os.readlink(path))))
- os.remove(path)
- return True
-
- def _in_directory(self, path, directory):
- '''
- Returns true if the path is in the directory.
- '''
- directory = os.path.join(os.path.realpath(directory), '')
- path = os.path.realpath(path)
- return os.path.commonprefix([path, directory]) == directory