diff options
| author | Andrew Godwin <andrew@aeracode.org> | 2014-06-17 23:27:03 -0700 |
|---|---|---|
| committer | Andrew Godwin <andrew@aeracode.org> | 2014-06-17 23:28:35 -0700 |
| commit | 2cee1d464217ff9f0d0af1e14ecd0b9b70ad1b7e (patch) | |
| tree | bdf62266916d8982e560581ea57e32682f526835 /django | |
| parent | 09b63a7ccee85566dbe6dd476b507e8c310e8092 (diff) | |
Fixed #22861: Internal migrations done first so __first__ works
Thanks to Chris Beaven.
Diffstat (limited to 'django')
| -rw-r--r-- | django/db/migrations/graph.py | 4 | ||||
| -rw-r--r-- | django/db/migrations/loader.py | 11 |
2 files changed, 13 insertions, 2 deletions
diff --git a/django/db/migrations/graph.py b/django/db/migrations/graph.py index 8e034f2bd0..59578b110f 100644 --- a/django/db/migrations/graph.py +++ b/django/db/migrations/graph.py @@ -74,7 +74,7 @@ class MigrationGraph(object): for node in self.nodes: if not any(key[0] == node[0] for key in self.dependencies.get(node, set())) and (not app or app == node[0]): roots.add(node) - return roots + return sorted(roots) def leaf_nodes(self, app=None): """ @@ -88,7 +88,7 @@ class MigrationGraph(object): for node in self.nodes: if not any(key[0] == node[0] for key in self.dependents.get(node, set())) and (not app or app == node[0]): leaves.add(node) - return leaves + return sorted(leaves) def dfs(self, start, get_children): """ diff --git a/django/db/migrations/loader.py b/django/db/migrations/loader.py index 86987db02c..5465f0ad18 100644 --- a/django/db/migrations/loader.py +++ b/django/db/migrations/loader.py @@ -223,8 +223,19 @@ class MigrationLoader(object): self.graph = MigrationGraph() for key, migration in normal.items(): self.graph.add_node(key, migration) + # Add all internal dependencies first to ensure __first__ dependencies + # find the correct root node. for key, migration in normal.items(): for parent in migration.dependencies: + if parent[0] != key[0] or parent[1] == '__first__': + # Ignore __first__ references to the same app (#22325) + continue + self.graph.add_dependency(key, parent) + for key, migration in normal.items(): + for parent in migration.dependencies: + if parent[0] == key[0]: + # Internal dependencies already added. + continue parent = self.check_key(parent, key[0]) if parent is not None: self.graph.add_dependency(key, parent) |
