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

This reverts commit 737d24923a.

Backport of 2832a9b028 from master
This commit is contained in:
Markus Holtermann 2015-02-07 19:34:15 +01:00
parent b2b5ea88b7
commit edbf6de753
6 changed files with 10 additions and 63 deletions

View File

@ -11,7 +11,6 @@ from django.contrib.auth import get_permission_codename
from django.core import exceptions from django.core import exceptions
from django.core.management.base import CommandError from django.core.management.base import CommandError
from django.db import DEFAULT_DB_ALIAS, router from django.db import DEFAULT_DB_ALIAS, router
from django.db.migrations.loader import is_latest_migration_applied
from django.utils.encoding import DEFAULT_LOCALE_ENCODING from django.utils.encoding import DEFAULT_LOCALE_ENCODING
from django.utils import six from django.utils import six
@ -59,10 +58,6 @@ def _check_permission_clashing(custom, builtin, ctype):
def create_permissions(app_config, verbosity=2, interactive=True, using=DEFAULT_DB_ALIAS, **kwargs): 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: if not app_config.models_module:
return return

View File

@ -17,7 +17,7 @@ from django.core import checks
from django.core import exceptions from django.core import exceptions
from django.core.management import call_command from django.core.management import call_command
from django.core.management.base import CommandError 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 import six
from django.utils.encoding import force_str from django.utils.encoding import force_str
@ -570,21 +570,3 @@ class PermissionTestCase(TestCase):
six.assertRaisesRegex(self, exceptions.ValidationError, six.assertRaisesRegex(self, exceptions.ValidationError,
"The verbose_name of auth.permission is longer than 244 characters", "The verbose_name of auth.permission is longer than 244 characters",
create_permissions, auth_app_config, verbosity=0) 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.apps import apps
from django.db import DEFAULT_DB_ALIAS, router from django.db import DEFAULT_DB_ALIAS, router
from django.db.migrations.loader import is_latest_migration_applied
from django.utils import six from django.utils import six
from django.utils.six.moves import input from django.utils.six.moves import input
@ -10,10 +9,6 @@ def update_contenttypes(app_config, verbosity=2, interactive=True, using=DEFAULT
Creates content types for models in the given app, removing any model Creates content types for models in the given app, removing any model
entries that no longer have a matching model class. 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: if not app_config.models_module:
return return

View File

@ -5,9 +5,8 @@ import warnings
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
from django.contrib.contenttypes.views import shortcut from django.contrib.contenttypes.views import shortcut
from django.contrib.sites.shortcuts import get_current_site from django.contrib.sites.shortcuts import get_current_site
from django.core.management import call_command from django.http import Http404, HttpRequest
from django.http import HttpRequest, Http404 from django.test import TestCase, override_settings
from django.test import TestCase, override_settings, skipUnlessDBFeature
from django.utils import six from django.utils import six
from .models import ConcreteModel, ProxyModel, FooWithoutUrl, FooWithUrl, FooWithBrokenAbsoluteUrl from .models import ConcreteModel, ProxyModel, FooWithoutUrl, FooWithUrl, FooWithBrokenAbsoluteUrl
@ -244,21 +243,6 @@ class ContentTypesTests(TestCase):
ct_fetched = ContentType.objects.get_for_id(ct.pk) ct_fetched = ContentType.objects.get_for_id(ct.pk)
self.assertIsNone(ct_fetched.model_class()) self.assertIsNone(ct_fetched.model_class())
@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.contenttypes"],
MIGRATION_MODULES={'contenttypes': 'django.contrib.contenttypes.migrations'},
):
call_command("migrate", "contenttypes", "zero", stdout=six.StringIO())
finally:
call_command("migrate", stdout=six.StringIO())
def test_name_deprecation(self): def test_name_deprecation(self):
""" """
ContentType.name has been removed. Test that a warning is emitted when ContentType.name has been removed. Test that a warning is emitted when

View File

@ -5,11 +5,10 @@ import os
import sys import sys
from django.apps import apps from django.apps import apps
from django.db import connection
from django.db.migrations.recorder import MigrationRecorder
from django.db.migrations.graph import MigrationGraph, NodeNotFoundError
from django.utils import six
from django.conf import settings from django.conf import settings
from django.db.migrations.graph import MigrationGraph, NodeNotFoundError
from django.db.migrations.recorder import MigrationRecorder
from django.utils import six
MIGRATIONS_MODULE_NAME = 'migrations' MIGRATIONS_MODULE_NAME = 'migrations'
@ -340,14 +339,3 @@ class AmbiguityError(Exception):
Raised when more than one migration matches a name prefix Raised when more than one migration matches a name prefix
""" """
pass 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 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`).