Fixed #34051 -- Made makemigrations --check exit before making migrations.

This commit is contained in:
Jacob Walls 2022-09-25 19:53:55 -04:00 committed by Mariusz Felisiak
parent 5d36a8266c
commit 80d38de52b
4 changed files with 16 additions and 4 deletions

View File

@ -70,7 +70,10 @@ class Command(BaseCommand):
"--check",
action="store_true",
dest="check_changes",
help="Exit with a non-zero status if model changes are missing migrations.",
help=(
"Exit with a non-zero status if model changes are missing migrations "
"and don't actually write them."
),
)
parser.add_argument(
"--scriptable",
@ -248,12 +251,12 @@ class Command(BaseCommand):
else:
self.log("No changes detected")
else:
if check_changes:
sys.exit(1)
if self.update:
self.write_to_last_migration_files(changes)
else:
self.write_migration_files(changes)
if check_changes:
sys.exit(1)
def write_to_last_migration_files(self, changes):
loader = MigrationLoader(connections[DEFAULT_DB_ALIAS])

View File

@ -825,6 +825,11 @@ Generate migration files without Django version and timestamp header.
Makes ``makemigrations`` exit with a non-zero status when model changes without
migrations are detected.
.. versionchanged:: 4.2
In older versions, the missing migrations were also created when using the
``--check`` option.
.. django-admin-option:: --scriptable
.. versionadded:: 4.1

View File

@ -322,6 +322,9 @@ Miscellaneous
* The ``autofocus`` HTML attribute in the admin search box is removed as it can
be confusing for screen readers.
* The :option:`makemigrations --check` option no longer creates missing
migration files.
.. _deprecated-features-4.2:
Features deprecated in 4.2

View File

@ -2391,9 +2391,10 @@ class MakeMigrationsTests(MigrationTestBase):
makemigrations --check should exit with a non-zero status when
there are changes to an app requiring migrations.
"""
with self.temporary_migration_module():
with self.temporary_migration_module() as tmpdir:
with self.assertRaises(SystemExit):
call_command("makemigrations", "--check", "migrations", verbosity=0)
self.assertFalse(os.path.exists(tmpdir))
with self.temporary_migration_module(
module="migrations.test_migrations_no_changes"