summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorTian Gao <gaogaotiantian@hotmail.com>2024-10-18 00:29:11 (GMT)
committerGitHub <noreply@github.com>2024-10-18 00:29:11 (GMT)
commit77cebb1ce9baac9e01a45d34113c3bea74940d90 (patch)
treedd94509d50b0bb084b7f4d7adf8aa7e19676900e /Lib
parent7cf2dbc3cb3ef7be65a98bbfc87246d36d795c82 (diff)
downloadcpython-77cebb1ce9baac9e01a45d34113c3bea74940d90.zip
cpython-77cebb1ce9baac9e01a45d34113c3bea74940d90.tar.gz
cpython-77cebb1ce9baac9e01a45d34113c3bea74940d90.tar.bz2
gh-125600: Only show stale code warning on source code display commands (#125601)
Diffstat (limited to 'Lib')
-rw-r--r--Lib/pdb.py24
-rw-r--r--Lib/test/test_pdb.py19
2 files changed, 39 insertions, 4 deletions
diff --git a/Lib/pdb.py b/Lib/pdb.py
index 3e5e608..cd7a704 100644
--- a/Lib/pdb.py
+++ b/Lib/pdb.py
@@ -402,6 +402,8 @@ class Pdb(bdb.Bdb, cmd.Cmd):
self.curframe = self.stack[self.curindex][0]
self.set_convenience_variable(self.curframe, '_frame', self.curframe)
+ self._save_initial_file_mtime(self.curframe)
+
if self._chained_exceptions:
self.set_convenience_variable(
self.curframe,
@@ -494,9 +496,21 @@ class Pdb(bdb.Bdb, cmd.Cmd):
except KeyboardInterrupt:
self.message('--KeyboardInterrupt--')
+ def _save_initial_file_mtime(self, frame):
+ """save the mtime of the all the files in the frame stack in the file mtime table
+ if they haven't been saved yet."""
+ while frame:
+ filename = frame.f_code.co_filename
+ if filename not in self._file_mtime_table:
+ try:
+ self._file_mtime_table[filename] = os.path.getmtime(filename)
+ except Exception:
+ pass
+ frame = frame.f_back
+
def _validate_file_mtime(self):
- """Check if the source file of the current frame has been modified since
- the last time we saw it. If so, give a warning."""
+ """Check if the source file of the current frame has been modified.
+ If so, give a warning and reset the modify time to current."""
try:
filename = self.curframe.f_code.co_filename
mtime = os.path.getmtime(filename)
@@ -506,7 +520,7 @@ class Pdb(bdb.Bdb, cmd.Cmd):
mtime != self._file_mtime_table[filename]):
self.message(f"*** WARNING: file '{filename}' was edited, "
"running stale code until the program is rerun")
- self._file_mtime_table[filename] = mtime
+ self._file_mtime_table[filename] = mtime
# Called before loop, handles display expressions
# Set up convenience variable containers
@@ -836,7 +850,6 @@ class Pdb(bdb.Bdb, cmd.Cmd):
a breakpoint command list definition.
"""
if not self.commands_defining:
- self._validate_file_mtime()
if line.startswith('_pdbcmd'):
command, arg, line = self.parseline(line)
if hasattr(self, command):
@@ -980,6 +993,7 @@ class Pdb(bdb.Bdb, cmd.Cmd):
def _pdbcmd_print_frame_status(self, arg):
self.print_stack_trace(0)
+ self._validate_file_mtime()
self._show_display()
def _pdbcmd_silence_frame_status(self, arg):
@@ -1861,6 +1875,7 @@ class Pdb(bdb.Bdb, cmd.Cmd):
self.message('[EOF]')
except KeyboardInterrupt:
pass
+ self._validate_file_mtime()
do_l = do_list
def do_longlist(self, arg):
@@ -1879,6 +1894,7 @@ class Pdb(bdb.Bdb, cmd.Cmd):
self.error(err)
return
self._print_lines(lines, lineno, breaklist, self.curframe)
+ self._validate_file_mtime()
do_ll = do_longlist
def do_source(self, arg):
diff --git a/Lib/test/test_pdb.py b/Lib/test/test_pdb.py
index 8136c59..7e6f276 100644
--- a/Lib/test/test_pdb.py
+++ b/Lib/test/test_pdb.py
@@ -3711,6 +3711,25 @@ def bœr():
self.assertIn("WARNING:", stdout)
self.assertIn("was edited", stdout)
+ def test_file_modified_and_immediately_restarted(self):
+ script = """
+ print("hello")
+ """
+
+ # the time.sleep is needed for low-resolution filesystems like HFS+
+ commands = """
+ filename = $_frame.f_code.co_filename
+ f = open(filename, "w")
+ f.write("print('goodbye')")
+ import time; time.sleep(1)
+ f.close()
+ restart
+ """
+
+ stdout, stderr = self.run_pdb_script(script, commands)
+ self.assertNotIn("WARNING:", stdout)
+ self.assertNotIn("was edited", stdout)
+
def test_file_modified_after_execution_with_multiple_instances(self):
# the time.sleep is needed for low-resolution filesystems like HFS+
script = """