mirror of
https://github.com/python/cpython.git
synced 2025-11-11 22:55:08 +00:00
Set/update self.cwd properly.
This commit is contained in:
parent
8f01b680c8
commit
8b68862680
1 changed files with 51 additions and 14 deletions
|
|
@ -37,7 +37,13 @@ class LogReader:
|
||||||
self._reader = _hotshot.logreader(logfn)
|
self._reader = _hotshot.logreader(logfn)
|
||||||
self._nextitem = self._reader.next
|
self._nextitem = self._reader.next
|
||||||
self._info = self._reader.info
|
self._info = self._reader.info
|
||||||
|
if self._info.has_key('current-directory'):
|
||||||
|
self.cwd = self._info['current-directory']
|
||||||
|
else:
|
||||||
|
self.cwd = None
|
||||||
self._stack = []
|
self._stack = []
|
||||||
|
self._append = self._stack.append
|
||||||
|
self._pop = self._stack.pop
|
||||||
|
|
||||||
def addinfo(self, key, value):
|
def addinfo(self, key, value):
|
||||||
"""This method is called for each additional ADD_INFO record.
|
"""This method is called for each additional ADD_INFO record.
|
||||||
|
|
@ -53,6 +59,28 @@ class LogReader:
|
||||||
"""
|
"""
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
def get_filename(self, fileno):
|
||||||
|
try:
|
||||||
|
return self._filemap[fileno]
|
||||||
|
except KeyError:
|
||||||
|
raise ValueError, "unknown fileno"
|
||||||
|
|
||||||
|
def get_filenames(self):
|
||||||
|
return self._filemap.values()
|
||||||
|
|
||||||
|
def get_fileno(self, filename):
|
||||||
|
filename = os.path.normcase(os.path.normpath(filename))
|
||||||
|
for fileno, name in self._filemap.items():
|
||||||
|
if name == filename:
|
||||||
|
return fileno
|
||||||
|
raise ValueError, "unknown filename"
|
||||||
|
|
||||||
|
def get_funcname(self, fileno, lineno):
|
||||||
|
try:
|
||||||
|
return self._funcmap[(fileno, lineno)]
|
||||||
|
except KeyError:
|
||||||
|
raise ValueError, "unknown function location"
|
||||||
|
|
||||||
# Iteration support:
|
# Iteration support:
|
||||||
# This adds an optional (& ignored) parameter to next() so that the
|
# This adds an optional (& ignored) parameter to next() so that the
|
||||||
# same bound method can be used as the __getitem__() method -- this
|
# same bound method can be used as the __getitem__() method -- this
|
||||||
|
|
@ -66,28 +94,37 @@ class LogReader:
|
||||||
# logreader().next() returns None at the end
|
# logreader().next() returns None at the end
|
||||||
self._reader.close()
|
self._reader.close()
|
||||||
raise StopIteration()
|
raise StopIteration()
|
||||||
|
|
||||||
|
# handle the most common cases first
|
||||||
|
|
||||||
|
if what == WHAT_ENTER:
|
||||||
|
filename, funcname = self._decode_location(fileno, lineno)
|
||||||
|
self._append((filename, funcname, lineno))
|
||||||
|
return what, (filename, lineno, funcname), tdelta
|
||||||
|
|
||||||
|
if what == WHAT_EXIT:
|
||||||
|
filename, funcname, lineno = self._pop()
|
||||||
|
return what, (filename, lineno, funcname), tdelta
|
||||||
|
|
||||||
|
if what == WHAT_LINENO:
|
||||||
|
filename, funcname, firstlineno = self._stack[-1]
|
||||||
|
return what, (filename, lineno, funcname), tdelta
|
||||||
|
|
||||||
if what == WHAT_DEFINE_FILE:
|
if what == WHAT_DEFINE_FILE:
|
||||||
self._filemap[fileno] = tdelta
|
filename = os.path.normcase(os.path.normpath(tdelta))
|
||||||
continue
|
self._filemap[fileno] = filename
|
||||||
if what == WHAT_DEFINE_FUNC:
|
elif what == WHAT_DEFINE_FUNC:
|
||||||
filename = self._filemap[fileno]
|
filename = self._filemap[fileno]
|
||||||
self._funcmap[(fileno, lineno)] = (filename, tdelta)
|
self._funcmap[(fileno, lineno)] = (filename, tdelta)
|
||||||
continue
|
elif what == WHAT_ADD_INFO:
|
||||||
if what == WHAT_ADD_INFO:
|
|
||||||
# value already loaded into self.info; call the
|
# value already loaded into self.info; call the
|
||||||
# overridable addinfo() handler so higher-level code
|
# overridable addinfo() handler so higher-level code
|
||||||
# can pick up the new value
|
# can pick up the new value
|
||||||
|
if tdelta == 'current-directory':
|
||||||
|
self.cwd = lineno
|
||||||
self.addinfo(tdelta, lineno)
|
self.addinfo(tdelta, lineno)
|
||||||
continue
|
|
||||||
if what == WHAT_ENTER:
|
|
||||||
t = self._decode_location(fileno, lineno)
|
|
||||||
filename, funcname = t
|
|
||||||
self._stack.append((filename, funcname, lineno))
|
|
||||||
elif what == WHAT_EXIT:
|
|
||||||
filename, funcname, lineno = self._stack.pop()
|
|
||||||
else:
|
else:
|
||||||
filename, funcname, firstlineno = self._stack[-1]
|
raise ValueError, "unknown event type"
|
||||||
return what, (filename, lineno, funcname), tdelta
|
|
||||||
|
|
||||||
if sys.version < "2.2":
|
if sys.version < "2.2":
|
||||||
# Don't add this for newer Python versions; we only want iteration
|
# Don't add this for newer Python versions; we only want iteration
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue