Opened 9 years ago
Last modified 9 years ago
#25945 closed Bug
Makemigrations referring to squashed migrations — at Version 3
Reported by: | Jarek Glowacki | Owned by: | nobody |
---|---|---|---|
Component: | Migrations | Version: | dev |
Severity: | Normal | Keywords: | make squash migrations partially run dependencies |
Cc: | Triage Stage: | Ready for checkin | |
Has patch: | yes | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description (last modified by )
Consider the migration tree defined by:
my_app/migrations/ 0001_initial.py 0002_blah.py -> dep on 0001_initial 0001_initial_squashed_0002_blah.py -> replaces 0001_initial and 0002_blah 0003_ohnoes.py -> dep on ????
If we try to make 0003
depend on 0001_initial_squashed_0002_blah
, then we get a NodeNotFoundError if the database is only up to 0001_initial
: it is currently in the 'unsquashed reality' in which 0001_initial_squashed_0002_blah
does not exist. Creating new databases from this setup does not raise any problems, nor does running the migrations on databases that aren't part-way through a squashed migration series since these will live in the 'squashed reality'.
If we try to make 0003
depend on 0002_blah
, then things work fine in all cases.
However makemigrations
chooses to point newly created migrations at the squashed migration 0001_initial_squashed_0002_blah
rather than the last of the unsquashed ones 0002_blah
, causing the problem described above and making it unobvious that new migrations should still point at the old replaced migrations up until the point at which the squashed migrations get transitioned to normal migrations.
Proposed solution:
Fully support listing the dependency both ways, as 0001_initial_squashed_0002_blah
and as 0002_blah
. For cases where the migration tree is in the unsquashed reality and thus does not contain 0001_initial_squashed_0002_blah
, have it inspect the 'replaces' list in 0001_initial_squashed_0002_blah.py
, pick out the most recent migration (ie 0002_blah
) and use that instead.
Another (perhaps cleaner, yet less clear) solution:
Have makemigrations
not point newly created migrations at squashed migrations, but rather at the squashed migrations' last dependency. This would solve the issue with makemigrations
automatically creating problematic migrations. It would be cleaner as there'd only be one correct migration to point to, however it could result in confusion for people manually creating their migrations and pointing them at the wrong thing.
Change History (3)
comment:1 by , 9 years ago
Summary: | Unabled to refer to partially-run squashed migrations in newer migrations. → Unable to refer to partially-run squashed migrations in newer migrations. |
---|
comment:2 by , 9 years ago
Triage Stage: | Unreviewed → Accepted |
---|
comment:3 by , 9 years ago
Description: | modified (diff) |
---|---|
Keywords: | make squash migrations added; squashmigrations removed |
Summary: | Unable to refer to partially-run squashed migrations in newer migrations. → Makemigrations referring to squashed migrations |