From de41fbb3cf39cf24387ba03e6a6cfb697a789a2d Mon Sep 17 00:00:00 2001 From: Caio Ariede Date: Tue, 11 Aug 2015 01:42:11 -0300 Subject: [PATCH] Fixed #25239 -- Corrected makemigrations numbering if a migration has a number-only filename. --- django/db/migrations/autodetector.py | 5 +++-- tests/migrations/test_commands.py | 13 +++++++++++++ tests/migrations/test_migrations_order/0001.py | 12 ++++++++++++ tests/migrations/test_migrations_order/__init__.py | 0 4 files changed, 28 insertions(+), 2 deletions(-) create mode 100644 tests/migrations/test_migrations_order/0001.py create mode 100644 tests/migrations/test_migrations_order/__init__.py diff --git a/django/db/migrations/autodetector.py b/django/db/migrations/autodetector.py index b20946999f..41830f06ba 100644 --- a/django/db/migrations/autodetector.py +++ b/django/db/migrations/autodetector.py @@ -1154,6 +1154,7 @@ class MigrationAutodetector(object): Given a migration name, tries to extract a number from the beginning of it. If no number found, returns None. """ - if re.match(r"^\d+_", name): - return int(name.split("_")[0]) + match = re.match(r'^\d+', name) + if match: + return int(match.group()) return None diff --git a/tests/migrations/test_commands.py b/tests/migrations/test_commands.py index 41860e64dd..8ca47aec2d 100644 --- a/tests/migrations/test_commands.py +++ b/tests/migrations/test_commands.py @@ -510,6 +510,19 @@ class MakeMigrationsTests(MigrationTestBase): self.assertIn('\\xda\\xd1\\xcd\\xa2\\xd3\\xd0\\xc9', content) # title.verbose_name self.assertIn('\\u201c\\xd0j\\xe1\\xf1g\\xf3\\u201d', content) # title.default + def test_makemigrations_order(self): + """ + makemigrations should recognize number-only migrations (0001.py). + """ + module = 'migrations.test_migrations_order' + with self.temporary_migration_module(module=module) as migration_dir: + if hasattr(importlib, 'invalidate_caches'): + # Python 3 importlib caches os.listdir() on some platforms like + # Mac OS X (#23850). + importlib.invalidate_caches() + call_command('makemigrations', 'migrations', '--empty', '-n', 'a', '-v', '0') + self.assertTrue(os.path.exists(os.path.join(migration_dir, '0002_a.py'))) + def test_failing_migration(self): # If a migration fails to serialize, it shouldn't generate an empty file. #21280 apps.register_model('migrations', UnserializableModel) diff --git a/tests/migrations/test_migrations_order/0001.py b/tests/migrations/test_migrations_order/0001.py new file mode 100644 index 0000000000..402c13e7f6 --- /dev/null +++ b/tests/migrations/test_migrations_order/0001.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + initial = True + + operations = [ + ] diff --git a/tests/migrations/test_migrations_order/__init__.py b/tests/migrations/test_migrations_order/__init__.py new file mode 100644 index 0000000000..e69de29bb2