Fixed #21968: Bad detection of old-style apps to add initial migration

This commit is contained in:
Andrew Godwin 2014-02-09 11:41:44 +00:00
parent 75a96f06e9
commit 2085f53f56
2 changed files with 30 additions and 23 deletions

View File

@ -47,7 +47,9 @@ class Command(BaseCommand):
# Load the current graph state. Takes a connection, but it's not used # Load the current graph state. Takes a connection, but it's not used
# (makemigrations doesn't look at the database state). # (makemigrations doesn't look at the database state).
# Also make sure the graph is built without unmigrated apps shoehorned in.
loader = MigrationLoader(connections[DEFAULT_DB_ALIAS]) loader = MigrationLoader(connections[DEFAULT_DB_ALIAS])
loader.build_graph(ignore_unmigrated=True)
# Before anything else, see if there's conflicting apps and drop out # Before anything else, see if there's conflicting apps and drop out
# hard if there are any and they don't want to merge # hard if there are any and they don't want to merge

View File

@ -135,7 +135,7 @@ class MigrationLoader(object):
else: else:
return self.disk_migrations[results[0]] return self.disk_migrations[results[0]]
def build_graph(self): def build_graph(self, ignore_unmigrated=False):
""" """
Builds a migration dependency graph using both the disk and database. Builds a migration dependency graph using both the disk and database.
You'll need to rebuild the graph if you apply migrations. This isn't You'll need to rebuild the graph if you apply migrations. This isn't
@ -200,6 +200,10 @@ class MigrationLoader(object):
# even have migrations. # even have migrations.
if parent[1] == "__first__" and parent not in self.graph: if parent[1] == "__first__" and parent not in self.graph:
if parent[0] in self.unmigrated_apps: if parent[0] in self.unmigrated_apps:
if ignore_unmigrated:
migration.dependencies.remove(parent)
parent = None
else:
# This app isn't migrated, but something depends on it. # This app isn't migrated, but something depends on it.
# We'll add a fake initial migration for it into the # We'll add a fake initial migration for it into the
# graph. # graph.
@ -226,6 +230,7 @@ class MigrationLoader(object):
parent = list(self.graph.root_nodes(parent[0]))[0] parent = list(self.graph.root_nodes(parent[0]))[0]
else: else:
raise ValueError("Dependency on unknown app %s" % parent[0]) raise ValueError("Dependency on unknown app %s" % parent[0])
if parent is not None:
self.graph.add_dependency(key, parent) self.graph.add_dependency(key, parent)
def detect_conflicts(self): def detect_conflicts(self):