summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStephen Finucane <stephen@that.guru>2020-04-10 12:08:32 +0100
committerStephen Finucane <stephen@that.guru>2020-04-26 13:56:38 +0100
commit9bb5caec4180f70f0d941580553994d7e36ca6f9 (patch)
treeebfbc1b97d50d1a4d26ae2a10bf9e72fafc6287d
parent0910f9771113b7b6228b745ba9a74bd77f9b68ea (diff)
downloadpatchwork-9bb5caec4180f70f0d941580553994d7e36ca6f9.tar
patchwork-9bb5caec4180f70f0d941580553994d7e36ca6f9.tar.gz
migrations: Squash 0001 to 0040
Now that we're moving a new major version, we can squash the migrations we have to date. This coexists alongside the old migrations, which we can remove and replace entirely when we release 4.0, per the advice of the 'squashmigrations' tool. You should commit this migration but leave the old ones in place; the new migration will be used for new installs. Once you are sure all instances of the codebase have applied the migrations you squashed, you can delete them. The 'squashmigrations' tool can't parse the output of 'RunPython' blocks so the output of the tool was less optimized than it could be. As a result, we've manually modified this change to remove the 'RunPython' block and unnecessary 'AlterField' entries. This was done by removing all migrations and generating a new "initial" migration, which was then modified to mark all strings as byte strings (as they were when we were using Python 2 to generate these migrations) so that 0041 would apply cleanly. The main benefit of this change is that it significantly reduces the startup time for unit tests. Executed on my host, the run time for a single test goes from ~ 22 seconds to ~ 14 seconds. This is obviously reduced for additional tests. Signed-off-by: Stephen Finucane <stephen@that.guru>
-rw-r--r--migrations/0001_squashed_0040_add_related_patches.py1097
1 files changed, 1097 insertions, 0 deletions
diff --git a/migrations/0001_squashed_0040_add_related_patches.py b/migrations/0001_squashed_0040_add_related_patches.py
new file mode 100644
index 0000000..e07804f
--- /dev/null
+++ b/migrations/0001_squashed_0040_add_related_patches.py
@@ -0,0 +1,1097 @@
+import datetime
+
+from django.conf import settings
+from django.db import migrations, models
+import django.db.migrations.operations.special
+import django.db.models.deletion
+
+import patchwork.fields
+import patchwork.models
+
+
+class Migration(migrations.Migration):
+
+ replaces = [
+ ('patchwork', '0001_initial'),
+ ('patchwork', '0002_fix_patch_state_default_values'),
+ ('patchwork', '0003_add_check_model'),
+ ('patchwork', '0004_add_delegation_rule_model'),
+ ('patchwork', '0005_unselectable_maintainer_projects'),
+ ('patchwork', '0006_add_patch_diff'),
+ ('patchwork', '0007_move_comment_content_to_patch_content'),
+ ('patchwork', '0008_add_email_mixin'),
+ ('patchwork', '0009_add_submission_model'),
+ ('patchwork', '0010_migrate_data_from_submission_to_patch'),
+ ('patchwork', '0011_remove_temp_fields'),
+ ('patchwork', '0012_add_coverletter_model'),
+ ('patchwork', '0013_slug_check_context'),
+ ('patchwork', '0014_remove_userprofile_primary_project'),
+ ('patchwork', '0015_add_series_models'),
+ ('patchwork', '0016_series_project'),
+ ('patchwork', '0017_improved_delegation_rule_docs'),
+ ('patchwork', '0018_add_event_model'),
+ ('patchwork', '0019_userprofile_show_ids'),
+ ('patchwork', '0020_tag_show_column'),
+ ('patchwork', '0021_django_1_10_fixes'),
+ ('patchwork', '0022_add_subject_match_to_project'),
+ ('patchwork', '0023_timezone_unify'),
+ ('patchwork', '0024_patch_patch_project'),
+ ('patchwork', '0025_add_regex_validators'),
+ ('patchwork', '0026_add_user_bundles_backref'),
+ ('patchwork', '0027_remove_series_ordering'),
+ ('patchwork', '0028_add_comment_date_index'),
+ ('patchwork', '0029_add_list_covering_index'),
+ ('patchwork', '0030_add_submission_covering_index'),
+ ('patchwork', '0031_add_patch_series_fields'),
+ ('patchwork', '0032_migrate_data_from_series_patch_to_patch'),
+ ('patchwork', '0033_remove_patch_series_model'),
+ ('patchwork', '0034_project_list_archive_url'),
+ ('patchwork', '0035_project_list_archive_url_format'),
+ ('patchwork', '0036_project_commit_url_format'),
+ ('patchwork', '0037_event_actor'),
+ ('patchwork', '0038_state_slug'),
+ ('patchwork', '0039_unique_series_references'),
+ ('patchwork', '0040_add_related_patches'),
+ ]
+
+ initial = True
+
+ dependencies = [
+ migrations.swappable_dependency(settings.AUTH_USER_MODEL),
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='Bundle',
+ fields=[
+ (
+ 'id',
+ models.AutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name='ID',
+ ),
+ ),
+ ('name', models.CharField(max_length=50)),
+ ('public', models.BooleanField(default=False)),
+ (
+ 'owner',
+ models.ForeignKey(
+ on_delete=django.db.models.deletion.CASCADE,
+ related_name='bundles',
+ related_query_name='bundle',
+ to=settings.AUTH_USER_MODEL,
+ ),
+ ),
+ ],
+ ),
+ migrations.CreateModel(
+ name='Check',
+ fields=[
+ (
+ 'id',
+ models.AutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name='ID',
+ ),
+ ),
+ (
+ 'date',
+ models.DateTimeField(default=datetime.datetime.utcnow),
+ ),
+ (
+ 'state',
+ models.SmallIntegerField(
+ choices=[
+ (0, b'pending'),
+ (1, b'success'),
+ (2, b'warning'),
+ (3, b'fail'),
+ ],
+ default=0,
+ help_text=b'The state of the check.',
+ ),
+ ),
+ (
+ 'target_url',
+ models.URLField(
+ blank=True,
+ help_text=b'The target URL to associate with this '
+ b'check. This should be specific to the '
+ b'patch.',
+ null=True,
+ ),
+ ),
+ (
+ 'description',
+ models.TextField(
+ blank=True,
+ help_text=b'A brief description of the check.',
+ null=True,
+ ),
+ ),
+ (
+ 'context',
+ models.SlugField(
+ default='default',
+ help_text=b'A label to discern check from checks of '
+ b'other testing systems.',
+ max_length=255,
+ ),
+ ),
+ (
+ 'user',
+ models.ForeignKey(
+ on_delete=django.db.models.deletion.CASCADE,
+ to=settings.AUTH_USER_MODEL,
+ ),
+ ),
+ ],
+ ),
+ migrations.CreateModel(
+ name='EmailOptout',
+ fields=[
+ (
+ 'email',
+ models.CharField(
+ max_length=200, primary_key=True, serialize=False
+ ),
+ ),
+ ],
+ ),
+ migrations.CreateModel(
+ name='PatchRelation',
+ fields=[
+ (
+ 'id',
+ models.AutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name='ID',
+ ),
+ ),
+ ],
+ ),
+ migrations.CreateModel(
+ name='Person',
+ fields=[
+ (
+ 'id',
+ models.AutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name='ID',
+ ),
+ ),
+ ('email', models.CharField(max_length=255, unique=True)),
+ (
+ 'name',
+ models.CharField(blank=True, max_length=255, null=True),
+ ),
+ (
+ 'user',
+ models.ForeignKey(
+ blank=True,
+ null=True,
+ on_delete=django.db.models.deletion.SET_NULL,
+ to=settings.AUTH_USER_MODEL,
+ ),
+ ),
+ ],
+ options={'verbose_name_plural': 'People'},
+ ),
+ migrations.CreateModel(
+ name='Project',
+ fields=[
+ (
+ 'id',
+ models.AutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name='ID',
+ ),
+ ),
+ ('linkname', models.CharField(max_length=255, unique=True)),
+ ('name', models.CharField(max_length=255, unique=True)),
+ ('listid', models.CharField(max_length=255)),
+ ('listemail', models.CharField(max_length=200)),
+ (
+ 'subject_match',
+ models.CharField(
+ blank=True,
+ default='',
+ help_text=b'Regex to match the subject against if '
+ b'only part of emails sent to the list '
+ b'belongs to this project. Will be used '
+ b'with IGNORECASE and MULTILINE flags. If '
+ b'rules for more projects match the first '
+ b'one returned from DB is chosen; empty '
+ b'field serves as a default for every email '
+ b'which has no other match.',
+ max_length=64,
+ validators=[patchwork.models.validate_regex_compiles],
+ ),
+ ),
+ ('web_url', models.CharField(blank=True, max_length=2000)),
+ ('scm_url', models.CharField(blank=True, max_length=2000)),
+ ('webscm_url', models.CharField(blank=True, max_length=2000)),
+ (
+ 'list_archive_url',
+ models.CharField(blank=True, max_length=2000),
+ ),
+ (
+ 'list_archive_url_format',
+ models.CharField(
+ blank=True,
+ help_text=b"URL format for the list archive's "
+ b"Message-ID redirector. {} will be "
+ b"replaced by the Message-ID.",
+ max_length=2000,
+ ),
+ ),
+ (
+ 'commit_url_format',
+ models.CharField(
+ blank=True,
+ help_text=b'URL format for a particular commit. {} '
+ b'will be replaced by the commit SHA.',
+ max_length=2000,
+ ),
+ ),
+ ('send_notifications', models.BooleanField(default=False)),
+ ('use_tags', models.BooleanField(default=True)),
+ ],
+ options={
+ 'ordering': ['linkname'],
+ 'unique_together': {('listid', 'subject_match')},
+ },
+ ),
+ migrations.CreateModel(
+ name='Series',
+ fields=[
+ (
+ 'id',
+ models.AutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name='ID',
+ ),
+ ),
+ (
+ 'name',
+ models.CharField(
+ blank=True,
+ help_text=b'An optional name to associate with the '
+ b'series, e.g. "John\'s PCI series".',
+ max_length=255,
+ null=True,
+ ),
+ ),
+ ('date', models.DateTimeField()),
+ (
+ 'version',
+ models.IntegerField(
+ default=1,
+ help_text=b'Version of series as indicated by the '
+ b'subject prefix(es)',
+ ),
+ ),
+ (
+ 'total',
+ models.IntegerField(
+ help_text=b'Number of patches in series as indicated '
+ b'by the subject prefix(es)'
+ ),
+ ),
+ (
+ 'project',
+ models.ForeignKey(
+ blank=True,
+ null=True,
+ on_delete=django.db.models.deletion.CASCADE,
+ related_name='series',
+ to='patchwork.Project',
+ ),
+ ),
+ (
+ 'submitter',
+ models.ForeignKey(
+ on_delete=django.db.models.deletion.CASCADE,
+ to='patchwork.Person',
+ ),
+ ),
+ ],
+ options={'verbose_name_plural': 'Series'},
+ bases=(patchwork.models.FilenameMixin, models.Model),
+ ),
+ migrations.CreateModel(
+ name='State',
+ fields=[
+ (
+ 'id',
+ models.AutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name='ID',
+ ),
+ ),
+ ('name', models.CharField(max_length=100, unique=True)),
+ ('slug', models.SlugField(max_length=100, unique=True)),
+ ('ordering', models.IntegerField(unique=True)),
+ ('action_required', models.BooleanField(default=True)),
+ ],
+ options={'ordering': ['ordering']},
+ ),
+ migrations.CreateModel(
+ name='Submission',
+ fields=[
+ (
+ 'id',
+ models.AutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name='ID',
+ ),
+ ),
+ ('msgid', models.CharField(max_length=255)),
+ (
+ 'date',
+ models.DateTimeField(default=datetime.datetime.utcnow),
+ ),
+ ('headers', models.TextField(blank=True)),
+ ('content', models.TextField(blank=True, null=True)),
+ ('name', models.CharField(max_length=255)),
+ (
+ 'project',
+ models.ForeignKey(
+ on_delete=django.db.models.deletion.CASCADE,
+ to='patchwork.Project',
+ ),
+ ),
+ (
+ 'submitter',
+ models.ForeignKey(
+ on_delete=django.db.models.deletion.CASCADE,
+ to='patchwork.Person',
+ ),
+ ),
+ ],
+ options={'ordering': ['date']},
+ bases=(patchwork.models.FilenameMixin, models.Model),
+ ),
+ migrations.CreateModel(
+ name='Tag',
+ fields=[
+ (
+ 'id',
+ models.AutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name='ID',
+ ),
+ ),
+ ('name', models.CharField(max_length=20)),
+ (
+ 'pattern',
+ models.CharField(
+ help_text=b'A simple regex to match the tag in the '
+ b'content of a message. Will be used with '
+ b'MULTILINE and IGNORECASE flags. eg. '
+ b'^Acked-by:',
+ max_length=50,
+ validators=[patchwork.models.validate_regex_compiles],
+ ),
+ ),
+ (
+ 'abbrev',
+ models.CharField(
+ help_text=b'Short (one-or-two letter) abbreviation '
+ b'for the tag, used in table column headers',
+ max_length=2,
+ unique=True,
+ ),
+ ),
+ (
+ 'show_column',
+ models.BooleanField(
+ default=True,
+ help_text=b"Show a column displaying this tag's count "
+ b"in the patch list view",
+ ),
+ ),
+ ],
+ options={'ordering': ['abbrev']},
+ ),
+ migrations.CreateModel(
+ name='CoverLetter',
+ fields=[
+ (
+ 'submission_ptr',
+ models.OneToOneField(
+ auto_created=True,
+ on_delete=django.db.models.deletion.CASCADE,
+ parent_link=True,
+ primary_key=True,
+ serialize=False,
+ to='patchwork.Submission',
+ ),
+ ),
+ ],
+ options={'abstract': False},
+ bases=('patchwork.submission',),
+ ),
+ migrations.CreateModel(
+ name='Patch',
+ fields=[
+ (
+ 'submission_ptr',
+ models.OneToOneField(
+ auto_created=True,
+ on_delete=django.db.models.deletion.CASCADE,
+ parent_link=True,
+ primary_key=True,
+ serialize=False,
+ to='patchwork.Submission',
+ ),
+ ),
+ ('diff', models.TextField(blank=True, null=True)),
+ (
+ 'commit_ref',
+ models.CharField(blank=True, max_length=255, null=True),
+ ),
+ (
+ 'pull_url',
+ models.CharField(blank=True, max_length=255, null=True),
+ ),
+ ('archived', models.BooleanField(default=False)),
+ (
+ 'hash',
+ patchwork.fields.HashField(
+ blank=True, max_length=40, null=True
+ ),
+ ),
+ (
+ 'number',
+ models.PositiveSmallIntegerField(
+ default=None,
+ help_text=b'The number assigned to this patch in the '
+ b'series',
+ null=True,
+ ),
+ ),
+ ],
+ options={
+ 'verbose_name_plural': 'Patches',
+ 'base_manager_name': 'objects',
+ },
+ bases=('patchwork.submission',),
+ ),
+ migrations.CreateModel(
+ name='UserProfile',
+ fields=[
+ (
+ 'id',
+ models.AutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name='ID',
+ ),
+ ),
+ (
+ 'send_email',
+ models.BooleanField(
+ default=False,
+ help_text=b'Selecting this option allows patchwork to '
+ b'send email on your behalf',
+ ),
+ ),
+ (
+ 'items_per_page',
+ models.PositiveIntegerField(
+ default=100,
+ help_text=b'Number of items to display per page',
+ ),
+ ),
+ (
+ 'show_ids',
+ models.BooleanField(
+ default=False,
+ help_text=b'Show click-to-copy patch IDs in the list '
+ b'view',
+ ),
+ ),
+ (
+ 'maintainer_projects',
+ models.ManyToManyField(
+ blank=True,
+ related_name='maintainer_project',
+ to='patchwork.Project',
+ ),
+ ),
+ (
+ 'user',
+ models.OneToOneField(
+ on_delete=django.db.models.deletion.CASCADE,
+ related_name='profile',
+ to=settings.AUTH_USER_MODEL,
+ ),
+ ),
+ ],
+ ),
+ migrations.CreateModel(
+ name='SeriesReference',
+ fields=[
+ (
+ 'id',
+ models.AutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name='ID',
+ ),
+ ),
+ ('msgid', models.CharField(max_length=255)),
+ (
+ 'project',
+ models.ForeignKey(
+ on_delete=django.db.models.deletion.CASCADE,
+ to='patchwork.Project',
+ ),
+ ),
+ (
+ 'series',
+ models.ForeignKey(
+ on_delete=django.db.models.deletion.CASCADE,
+ related_name='references',
+ related_query_name=b'reference',
+ to='patchwork.Series',
+ ),
+ ),
+ ],
+ ),
+ migrations.CreateModel(
+ name='PatchTag',
+ fields=[
+ (
+ 'id',
+ models.AutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name='ID',
+ ),
+ ),
+ ('count', models.IntegerField(default=1)),
+ (
+ 'tag',
+ models.ForeignKey(
+ on_delete=django.db.models.deletion.CASCADE,
+ to='patchwork.Tag',
+ ),
+ ),
+ ],
+ ),
+ migrations.CreateModel(
+ name='Event',
+ fields=[
+ (
+ 'id',
+ models.AutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name='ID',
+ ),
+ ),
+ (
+ 'category',
+ models.CharField(
+ choices=[
+ (b'cover-created', b'Cover Letter Created'),
+ (b'patch-created', b'Patch Created'),
+ (b'patch-completed', b'Patch Completed'),
+ (b'patch-state-changed', b'Patch State Changed'),
+ (b'patch-delegated', b'Patch Delegate Changed'),
+ (b'patch-relation-changed', b'Patch Relation Changed'), # noqa
+ (b'check-created', b'Check Created'),
+ (b'series-created', b'Series Created'),
+ (b'series-completed', b'Series Completed'),
+ ],
+ db_index=True,
+ help_text=b'The category of the event.',
+ max_length=25,
+ ),
+ ),
+ (
+ 'date',
+ models.DateTimeField(
+ default=datetime.datetime.utcnow,
+ help_text=b'The time this event was created.',
+ ),
+ ),
+ (
+ 'actor',
+ models.ForeignKey(
+ blank=True,
+ help_text=b'The user that caused/created this event.',
+ null=True,
+ on_delete=django.db.models.deletion.SET_NULL,
+ related_name='+',
+ to=settings.AUTH_USER_MODEL,
+ ),
+ ),
+ (
+ 'created_check',
+ models.ForeignKey(
+ blank=True,
+ null=True,
+ on_delete=django.db.models.deletion.CASCADE,
+ related_name='+',
+ to='patchwork.Check',
+ ),
+ ),
+ (
+ 'current_delegate',
+ models.ForeignKey(
+ blank=True,
+ null=True,
+ on_delete=django.db.models.deletion.CASCADE,
+ related_name='+',
+ to=settings.AUTH_USER_MODEL,
+ ),
+ ),
+ (
+ 'current_relation',
+ models.ForeignKey(
+ blank=True,
+ null=True,
+ on_delete=django.db.models.deletion.CASCADE,
+ related_name='+',
+ to='patchwork.PatchRelation',
+ ),
+ ),
+ (
+ 'current_state',
+ models.ForeignKey(
+ blank=True,
+ null=True,
+ on_delete=django.db.models.deletion.CASCADE,
+ related_name='+',
+ to='patchwork.State',
+ ),
+ ),
+ (
+ 'previous_delegate',
+ models.ForeignKey(
+ blank=True,
+ null=True,
+ on_delete=django.db.models.deletion.CASCADE,
+ related_name='+',
+ to=settings.AUTH_USER_MODEL,
+ ),
+ ),
+ (
+ 'previous_relation',
+ models.ForeignKey(
+ blank=True,
+ null=True,
+ on_delete=django.db.models.deletion.CASCADE,
+ related_name='+',
+ to='patchwork.PatchRelation',
+ ),
+ ),
+ (
+ 'previous_state',
+ models.ForeignKey(
+ blank=True,
+ null=True,
+ on_delete=django.db.models.deletion.CASCADE,
+ related_name='+',
+ to='patchwork.State',
+ ),
+ ),
+ (
+ 'project',
+ models.ForeignKey(
+ help_text=b'The project that the events belongs to.',
+ on_delete=django.db.models.deletion.CASCADE,
+ related_name='+',
+ to='patchwork.Project',
+ ),
+ ),
+ (
+ 'series',
+ models.ForeignKey(
+ blank=True,
+ help_text=b'The series that this event was created '
+ b'for.',
+ null=True,
+ on_delete=django.db.models.deletion.CASCADE,
+ related_name='+',
+ to='patchwork.Series',
+ ),
+ ),
+ ],
+ options={'ordering': ['-date']},
+ ),
+ migrations.CreateModel(
+ name='EmailConfirmation',
+ fields=[
+ (
+ 'id',
+ models.AutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name='ID',
+ ),
+ ),
+ (
+ 'type',
+ models.CharField(
+ choices=[
+ (b'userperson', b'User-Person association'),
+ (b'registration', b'Registration'),
+ (b'optout', b'Email opt-out'),
+ ],
+ max_length=20,
+ ),
+ ),
+ ('email', models.CharField(max_length=200)),
+ ('key', patchwork.fields.HashField(max_length=40)),
+ (
+ 'date',
+ models.DateTimeField(default=datetime.datetime.utcnow),
+ ),
+ ('active', models.BooleanField(default=True)),
+ (
+ 'user',
+ models.ForeignKey(
+ null=True,
+ on_delete=django.db.models.deletion.CASCADE,
+ to=settings.AUTH_USER_MODEL,
+ ),
+ ),
+ ],
+ ),
+ migrations.CreateModel(
+ name='DelegationRule',
+ fields=[
+ (
+ 'id',
+ models.AutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name='ID',
+ ),
+ ),
+ (
+ 'path',
+ models.CharField(
+ help_text=b'An fnmatch-style pattern to match '
+ b'filenames against.',
+ max_length=255,
+ ),
+ ),
+ (
+ 'priority',
+ models.IntegerField(
+ default=0,
+ help_text=b'The priority of the rule. Rules with a '
+ b'higher priority will override rules with '
+ b'lower priorities',
+ ),
+ ),
+ (
+ 'project',
+ models.ForeignKey(
+ on_delete=django.db.models.deletion.CASCADE,
+ to='patchwork.Project',
+ ),
+ ),
+ (
+ 'user',
+ models.ForeignKey(
+ help_text=b'A user to delegate the patch to.',
+ on_delete=django.db.models.deletion.CASCADE,
+ to=settings.AUTH_USER_MODEL,
+ ),
+ ),
+ ],
+ options={'ordering': ['-priority', 'path']},
+ ),
+ migrations.CreateModel(
+ name='Comment',
+ fields=[
+ (
+ 'id',
+ models.AutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name='ID',
+ ),
+ ),
+ ('msgid', models.CharField(max_length=255)),
+ (
+ 'date',
+ models.DateTimeField(default=datetime.datetime.utcnow),
+ ),
+ ('headers', models.TextField(blank=True)),
+ ('content', models.TextField(blank=True, null=True)),
+ (
+ 'submission',
+ models.ForeignKey(
+ on_delete=django.db.models.deletion.CASCADE,
+ related_name='comments',
+ related_query_name=b'comment',
+ to='patchwork.Submission',
+ ),
+ ),
+ (
+ 'submitter',
+ models.ForeignKey(
+ on_delete=django.db.models.deletion.CASCADE,
+ to='patchwork.Person',
+ ),
+ ),
+ ],
+ options={'ordering': ['date']},
+ ),
+ migrations.CreateModel(
+ name='BundlePatch',
+ fields=[
+ (
+ 'id',
+ models.AutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name='ID',
+ ),
+ ),
+ ('order', models.IntegerField()),
+ (
+ 'bundle',
+ models.ForeignKey(
+ on_delete=django.db.models.deletion.CASCADE,
+ to='patchwork.Bundle',
+ ),
+ ),
+ ],
+ options={'ordering': ['order']},
+ ),
+ migrations.AddField(
+ model_name='bundle',
+ name='project',
+ field=models.ForeignKey(
+ on_delete=django.db.models.deletion.CASCADE,
+ to='patchwork.Project',
+ ),
+ ),
+ migrations.CreateModel(
+ name='PatchChangeNotification',
+ fields=[
+ (
+ 'patch',
+ models.OneToOneField(
+ on_delete=django.db.models.deletion.CASCADE,
+ primary_key=True,
+ serialize=False,
+ to='patchwork.Patch',
+ ),
+ ),
+ (
+ 'last_modified',
+ models.DateTimeField(default=datetime.datetime.utcnow),
+ ),
+ ],
+ ),
+ migrations.AddIndex(
+ model_name='submission',
+ index=models.Index(
+ fields=['date', 'project', 'submitter', 'name'],
+ name='submission_covering_idx',
+ ),
+ ),
+ migrations.AlterUniqueTogether(
+ name='submission', unique_together={('msgid', 'project')},
+ ),
+ migrations.AlterUniqueTogether(
+ name='seriesreference', unique_together={('project', 'msgid')},
+ ),
+ migrations.AddField(
+ model_name='series',
+ name='cover_letter',
+ field=models.OneToOneField(
+ null=True,
+ on_delete=django.db.models.deletion.CASCADE,
+ related_name='series',
+ to='patchwork.CoverLetter',
+ ),
+ ),
+ migrations.AddField(
+ model_name='patchtag',
+ name='patch',
+ field=models.ForeignKey(
+ on_delete=django.db.models.deletion.CASCADE,
+ to='patchwork.Patch',
+ ),
+ ),
+ migrations.AddField(
+ model_name='patch',
+ name='delegate',
+ field=models.ForeignKey(
+ blank=True,
+ null=True,
+ on_delete=django.db.models.deletion.CASCADE,
+ to=settings.AUTH_USER_MODEL,
+ ),
+ ),
+ migrations.AddField(
+ model_name='patch',
+ name='patch_project',
+ field=models.ForeignKey(
+ on_delete=django.db.models.deletion.CASCADE,
+ to='patchwork.Project',
+ ),
+ ),
+ migrations.AddField(
+ model_name='patch',
+ name='related',
+ field=models.ForeignKey(
+ blank=True,
+ null=True,
+ on_delete=django.db.models.deletion.SET_NULL,
+ related_name='patches',
+ related_query_name='patch',
+ to='patchwork.PatchRelation',
+ ),
+ ),
+ migrations.AddField(
+ model_name='patch',
+ name='series',
+ field=models.ForeignKey(
+ blank=True,
+ null=True,
+ on_delete=django.db.models.deletion.CASCADE,
+ related_name='patches',
+ related_query_name='patch',
+ to='patchwork.Series',
+ ),
+ ),
+ migrations.AddField(
+ model_name='patch',
+ name='state',
+ field=models.ForeignKey(
+ null=True,
+ on_delete=django.db.models.deletion.CASCADE,
+ to='patchwork.State',
+ ),
+ ),
+ migrations.AddField(
+ model_name='patch',
+ name='tags',
+ field=models.ManyToManyField(
+ through='patchwork.PatchTag', to='patchwork.Tag'
+ ),
+ ),
+ migrations.AddField(
+ model_name='event',
+ name='cover',
+ field=models.ForeignKey(
+ blank=True,
+ help_text=b'The cover letter that this event was created for.',
+ null=True,
+ on_delete=django.db.models.deletion.CASCADE,
+ related_name='+',
+ to='patchwork.CoverLetter',
+ ),
+ ),
+ migrations.AddField(
+ model_name='event',
+ name='patch',
+ field=models.ForeignKey(
+ blank=True,
+ help_text=b'The patch that this event was created for.',
+ null=True,
+ on_delete=django.db.models.deletion.CASCADE,
+ related_name='+',
+ to='patchwork.Patch',
+ ),
+ ),
+ migrations.AlterUniqueTogether(
+ name='delegationrule', unique_together={('path', 'project')},
+ ),
+ migrations.AddIndex(
+ model_name='comment',
+ index=models.Index(
+ fields=['submission', 'date'], name='submission_date_idx'
+ ),
+ ),
+ migrations.AlterUniqueTogether(
+ name='comment', unique_together={('msgid', 'submission')},
+ ),
+ migrations.AddField(
+ model_name='check',
+ name='patch',
+ field=models.ForeignKey(
+ on_delete=django.db.models.deletion.CASCADE,
+ to='patchwork.Patch',
+ ),
+ ),
+ migrations.AddField(
+ model_name='bundlepatch',
+ name='patch',
+ field=models.ForeignKey(
+ on_delete=django.db.models.deletion.CASCADE,
+ to='patchwork.Patch',
+ ),
+ ),
+ migrations.AddField(
+ model_name='bundle',
+ name='patches',
+ field=models.ManyToManyField(
+ through='patchwork.BundlePatch', to='patchwork.Patch'
+ ),
+ ),
+ migrations.AlterUniqueTogether(
+ name='patchtag', unique_together={('patch', 'tag')},
+ ),
+ migrations.AddField(
+ model_name='patchchangenotification',
+ name='orig_state',
+ field=models.ForeignKey(
+ on_delete=django.db.models.deletion.CASCADE,
+ to='patchwork.State',
+ ),
+ ),
+ migrations.AddIndex(
+ model_name='patch',
+ index=models.Index(
+ fields=['archived', 'patch_project', 'state', 'delegate'],
+ name='patch_list_covering_idx',
+ ),
+ ),
+ migrations.AlterUniqueTogether(
+ name='patch', unique_together={('series', 'number')},
+ ),
+ migrations.AlterUniqueTogether(
+ name='bundlepatch', unique_together={('bundle', 'patch')},
+ ),
+ migrations.AlterUniqueTogether(
+ name='bundle', unique_together={('owner', 'name')},
+ ),
+ ]