]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Search through the module search path.
authorGuido van Rossum <guido@python.org>
Fri, 27 Mar 1992 15:12:43 +0000 (15:12 +0000)
committerGuido van Rossum <guido@python.org>
Fri, 27 Mar 1992 15:12:43 +0000 (15:12 +0000)
Add a warning to the top that this is the case.

Lib/linecache.py

index 4355f197582ada7a2eb04a140f98b551d52897b9..b981869859190ae67ee0d51993fd65b5d2775cba 100644 (file)
@@ -1,5 +1,9 @@
 # Cache lines from files.
+# This is intended to read lines from modules imported -- hence if a filename
+# is not found, it will look down the module search path for a file by
+# that name.
 
+import sys
 import os
 from stat import *
 
@@ -34,12 +38,13 @@ def getlines(filename):
 
 
 # Discard cache entries that are out of date.
-# (This is not checked upon each call
+# (This is not checked upon each call!)
 
 def checkcache():
        for filename in cache.keys():
-               size, mtime, lines = cache[filename]
-               try:    stat = os.stat(filename)
+               size, mtime, lines, fullname = cache[filename]
+               try:
+                       stat = os.stat(fullname)
                except os.error:
                        del cache[filename]
                        continue
@@ -52,20 +57,34 @@ def checkcache():
 # and return an empty list.
 
 def updatecache(filename):
-       try:    del cache[filename]
-       except KeyError: pass
-       try:    stat = os.stat(filename)
+       if cache.has_key(filename):
+               del cache[filename]
+       if filename[0] + filename[-1] == '<>':
+               return []
+       fullname = filename
+       try:
+               stat = os.stat(fullname)
        except os.error, msg:
-               if filename[0] + filename[-1] <> '<>':
+               # Try looking through the module search path
+               basename = os.path.split(filename)[1]
+               for dirname in sys.path:
+                       fullname = os.path.join(dirname, basename)
+                       try:
+                               stat = os.stat(fullname)
+                               break
+                       except os.error:
+                               pass
+               else:
+                       # No luck
                        print '*** Cannot stat', filename, ':', msg
-               return []
+                       return []
        try:
-               fp = open(filename, 'r')
+               fp = open(fullname, 'r')
                lines = fp.readlines()
                fp.close()
        except IOError, msg:
-               print '*** Cannot open', filename, ':', msg
+               print '*** Cannot open', fullname, ':', msg
                return []
        size, mtime = stat[ST_SIZE], stat[ST_MTIME]
-       cache[filename] = size, mtime, lines
+       cache[filename] = size, mtime, lines, fullname
        return lines