blob: b0a366539c7dd12f596a99044597b338896de003 [file] [log] [blame]
Guido van Rossum4acc25b2000-02-02 15:10:15 +00001"""Return a sorted list of the files in a directory, using a cache
2to avoid reading the directory more often than necessary.
3Also contains a subroutine to append slashes to directories."""
Guido van Rossumc6360141990-10-13 19:23:40 +00004
Guido van Rossumc96207a1992-03-31 18:55:40 +00005import os
Guido van Rossumc6360141990-10-13 19:23:40 +00006
7cache = {}
8
Guido van Rossum4acc25b2000-02-02 15:10:15 +00009def listdir(path):
10 """List directory contents, using cache."""
11 try:
12 cached_mtime, list = cache[path]
13 del cache[path]
14 except KeyError:
15 cached_mtime, list = -1, []
16 try:
17 mtime = os.stat(path)[8]
18 except os.error:
19 return []
20 if mtime <> cached_mtime:
21 try:
22 list = os.listdir(path)
23 except os.error:
24 return []
25 list.sort()
26 cache[path] = mtime, list
27 return list
Guido van Rossumc6360141990-10-13 19:23:40 +000028
29opendir = listdir # XXX backward compatibility
30
Guido van Rossum4acc25b2000-02-02 15:10:15 +000031def annotate(head, list):
32 """Add '/' suffixes to directories."""
33 for i in range(len(list)):
34 if os.path.isdir(os.path.join(head, list[i])):
35 list[i] = list[i] + '/'