| 
									
										
										
										
											2000-02-04 15:39:30 +00:00
										 |  |  | """Read and cache directory listings.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The listdir() routine returns a sorted list of the files in a directory, | 
					
						
							|  |  |  | using a cache to avoid reading the directory more often than necessary. | 
					
						
							|  |  |  | The annotate() routine appends slashes to directories."""
 | 
					
						
							| 
									
										
										
										
											1990-10-13 19:23:40 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1992-03-31 18:55:40 +00:00
										 |  |  | import os | 
					
						
							| 
									
										
										
										
											1990-10-13 19:23:40 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | cache = {} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-02-02 15:10:15 +00:00
										 |  |  | def listdir(path): | 
					
						
							|  |  |  |     """List directory contents, using cache.""" | 
					
						
							|  |  |  |     try: | 
					
						
							|  |  |  |         cached_mtime, list = cache[path] | 
					
						
							|  |  |  |         del cache[path] | 
					
						
							|  |  |  |     except KeyError: | 
					
						
							|  |  |  |         cached_mtime, list = -1, [] | 
					
						
							|  |  |  |     try: | 
					
						
							|  |  |  |         mtime = os.stat(path)[8] | 
					
						
							|  |  |  |     except os.error: | 
					
						
							|  |  |  |         return [] | 
					
						
							|  |  |  |     if mtime <> cached_mtime: | 
					
						
							|  |  |  |         try: | 
					
						
							|  |  |  |             list = os.listdir(path) | 
					
						
							|  |  |  |         except os.error: | 
					
						
							|  |  |  |             return [] | 
					
						
							|  |  |  |         list.sort() | 
					
						
							|  |  |  |     cache[path] = mtime, list | 
					
						
							|  |  |  |     return list | 
					
						
							| 
									
										
										
										
											1990-10-13 19:23:40 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | opendir = listdir # XXX backward compatibility | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-02-02 15:10:15 +00:00
										 |  |  | def annotate(head, list): | 
					
						
							|  |  |  |     """Add '/' suffixes to directories.""" | 
					
						
							|  |  |  |     for i in range(len(list)): | 
					
						
							|  |  |  |         if os.path.isdir(os.path.join(head, list[i])): | 
					
						
							|  |  |  |             list[i] = list[i] + '/' |