Merge pull request #2938 from dekkers/ticket_23071

Fixed #23071 -- Use last migration's name in dependency to other app
This commit is contained in:
Andrew Godwin 2014-07-25 08:53:57 -07:00
commit ed4812692e
9 changed files with 9 additions and 65 deletions

View File

@ -254,13 +254,13 @@ class MigrationAutodetector(object):
# If we can't find the other app, we add a first/last dependency, # 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 # but only if we've already been through once and checked everything
if chop_mode: if chop_mode:
# If the app already exists, we add __latest__, as we don't know which # If the app already exists, we add a dependency on the last migration,
# migration contains the target field. # 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 it's not yet migrated or has no migrations, we use __first__
if graph and not graph.root_nodes(dep[0]): if graph and graph.leaf_nodes(dep[0]):
operation_dependencies.add((dep[0], "__first__")) operation_dependencies.add(graph.leaf_nodes(dep[0])[0])
else: else:
operation_dependencies.add((dep[0], "__latest__")) operation_dependencies.add((dep[0], "__first__"))
else: else:
deps_satisfied = False deps_satisfied = False
if deps_satisfied: if deps_satisfied:

View File

@ -136,7 +136,7 @@ class MigrationLoader(object):
return self.disk_migrations[results[0]] return self.disk_migrations[results[0]]
def check_key(self, key, current_app): 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 return key
# Special-case __first__, which means "the first migration" for # Special-case __first__, which means "the first migration" for
# migrated apps, and is ignored for unmigrated apps. It allows # migrated apps, and is ignored for unmigrated apps. It allows

View File

@ -1069,7 +1069,8 @@ class AutodetectorTests(TestCase):
@override_settings(MIGRATION_MODULES={"migrations": "migrations.test_migrations"}) @override_settings(MIGRATION_MODULES={"migrations": "migrations.test_migrations"})
def test_last_dependency(self): 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 # Load graph
loader = MigrationLoader(connection) loader = MigrationLoader(connection)
@ -1084,4 +1085,4 @@ class AutodetectorTests(TestCase):
self.assertOperationTypes(changes, 'otherapp', 0, ["CreateModel"]) self.assertOperationTypes(changes, 'otherapp', 0, ["CreateModel"])
self.assertOperationAttributes(changes, 'otherapp', 0, 0, name="Book") self.assertOperationAttributes(changes, 'otherapp', 0, 0, name="Book")
# Right dependencies? # Right dependencies?
self.assertEqual(changes['otherapp'][0].dependencies, [("migrations", "__latest__")]) self.assertEqual(changes['otherapp'][0].dependencies, [("migrations", "0002_second")])

View File

@ -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={ @override_settings(MIGRATION_MODULES={
"migrations": "migrations.test_migrations_first", "migrations": "migrations.test_migrations_first",
"migrations2": "migrations2.test_migrations_2_first", "migrations2": "migrations2.test_migrations_2_first",

View File

@ -1,13 +0,0 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("basic", "__latest__"),
]
operations = []

View File

@ -1,11 +0,0 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations
class Migration(migrations.Migration):
dependencies = []
operations = []

View File

@ -1,13 +0,0 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("basic", "0001_initial"),
]
operations = []