Fixed #25231 -- Added recording of squashed migrations in the migrate command.
Ensured squashed migrations are recorded as applied when the migrate command is run and all of the original migrations have been previously applied.
This commit is contained in:
parent
a7b7f27c05
commit
69db1c7455
|
@ -171,6 +171,7 @@ class Command(BaseCommand):
|
||||||
if self.verbosity >= 1:
|
if self.verbosity >= 1:
|
||||||
self.stdout.write(self.style.MIGRATE_HEADING("Running migrations:"))
|
self.stdout.write(self.style.MIGRATE_HEADING("Running migrations:"))
|
||||||
if not plan:
|
if not plan:
|
||||||
|
executor.check_replacements()
|
||||||
if self.verbosity >= 1:
|
if self.verbosity >= 1:
|
||||||
self.stdout.write(" No migrations to apply.")
|
self.stdout.write(" No migrations to apply.")
|
||||||
# If there's changes that aren't in migrations yet, tell them how to fix it.
|
# If there's changes that aren't in migrations yet, tell them how to fix it.
|
||||||
|
|
|
@ -24,3 +24,6 @@ Bugfixes
|
||||||
|
|
||||||
* Fixed ``has_changed()`` method in ``contrib.postgres.forms.HStoreField``
|
* Fixed ``has_changed()`` method in ``contrib.postgres.forms.HStoreField``
|
||||||
(:ticket:`25215`, :ticket:`25233`).
|
(:ticket:`25215`, :ticket:`25233`).
|
||||||
|
|
||||||
|
* Fixed the recording of squashed migrations when running the ``migrate``
|
||||||
|
command (:ticket:`25231`).
|
||||||
|
|
|
@ -8,6 +8,7 @@ import os
|
||||||
from django.apps import apps
|
from django.apps import apps
|
||||||
from django.core.management import CommandError, call_command
|
from django.core.management import CommandError, call_command
|
||||||
from django.db import DatabaseError, connection, models
|
from django.db import DatabaseError, connection, models
|
||||||
|
from django.db.migrations.recorder import MigrationRecorder
|
||||||
from django.test import ignore_warnings, mock, override_settings
|
from django.test import ignore_warnings, mock, override_settings
|
||||||
from django.utils import six
|
from django.utils import six
|
||||||
from django.utils.deprecation import RemovedInDjango110Warning
|
from django.utils.deprecation import RemovedInDjango110Warning
|
||||||
|
@ -413,6 +414,51 @@ class MigrateTests(MigrationTestBase):
|
||||||
"""
|
"""
|
||||||
call_command("migrate", "migrated_unapplied_app", stdout=six.StringIO())
|
call_command("migrate", "migrated_unapplied_app", stdout=six.StringIO())
|
||||||
|
|
||||||
|
@override_settings(MIGRATION_MODULES={"migrations": "migrations.test_migrations_squashed"})
|
||||||
|
def test_migrate_record_replaced(self):
|
||||||
|
"""
|
||||||
|
Running a single squashed migration should record all of the original
|
||||||
|
replaced migrations as run.
|
||||||
|
"""
|
||||||
|
recorder = MigrationRecorder(connection)
|
||||||
|
out = six.StringIO()
|
||||||
|
call_command("migrate", "migrations", verbosity=0)
|
||||||
|
call_command("showmigrations", "migrations", stdout=out, no_color=True)
|
||||||
|
self.assertEqual(
|
||||||
|
'migrations\n'
|
||||||
|
' [x] 0001_squashed_0002 (2 squashed migrations)\n',
|
||||||
|
out.getvalue().lower()
|
||||||
|
)
|
||||||
|
applied_migrations = recorder.applied_migrations()
|
||||||
|
self.assertIn(("migrations", "0001_initial"), applied_migrations)
|
||||||
|
self.assertIn(("migrations", "0002_second"), applied_migrations)
|
||||||
|
self.assertIn(("migrations", "0001_squashed_0002"), applied_migrations)
|
||||||
|
# Rollback changes
|
||||||
|
call_command("migrate", "migrations", "zero", verbosity=0)
|
||||||
|
|
||||||
|
@override_settings(MIGRATION_MODULES={"migrations": "migrations.test_migrations_squashed"})
|
||||||
|
def test_migrate_record_squashed(self):
|
||||||
|
"""
|
||||||
|
Running migrate for a squashed migration should record as run
|
||||||
|
if all of the replaced migrations have been run (#25231).
|
||||||
|
"""
|
||||||
|
recorder = MigrationRecorder(connection)
|
||||||
|
recorder.record_applied("migrations", "0001_initial")
|
||||||
|
recorder.record_applied("migrations", "0002_second")
|
||||||
|
out = six.StringIO()
|
||||||
|
call_command("migrate", "migrations", verbosity=0)
|
||||||
|
call_command("showmigrations", "migrations", stdout=out, no_color=True)
|
||||||
|
self.assertEqual(
|
||||||
|
'migrations\n'
|
||||||
|
' [x] 0001_squashed_0002 (2 squashed migrations)\n',
|
||||||
|
out.getvalue().lower()
|
||||||
|
)
|
||||||
|
self.assertIn(
|
||||||
|
("migrations", "0001_squashed_0002"),
|
||||||
|
recorder.applied_migrations()
|
||||||
|
)
|
||||||
|
# No changes were actually applied so there is nothing to rollback
|
||||||
|
|
||||||
|
|
||||||
class MakeMigrationsTests(MigrationTestBase):
|
class MakeMigrationsTests(MigrationTestBase):
|
||||||
"""
|
"""
|
||||||
|
|
Loading…
Reference in New Issue