annotate Lib/dircache.py @ 4566:6403c94de50d legacy-trunk

Added safeguard against failure in __del__.
author Guido van Rossum <guido@python.org>
date Wed, 27 Nov 1996 19:39:58 +0000
parents 2e82dd0f8a9e
children e34991022571
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5
5570dbb1ce55 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1 # Module 'dircache'
5570dbb1ce55 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
2 #
771
2e82dd0f8a9e posix -> os
Guido van Rossum <guido@python.org>
parents: 521
diff changeset
3 # Return a sorted list of the files in a directory, using a cache
5
5570dbb1ce55 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
4 # to avoid reading the directory more often than necessary.
5570dbb1ce55 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
5 # Also contains a subroutine to append slashes to directories.
5570dbb1ce55 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
6
771
2e82dd0f8a9e posix -> os
Guido van Rossum <guido@python.org>
parents: 521
diff changeset
7 import os
5
5570dbb1ce55 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
8
5570dbb1ce55 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
9 cache = {}
5570dbb1ce55 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
10
5570dbb1ce55 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
11 def listdir(path): # List directory contents, using cache
5570dbb1ce55 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
12 try:
5570dbb1ce55 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
13 cached_mtime, list = cache[path]
5570dbb1ce55 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
14 del cache[path]
521
2dcdb0023c32 Use KeyError.
Guido van Rossum <guido@python.org>
parents: 363
diff changeset
15 except KeyError:
5
5570dbb1ce55 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
16 cached_mtime, list = -1, []
5570dbb1ce55 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
17 try:
771
2e82dd0f8a9e posix -> os
Guido van Rossum <guido@python.org>
parents: 521
diff changeset
18 mtime = os.stat(path)[8]
2e82dd0f8a9e posix -> os
Guido van Rossum <guido@python.org>
parents: 521
diff changeset
19 except os.error:
5
5570dbb1ce55 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
20 return []
5570dbb1ce55 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
21 if mtime <> cached_mtime:
5570dbb1ce55 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
22 try:
771
2e82dd0f8a9e posix -> os
Guido van Rossum <guido@python.org>
parents: 521
diff changeset
23 list = os.listdir(path)
2e82dd0f8a9e posix -> os
Guido van Rossum <guido@python.org>
parents: 521
diff changeset
24 except os.error:
5
5570dbb1ce55 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
25 return []
5570dbb1ce55 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
26 list.sort()
5570dbb1ce55 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
27 cache[path] = mtime, list
5570dbb1ce55 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
28 return list
5570dbb1ce55 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
29
5570dbb1ce55 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
30 opendir = listdir # XXX backward compatibility
5570dbb1ce55 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
31
5570dbb1ce55 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
32 def annotate(head, list): # Add '/' suffixes to directories
5570dbb1ce55 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
33 for i in range(len(list)):
771
2e82dd0f8a9e posix -> os
Guido van Rossum <guido@python.org>
parents: 521
diff changeset
34 if os.path.isdir(os.path.join(head, list[i])):
5
5570dbb1ce55 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
35 list[i] = list[i] + '/'