[4.2.x] Fixed #34568 -- Made makemigrations --update respect --name option.

Thanks David Sanders for the report.
Backport of c52f4295f2 from main
This commit is contained in:
Mariusz Felisiak 2023-05-17 13:14:43 +02:00
parent 2b5c5e54de
commit cdd970ae22
4 changed files with 34 additions and 3 deletions

View File

@ -316,9 +316,8 @@ class Command(BaseCommand):
)
# Update name.
previous_migration_path = MigrationWriter(leaf_migration).path
suggested_name = (
leaf_migration.name[:4] + "_" + leaf_migration.suggest_name()
)
name_fragment = self.migration_name or leaf_migration.suggest_name()
suggested_name = leaf_migration.name[:4] + f"_{name_fragment}"
if leaf_migration.name == suggested_name:
new_name = leaf_migration.name + "_updated"
else:

View File

@ -759,6 +759,9 @@ generated migration files to ``stdout``.
Merges model changes into the latest migration and optimize the resulting
operations.
The updated migration will have a generated name. In order to preserve the
previous name, set it using ``--name``.
``migrate``
-----------

View File

@ -19,3 +19,6 @@ Bugfixes
* Fixed a regression in Django 4.2 that caused a crash of ``QuerySet.defer()``
when passing a ``ManyToManyField`` or ``GenericForeignKey`` reference. While
doing so is a no-op, it was allowed in older version (:ticket:`34570`).
* Fixed a bug in Django 4.2 where :option:`makemigrations --update` didn't
respect the ``--name`` option (:ticket:`34568`).

View File

@ -2649,6 +2649,32 @@ class MakeMigrationsTests(MigrationTestBase):
self.assertNotEqual(initial_content, fp.read())
self.assertIn(f"Deleted {migration_file}", out.getvalue())
def test_makemigrations_update_custom_name(self):
custom_name = "delete_something"
with self.temporary_migration_module(
module="migrations.test_migrations"
) as migration_dir:
old_migration_file = os.path.join(migration_dir, "0002_second.py")
with open(old_migration_file) as fp:
initial_content = fp.read()
with captured_stdout() as out:
call_command(
"makemigrations", "migrations", update=True, name=custom_name
)
self.assertFalse(
any(
filename.startswith("0003")
for filename in os.listdir(migration_dir)
)
)
self.assertIs(os.path.exists(old_migration_file), False)
new_migration_file = os.path.join(migration_dir, f"0002_{custom_name}.py")
self.assertIs(os.path.exists(new_migration_file), True)
with open(new_migration_file) as fp:
self.assertNotEqual(initial_content, fp.read())
self.assertIn(f"Deleted {old_migration_file}", out.getvalue())
def test_makemigrations_update_applied_migration(self):
recorder = MigrationRecorder(connection)
recorder.record_applied("migrations", "0001_initial")