@@ -321,8 +321,6 @@ def walk(location, ignored=None, follow_symlinks=False):
321321 If `follow_symlinks` is True, then symlinks will not be ignored and be
322322 collected like regular files and directories
323323 """
324- # TODO: consider using the new "scandir" module for some speed-up.
325-
326324 is_ignored = ignored(location) if ignored else False
327325 if is_ignored:
328326 if TRACE:
@@ -335,13 +333,12 @@ def walk(location, ignored=None, follow_symlinks=False):
335333 elif filetype.is_dir(location, follow_symlinks=follow_symlinks):
336334 dirs = []
337335 files = []
338- # TODO: consider using scandir
339- for name in os.listdir(location):
340- loc = os.path.join(location, name)
336+ for resource in os.scandir(location):
337+ loc = os.path.join(location, resource.name)
341338 if filetype.is_special(loc) or (ignored and ignored(loc)):
342339 if (
343340 follow_symlinks
344- and filetype.is_link(loc )
341+ and resource.is_symlink( )
345342 and not filetype.is_broken_link(location)
346343 ):
347344 pass
@@ -351,10 +348,10 @@ def walk(location, ignored=None, follow_symlinks=False):
351348 logger_debug("walk: ignored:", loc, ign)
352349 continue
353350 # special files and symlinks are always ignored
354- if filetype .is_dir(loc, follow_symlinks=follow_symlinks):
355- dirs.append(name)
356- elif filetype .is_file(loc, follow_symlinks=follow_symlinks):
357- files.append(name)
351+ if resource .is_dir(follow_symlinks=follow_symlinks):
352+ dirs.append(resource. name)
353+ elif resource .is_file(follow_symlinks=follow_symlinks):
354+ files.append(resource. name)
358355 yield location, dirs, files
359356
360357 for dr in dirs:
@@ -403,7 +400,7 @@ def copytree(src, dst):
403400 if not filetype.is_readable(src):
404401 chmod(src, R, recurse=False)
405402
406- names = os.listdir (src)
403+ names = [resource.name for resource in os.scandir (src)]
407404
408405 if not os.path.exists(dst):
409406 os.makedirs(dst)
@@ -544,7 +541,7 @@ def _rm_handler(function, path, excinfo): # NOQA
544541 """
545542 if TRACE:
546543 logger_debug("_rm_handler:", "path:", path, "excinfo:", excinfo)
547- if function in (os.rmdir, os.listdir):
544+ if function in (os.rmdir, os.listdir, os.scandir ):
548545 try:
549546 chmod(path, RW, recurse=True)
550547 shutil.rmtree(path, True)
0 commit comments