Loading django/db/migrations/autodetector.py +5 −5 Original line number Diff line number Diff line Loading @@ -254,13 +254,13 @@ class MigrationAutodetector(object): # If we can't find the other app, we add a first/last dependency, # but only if we've already been through once and checked everything if chop_mode: # If the app already exists, we add __latest__, as we don't know which # migration contains the target field. # If the app already exists, we add a dependency on the last migration, # as we don't know which migration contains the target field. # If it's not yet migrated or has no migrations, we use __first__ if graph and not graph.root_nodes(dep[0]): operation_dependencies.add((dep[0], "__first__")) if graph and graph.leaf_nodes(dep[0]): operation_dependencies.add(graph.leaf_nodes(dep[0])[0]) else: operation_dependencies.add((dep[0], "__latest__")) operation_dependencies.add((dep[0], "__first__")) else: deps_satisfied = False if deps_satisfied: Loading django/db/migrations/loader.py +1 −1 Original line number Diff line number Diff line Loading @@ -136,7 +136,7 @@ class MigrationLoader(object): return self.disk_migrations[results[0]] def check_key(self, key, current_app): if (key[1] != "__first__" and key[1] != "__latest__") or key in self.graph: if key[1] != "__first__" or key in self.graph: return key # Special-case __first__, which means "the first migration" for # migrated apps, and is ignored for unmigrated apps. It allows Loading tests/migrations/test_autodetector.py +3 −2 Original line number Diff line number Diff line Loading @@ -1069,7 +1069,8 @@ class AutodetectorTests(TestCase): @override_settings(MIGRATION_MODULES={"migrations": "migrations.test_migrations"}) def test_last_dependency(self): """ Tests that a dependency to an app with existing migrations uses __latest__. Tests that a dependency to an app with existing migrations uses the last migration of that app. """ # Load graph loader = MigrationLoader(connection) Loading @@ -1084,4 +1085,4 @@ class AutodetectorTests(TestCase): self.assertOperationTypes(changes, 'otherapp', 0, ["CreateModel"]) self.assertOperationAttributes(changes, 'otherapp', 0, 0, name="Book") # Right dependencies? self.assertEqual(changes['otherapp'][0].dependencies, [("migrations", "__latest__")]) self.assertEqual(changes['otherapp'][0].dependencies, [("migrations", "0002_second")]) tests/migrations/test_loader.py +0 −20 Original line number Diff line number Diff line Loading @@ -122,26 +122,6 @@ class LoaderTests(TestCase): ], ) @modify_settings(INSTALLED_APPS={'append': 'basic'}) @override_settings(MIGRATION_MODULES={ "migrations": "migrations.test_migrations_latest", "basic": "migrations.test_migrations_latest_basic", }) def test_latest(self): """ Makes sure that __latest__ works correctly. """ # Load and test the plan migration_loader = MigrationLoader(connection) self.assertEqual( migration_loader.graph.forwards_plan(("migrations", "0001_initial")), [ ("basic", "0001_initial"), ("basic", "0002_second"), ("migrations", "0001_initial"), ], ) @override_settings(MIGRATION_MODULES={ "migrations": "migrations.test_migrations_first", "migrations2": "migrations2.test_migrations_2_first", Loading tests/migrations/test_migrations_latest/0001_initial.pydeleted 100644 → 0 +0 −13 Original line number Diff line number Diff line # -*- coding: utf-8 -*- from __future__ import unicode_literals from django.db import migrations class Migration(migrations.Migration): dependencies = [ ("basic", "__latest__"), ] operations = [] Loading
django/db/migrations/autodetector.py +5 −5 Original line number Diff line number Diff line Loading @@ -254,13 +254,13 @@ class MigrationAutodetector(object): # If we can't find the other app, we add a first/last dependency, # but only if we've already been through once and checked everything if chop_mode: # If the app already exists, we add __latest__, as we don't know which # migration contains the target field. # If the app already exists, we add a dependency on the last migration, # as we don't know which migration contains the target field. # If it's not yet migrated or has no migrations, we use __first__ if graph and not graph.root_nodes(dep[0]): operation_dependencies.add((dep[0], "__first__")) if graph and graph.leaf_nodes(dep[0]): operation_dependencies.add(graph.leaf_nodes(dep[0])[0]) else: operation_dependencies.add((dep[0], "__latest__")) operation_dependencies.add((dep[0], "__first__")) else: deps_satisfied = False if deps_satisfied: Loading
django/db/migrations/loader.py +1 −1 Original line number Diff line number Diff line Loading @@ -136,7 +136,7 @@ class MigrationLoader(object): return self.disk_migrations[results[0]] def check_key(self, key, current_app): if (key[1] != "__first__" and key[1] != "__latest__") or key in self.graph: if key[1] != "__first__" or key in self.graph: return key # Special-case __first__, which means "the first migration" for # migrated apps, and is ignored for unmigrated apps. It allows Loading
tests/migrations/test_autodetector.py +3 −2 Original line number Diff line number Diff line Loading @@ -1069,7 +1069,8 @@ class AutodetectorTests(TestCase): @override_settings(MIGRATION_MODULES={"migrations": "migrations.test_migrations"}) def test_last_dependency(self): """ Tests that a dependency to an app with existing migrations uses __latest__. Tests that a dependency to an app with existing migrations uses the last migration of that app. """ # Load graph loader = MigrationLoader(connection) Loading @@ -1084,4 +1085,4 @@ class AutodetectorTests(TestCase): self.assertOperationTypes(changes, 'otherapp', 0, ["CreateModel"]) self.assertOperationAttributes(changes, 'otherapp', 0, 0, name="Book") # Right dependencies? self.assertEqual(changes['otherapp'][0].dependencies, [("migrations", "__latest__")]) self.assertEqual(changes['otherapp'][0].dependencies, [("migrations", "0002_second")])
tests/migrations/test_loader.py +0 −20 Original line number Diff line number Diff line Loading @@ -122,26 +122,6 @@ class LoaderTests(TestCase): ], ) @modify_settings(INSTALLED_APPS={'append': 'basic'}) @override_settings(MIGRATION_MODULES={ "migrations": "migrations.test_migrations_latest", "basic": "migrations.test_migrations_latest_basic", }) def test_latest(self): """ Makes sure that __latest__ works correctly. """ # Load and test the plan migration_loader = MigrationLoader(connection) self.assertEqual( migration_loader.graph.forwards_plan(("migrations", "0001_initial")), [ ("basic", "0001_initial"), ("basic", "0002_second"), ("migrations", "0001_initial"), ], ) @override_settings(MIGRATION_MODULES={ "migrations": "migrations.test_migrations_first", "migrations2": "migrations2.test_migrations_2_first", Loading
tests/migrations/test_migrations_latest/0001_initial.pydeleted 100644 → 0 +0 −13 Original line number Diff line number Diff line # -*- coding: utf-8 -*- from __future__ import unicode_literals from django.db import migrations class Migration(migrations.Migration): dependencies = [ ("basic", "__latest__"), ] operations = []