3 # Maintain a cache of file stats.
4 # There are functions to reset the cache or to selectively remove items.
10 # Keys are pathnames, values are `os.stat' outcomes.
15 # Stat a file, possibly out of the cache.
18 if cache
.has_key(path
):
20 cache
[path
] = ret
= os
.stat(path
)
24 # Reset the cache completely.
25 # Hack: to reset a global variable, we import this module.
29 # Check that we really imported the same module
30 if cache
is not statcache
.cache
:
31 raise 'sorry, statcache identity crisis'
35 # Remove a given item from the cache, if it exists.
38 if cache
.has_key(path
):
42 # Remove all pathnames with a given prefix.
44 def forget_prefix(prefix
):
46 for path
in cache
.keys():
47 if path
[:n
] == prefix
:
51 # Forget about a directory and all entries in it, but not about
52 # entries in subdirectories.
54 def forget_dir(prefix
):
55 if prefix
[-1:] == '/' and prefix
<> '/':
58 if prefix
[-1:] <> '/':
61 for path
in cache
.keys():
62 if path
[:n
] == prefix
:
64 if rest
[-1:] == '/': rest
= rest
[:-1]
69 # Remove all pathnames except with a given prefix.
70 # Normally used with prefix = '/' after a chdir().
72 def forget_except_prefix(prefix
):
74 for path
in cache
.keys():
75 if path
[:n
] <> prefix
:
79 # Check for directory.
86 return S_ISDIR(st
[ST_MODE
])