diff options
author | Benjamin Peterson <benjamin@python.org> | 2010-05-21 21:45:06 (GMT) |
---|---|---|
committer | Benjamin Peterson <benjamin@python.org> | 2010-05-21 21:45:06 (GMT) |
commit | aada7b8f7844215e56347928a55ec8f09415bc9c (patch) | |
tree | 70ac3373a646a4e1b54b7ee270fa11551c21477c /Lib/linecache.py | |
parent | d25a5da9f24e63a640f7576d03a2fa1ced4ad01c (diff) | |
download | cpython-aada7b8f7844215e56347928a55ec8f09415bc9c.zip cpython-aada7b8f7844215e56347928a55ec8f09415bc9c.tar.gz cpython-aada7b8f7844215e56347928a55ec8f09415bc9c.tar.bz2 |
Merged revisions 81428-81429,81432-81433,81437 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r81428 | benjamin.peterson | 2010-05-21 16:16:12 -0500 (Fri, 21 May 2010) | 1 line
use addCleanup
........
r81429 | benjamin.peterson | 2010-05-21 16:17:22 -0500 (Fri, 21 May 2010) | 1 line
fix name
........
r81432 | benjamin.peterson | 2010-05-21 16:31:24 -0500 (Fri, 21 May 2010) | 1 line
ensure the last line has a trailing newline #8782
........
r81433 | benjamin.peterson | 2010-05-21 16:32:49 -0500 (Fri, 21 May 2010) | 1 line
remove debugging rubish
........
r81437 | benjamin.peterson | 2010-05-21 16:35:44 -0500 (Fri, 21 May 2010) | 1 line
simplify and modernize updatecache()
........
Diffstat (limited to 'Lib/linecache.py')
-rw-r--r-- | Lib/linecache.py | 29 |
1 files changed, 16 insertions, 13 deletions
diff --git a/Lib/linecache.py b/Lib/linecache.py index 27883fde..ef2adf5 100644 --- a/Lib/linecache.py +++ b/Lib/linecache.py @@ -73,13 +73,13 @@ def updatecache(filename, module_globals=None): if filename in cache: del cache[filename] - if not filename or filename[0] + filename[-1] == '<>': + if not filename or (filename.startswith('<') and filename.endswith('>')): return [] fullname = filename try: stat = os.stat(fullname) - except os.error as msg: + except OSError: basename = filename # Try for a __loader__, if available @@ -114,20 +114,23 @@ def updatecache(filename, module_globals=None): fullname = os.path.join(dirname, basename) except (TypeError, AttributeError): # Not sufficiently string-like to do anything useful with. + continue + try: + stat = os.stat(fullname) + break + except os.error: pass - else: - try: - stat = os.stat(fullname) - break - except os.error: - pass else: - # No luck return [] - with open(fullname, 'rb') as fp: - coding, line = tokenize.detect_encoding(fp.readline) - with open(fullname, 'r', encoding=coding) as fp: - lines = fp.readlines() + try: + with open(fullname, 'rb') as fp: + coding, line = tokenize.detect_encoding(fp.readline) + with open(fullname, 'r', encoding=coding) as fp: + lines = fp.readlines() + except IOError: + pass + if lines and not lines[-1].endswith('\n'): + lines[-1] += '\n' size, mtime = stat.st_size, stat.st_mtime cache[filename] = size, mtime, lines, fullname return lines |