[1.7.x] Fixed #23083 -- Fixed runserver reloading when deleting a file.
Thanks Collin Anderson for the report and hirokiky for the fix.
Backport of b8cb5ba708
from master
This commit is contained in:
parent
3268711417
commit
4f8a5bd8d0
|
@ -88,6 +88,7 @@ def gen_filenames(only_new=False):
|
||||||
"""
|
"""
|
||||||
global _cached_modules, _cached_filenames
|
global _cached_modules, _cached_filenames
|
||||||
module_values = set(sys.modules.values())
|
module_values = set(sys.modules.values())
|
||||||
|
_cached_filenames = clean_files(_cached_filenames)
|
||||||
if _cached_modules == module_values:
|
if _cached_modules == module_values:
|
||||||
# No changes in module list, short-circuit the function
|
# No changes in module list, short-circuit the function
|
||||||
if only_new:
|
if only_new:
|
||||||
|
|
|
@ -1,9 +1,12 @@
|
||||||
|
from importlib import import_module
|
||||||
import os
|
import os
|
||||||
|
import tempfile
|
||||||
|
|
||||||
from django import conf
|
from django import conf
|
||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
from django.test import TestCase, override_settings
|
from django.test import TestCase, override_settings
|
||||||
from django.utils.autoreload import gen_filenames
|
from django.utils.autoreload import gen_filenames
|
||||||
|
from django.utils._os import upath
|
||||||
|
|
||||||
LOCALE_PATH = os.path.join(os.path.dirname(__file__), 'locale')
|
LOCALE_PATH = os.path.join(os.path.dirname(__file__), 'locale')
|
||||||
|
|
||||||
|
@ -82,3 +85,13 @@ class TestFilenameGenerator(TestCase):
|
||||||
self.assertEqual(len(filenames2), 1)
|
self.assertEqual(len(filenames2), 1)
|
||||||
self.assertTrue(filenames2[0].endswith('fractions.py'))
|
self.assertTrue(filenames2[0].endswith('fractions.py'))
|
||||||
self.assertFalse(any(f.endswith('.pyc') for f in gen_filenames()))
|
self.assertFalse(any(f.endswith('.pyc') for f in gen_filenames()))
|
||||||
|
|
||||||
|
def test_deleted_removed(self):
|
||||||
|
_, filepath = tempfile.mkstemp(dir=os.path.dirname(upath(__file__)), suffix='.py')
|
||||||
|
try:
|
||||||
|
_, filename = os.path.split(filepath)
|
||||||
|
import_module('.%s' % filename.rstrip('.py'), package='utils_tests')
|
||||||
|
self.assertIn(filepath, gen_filenames())
|
||||||
|
finally:
|
||||||
|
os.remove(filepath)
|
||||||
|
self.assertNotIn(filepath, gen_filenames())
|
||||||
|
|
Loading…
Reference in New Issue