1
0
mirror of https://github.com/django/django.git synced 2025-04-15 21:04:36 +00:00

[1.7.x] Revert "[1.7.x] Fixed #24075 -- Prevented running post_migrate signals when unapplying initial migrations of contenttypes and auth"

This reverts commit 478546fcef38d95866a92bc44d10e15b26c7254c.

Backport of 2832a9b028c267997b2fd3dd0989670d57cdd08f from master
This commit is contained in:
Markus Holtermann 2015-02-07 19:59:44 +01:00
parent e6ffe43b67
commit 208d5c42e7
6 changed files with 6 additions and 64 deletions

View File

@ -11,7 +11,6 @@ from django.contrib.auth import models as auth_app, get_permission_codename
from django.core import exceptions
from django.core.management.base import CommandError
from django.db import DEFAULT_DB_ALIAS, router
from django.db.migrations.loader import is_latest_migration_applied
from django.db.models import signals
from django.utils.encoding import DEFAULT_LOCALE_ENCODING
from django.utils import six
@ -60,10 +59,6 @@ def _check_permission_clashing(custom, builtin, ctype):
def create_permissions(app_config, verbosity=2, interactive=True, using=DEFAULT_DB_ALIAS, **kwargs):
# TODO: Remove when migration plan / state is passed (#24100).
if not is_latest_migration_applied('auth'):
return
if not app_config.models_module:
return

View File

@ -17,7 +17,7 @@ from django.core import checks
from django.core import exceptions
from django.core.management import call_command
from django.core.management.base import CommandError
from django.test import TestCase, override_settings, override_system_checks, skipUnlessDBFeature
from django.test import TestCase, override_settings, override_system_checks
from django.utils import six
from django.utils.encoding import force_str
@ -506,21 +506,3 @@ class PermissionTestCase(TestCase):
six.assertRaisesRegex(self, exceptions.ValidationError,
"The verbose_name of permission is longer than 39 characters",
create_permissions, auth_app_config, verbosity=0)
class MigrateTests(TestCase):
@skipUnlessDBFeature('can_rollback_ddl')
def test_unmigrating_first_migration_post_migrate_signal(self):
"""
#24075 - When unmigrating an app before its first migration,
post_migrate signal handler must be aware of the missing tables.
"""
try:
with override_settings(
INSTALLED_APPS=["django.contrib.auth", "django.contrib.contenttypes"],
MIGRATION_MODULES={'auth': 'django.contrib.auth.migrations'},
):
call_command("migrate", "auth", "zero", stdout=six.StringIO())
finally:
call_command("migrate", stdout=six.StringIO())

View File

@ -1,6 +1,5 @@
from django.apps import apps
from django.db import DEFAULT_DB_ALIAS, router
from django.db.migrations.loader import is_latest_migration_applied
from django.db.models import signals
from django.utils.encoding import smart_text
from django.utils import six
@ -12,10 +11,6 @@ def update_contenttypes(app_config, verbosity=2, interactive=True, using=DEFAULT
Creates content types for models in the given app, removing any model
entries that no longer have a matching model class.
"""
# TODO: Remove when migration plan / state is passed (#24100).
if not is_latest_migration_applied('contenttypes'):
return
if not app_config.models_module:
return

View File

@ -3,10 +3,8 @@ from __future__ import unicode_literals
from django.contrib.contenttypes.models import ContentType
from django.contrib.contenttypes.views import shortcut
from django.contrib.sites.shortcuts import get_current_site
from django.core.management import call_command
from django.http import HttpRequest, Http404
from django.test import TestCase, override_settings, skipUnlessDBFeature
from django.test.utils import override_system_checks
from django.test import TestCase, override_settings
from django.utils import six
from .models import ConcreteModel, ProxyModel, FooWithoutUrl, FooWithUrl, FooWithBrokenAbsoluteUrl
@ -243,22 +241,3 @@ class ContentTypesTests(TestCase):
# Instead, just return the ContentType object and let the app detect stale states.
ct_fetched = ContentType.objects.get_for_id(ct.pk)
self.assertIsNone(ct_fetched.model_class())
class MigrateTests(TestCase):
@skipUnlessDBFeature('can_rollback_ddl')
@override_system_checks([])
def test_unmigrating_first_migration_post_migrate_signal(self):
"""
#24075 - When unmigrating an app before its first migration,
post_migrate signal handler must be aware of the missing tables.
"""
try:
with override_settings(
INSTALLED_APPS=["django.contrib.contenttypes"],
MIGRATION_MODULES={'contenttypes': 'django.contrib.contenttypes.migrations'},
):
call_command("migrate", "contenttypes", "zero", stdout=six.StringIO())
finally:
call_command("migrate", stdout=six.StringIO())

View File

@ -5,7 +5,6 @@ import os
import sys
from django.apps import apps
from django.db import connection
from django.db.migrations.recorder import MigrationRecorder
from django.db.migrations.graph import MigrationGraph
from django.utils import six
@ -285,14 +284,3 @@ class AmbiguityError(Exception):
Raised when more than one migration matches a name prefix
"""
pass
def is_latest_migration_applied(app_label):
# TODO: Remove when migration plan / state is passed (#24100).
loader = MigrationLoader(connection)
loader.load_disk()
leaf_nodes = loader.graph.leaf_nodes(app=app_label)
return (
leaf_nodes and leaf_nodes[0] in loader.applied_migrations or
app_label in loader.unmigrated_apps
)

View File

@ -9,4 +9,7 @@ Django 1.7.5 fixes several bugs in 1.7.4.
Bugfixes
========
* ...
* Reverted a fix that prevented a migration crash when unapplying
``contrib.contenttypes``s or ``contrib.auth``s first migration
(:ticket:`24075`) due to severe impact on the test performance
(:ticket:`24251`) and problems in multi-database setups (:ticket:`24298`).