diff --git a/src/borg/helpers.py b/src/borg/helpers.py index 32a8576f3..d5a803db5 100644 --- a/src/borg/helpers.py +++ b/src/borg/helpers.py @@ -1967,72 +1967,9 @@ def consume(iterator, n=None): # advance to the empty slice starting at position n next(islice(iterator, n, n), None) -# GenericDirEntry, scandir_generic (c) 2012 Ben Hoyt -# from the python-scandir package (3-clause BSD license, just like us, so no troubles here) -# note: simplified version - - -class GenericDirEntry: - __slots__ = ('name', '_scandir_path', '_path') - - def __init__(self, scandir_path, name): - self._scandir_path = scandir_path - self.name = name - self._path = None - - @property - def path(self): - if self._path is None: - self._path = os.path.join(self._scandir_path, self.name) - return self._path - - def stat(self, follow_symlinks=True): - assert not follow_symlinks - return os.stat(self.path, follow_symlinks=follow_symlinks) - - def _check_type(self, type): - st = self.stat(False) - return stat.S_IFMT(st.st_mode) == type - - def is_dir(self, follow_symlinks=True): - assert not follow_symlinks - return self._check_type(stat.S_IFDIR) - - def is_file(self, follow_symlinks=True): - assert not follow_symlinks - return self._check_type(stat.S_IFREG) - - def is_symlink(self): - return self._check_type(stat.S_IFLNK) - - def inode(self): - st = self.stat(False) - return st.st_ino - - def __repr__(self): - return '<{0}: {1!r}>'.format(self.__class__.__name__, self.path) - - -def scandir_generic(path='.'): - """Like os.listdir(), but yield DirEntry objects instead of returning a list of names.""" - for name in sorted(os.listdir(path)): - yield GenericDirEntry(path, name) - - -try: - from os import scandir -except ImportError: - # TODO: we removed official support for Python 3.4, so we could drop this. - try: - # Try python-scandir on Python 3.4 - from scandir import scandir - except ImportError: - # If python-scandir is not installed, then use a version that is just as slow as listdir. - scandir = scandir_generic - def scandir_inorder(path='.'): - return sorted(scandir(path), key=lambda dirent: dirent.inode()) + return sorted(os.scandir(path), key=lambda dirent: dirent.inode()) def clean_lines(lines, lstrip=None, rstrip=None, remove_empty=True, remove_comments=True):