summaryrefslogtreecommitdiffstats
path: root/Lib/linecache.py
diff options
context:
space:
mode:
authorBenjamin Peterson <benjamin@python.org>2010-05-21 21:45:06 (GMT)
committerBenjamin Peterson <benjamin@python.org>2010-05-21 21:45:06 (GMT)
commitaada7b8f7844215e56347928a55ec8f09415bc9c (patch)
tree70ac3373a646a4e1b54b7ee270fa11551c21477c /Lib/linecache.py
parentd25a5da9f24e63a640f7576d03a2fa1ced4ad01c (diff)
downloadcpython-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.py29
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