From 32fbccab406b680bc0a0a8d39a9b95c3a08bbc5a Mon Sep 17 00:00:00 2001 From: Tim Graham Date: Tue, 11 Sep 2018 12:51:11 -0400 Subject: [PATCH] Fixed #29749 -- Made the migrations loader ignore files starting with a tilde or underscore. Regression in 29150d5da880ac1db15e47052330790cf1b802d2. --- django/db/migrations/loader.py | 5 ++++- docs/releases/2.1.2.txt | 3 +++ tests/migrations/test_loader.py | 8 ++++++++ tests/migrations/test_migrations_private/.util.py | 0 tests/migrations/test_migrations_private/0001_initial.py | 5 +++++ tests/migrations/test_migrations_private/__init__.py | 0 tests/migrations/test_migrations_private/_util.py | 0 tests/migrations/test_migrations_private/~util.py | 0 8 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 tests/migrations/test_migrations_private/.util.py create mode 100644 tests/migrations/test_migrations_private/0001_initial.py create mode 100644 tests/migrations/test_migrations_private/__init__.py create mode 100644 tests/migrations/test_migrations_private/_util.py create mode 100644 tests/migrations/test_migrations_private/~util.py diff --git a/django/db/migrations/loader.py b/django/db/migrations/loader.py index 79de511860..dd0f37d135 100644 --- a/django/db/migrations/loader.py +++ b/django/db/migrations/loader.py @@ -97,7 +97,10 @@ class MigrationLoader: if was_loaded: reload(module) self.migrated_apps.add(app_config.label) - migration_names = {name for _, name, is_pkg in pkgutil.iter_modules(module.__path__) if not is_pkg} + migration_names = { + name for _, name, is_pkg in pkgutil.iter_modules(module.__path__) + if not is_pkg and name[0] not in '_~' + } # Load migrations for migration_name in migration_names: migration_path = '%s.%s' % (module_name, migration_name) diff --git a/docs/releases/2.1.2.txt b/docs/releases/2.1.2.txt index 17c50fffd7..753b87a7fb 100644 --- a/docs/releases/2.1.2.txt +++ b/docs/releases/2.1.2.txt @@ -11,3 +11,6 @@ Bugfixes * Fixed a regression where nonexistent joins in ``F()`` no longer raised ``FieldError`` (:ticket:`29727`). + +* Fixed a regression where files starting with a tilde or underscore weren't + ignored by the migrations loader (:ticket:`29749`). diff --git a/tests/migrations/test_loader.py b/tests/migrations/test_loader.py index 71d3c9ca36..a7666c5c2d 100644 --- a/tests/migrations/test_loader.py +++ b/tests/migrations/test_loader.py @@ -500,6 +500,14 @@ class LoaderTests(TestCase): } self.assertEqual(plan, expected_plan) + @override_settings(MIGRATION_MODULES={'migrations': 'migrations.test_migrations_private'}) + def test_ignore_files(self): + """Files prefixed with underscore, tilde, or dot aren't loaded.""" + loader = MigrationLoader(connection) + loader.load_disk() + migrations = [name for app, name in loader.disk_migrations if app == 'migrations'] + self.assertEqual(migrations, ['0001_initial']) + class PycLoaderTests(MigrationTestBase): diff --git a/tests/migrations/test_migrations_private/.util.py b/tests/migrations/test_migrations_private/.util.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/migrations/test_migrations_private/0001_initial.py b/tests/migrations/test_migrations_private/0001_initial.py new file mode 100644 index 0000000000..bd613aa95e --- /dev/null +++ b/tests/migrations/test_migrations_private/0001_initial.py @@ -0,0 +1,5 @@ +from django.db import migrations + + +class Migration(migrations.Migration): + pass diff --git a/tests/migrations/test_migrations_private/__init__.py b/tests/migrations/test_migrations_private/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/migrations/test_migrations_private/_util.py b/tests/migrations/test_migrations_private/_util.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/migrations/test_migrations_private/~util.py b/tests/migrations/test_migrations_private/~util.py new file mode 100644 index 0000000000..e69de29bb2