##// END OF EJS Templates
Take advantage of fstat calls clustering per directory if OS support it....
Take advantage of fstat calls clustering per directory if OS support it. util module implements two versions of statfiles function _statfiles calls lstat per file _statfiles_clustered takes advantage of optimizations in osutil.c, stats all files in directory at once when new directory is hit and caches the results util.statfiles dispatches to appropriate version during module loading The speedup on directory tree with 2k directories and 63k files is about factor of 1.8 (1.3s -> 0.8s for hg diff - hg startup overhead about .2s) At this point only Win32 now benefit from this patch. Rest of OSes use the non clustered implementation.

File last commit:

r7057:094af6ee default
r7118:619ebf82 default
Show More
osutil.py
40 lines | 1.1 KiB | text/x-python | PythonLexer
Benoit Boissinot
fix conflicting variables when no native osutil is available...
r7057 import os
import stat as _stat
Bryan O'Sullivan
Add osutil module, containing a listdir function....
r5396
def _mode_to_kind(mode):
Benoit Boissinot
fix conflicting variables when no native osutil is available...
r7057 if _stat.S_ISREG(mode): return _stat.S_IFREG
if _stat.S_ISDIR(mode): return _stat.S_IFDIR
if _stat.S_ISLNK(mode): return _stat.S_IFLNK
if _stat.S_ISBLK(mode): return _stat.S_IFBLK
if _stat.S_ISCHR(mode): return _stat.S_IFCHR
if _stat.S_ISFIFO(mode): return _stat.S_IFIFO
if _stat.S_ISSOCK(mode): return _stat.S_IFSOCK
Bryan O'Sullivan
Add osutil module, containing a listdir function....
r5396 return mode
Matt Mackall
listdir: add support for aborting if a certain path is found...
r7034 def listdir(path, stat=False, skip=None):
Bryan O'Sullivan
Add osutil module, containing a listdir function....
r5396 '''listdir(path, stat=False) -> list_of_tuples
Return a sorted list containing information about the entries
in the directory.
If stat is True, each element is a 3-tuple:
(name, type, stat object)
Otherwise, each element is a 2-tuple:
(name, type)
'''
result = []
prefix = path + os.sep
names = os.listdir(path)
names.sort()
for fn in names:
st = os.lstat(prefix + fn)
Benoit Boissinot
fix conflicting variables when no native osutil is available...
r7057 if fn == skip and _stat.S_ISDIR(st.st_mode):
Matt Mackall
listdir: add support for aborting if a certain path is found...
r7034 return []
Bryan O'Sullivan
Add osutil module, containing a listdir function....
r5396 if stat:
result.append((fn, _mode_to_kind(st.st_mode), st))
else:
result.append((fn, _mode_to_kind(st.st_mode)))
return result