mirror of
https://github.com/django/django.git
synced 2025-04-01 12:06:43 +00:00
[1.10.x] Fixed #26930 -- Prevented makemigrations from accessing an empty database.
Thanks Liz Lemon for the report and investigation and Claude Paroz for the test. Backport of aad46c3e370e105f9117a337924090d05f1b001d from master
This commit is contained in:
parent
39387efbba
commit
ddcf7dbae7
@ -95,7 +95,9 @@ class Command(BaseCommand):
|
||||
|
||||
# Raise an error if any migrations are applied before their dependencies.
|
||||
for db in connections:
|
||||
loader.check_consistent_history(connections[db])
|
||||
connection = connections[db]
|
||||
if connection.settings_dict['ENGINE'] != 'django.db.backends.dummy':
|
||||
loader.check_consistent_history(connection)
|
||||
|
||||
# Before anything else, see if there's conflicting apps and drop out
|
||||
# hard if there are any and they don't want to merge
|
||||
|
@ -9,7 +9,9 @@ import sys
|
||||
|
||||
from django.apps import apps
|
||||
from django.core.management import CommandError, call_command
|
||||
from django.db import DatabaseError, connection, connections, models
|
||||
from django.db import (
|
||||
ConnectionHandler, DatabaseError, connection, connections, models,
|
||||
)
|
||||
from django.db.migrations.exceptions import InconsistentMigrationHistory
|
||||
from django.db.migrations.recorder import MigrationRecorder
|
||||
from django.test import ignore_warnings, mock, override_settings
|
||||
@ -580,6 +582,19 @@ class MakeMigrationsTests(MigrationTestBase):
|
||||
call_command('makemigrations', 'migrations', '--empty', '-n', 'a', '-v', '0')
|
||||
self.assertTrue(os.path.exists(os.path.join(migration_dir, '0002_a.py')))
|
||||
|
||||
def test_makemigrations_empty_connections(self):
|
||||
empty_connections = ConnectionHandler({'default': {}})
|
||||
with mock.patch('django.core.management.commands.makemigrations.connections', new=empty_connections):
|
||||
# with no apps
|
||||
out = six.StringIO()
|
||||
call_command('makemigrations', stdout=out)
|
||||
self.assertIn('No changes detected', out.getvalue())
|
||||
# with an app
|
||||
with self.temporary_migration_module() as migration_dir:
|
||||
call_command('makemigrations', 'migrations', verbosity=0)
|
||||
init_file = os.path.join(migration_dir, '__init__.py')
|
||||
self.assertTrue(os.path.exists(init_file))
|
||||
|
||||
def test_failing_migration(self):
|
||||
# If a migration fails to serialize, it shouldn't generate an empty file. #21280
|
||||
apps.register_model('migrations', UnserializableModel)
|
||||
|
Loading…
x
Reference in New Issue
Block a user