[PATCH v2 2/3] models: Merge patch and first comment

Finucane, Stephen stephen.finucane at intel.com
Wed Mar 16 20:45:24 AEDT 2016


On 15 Mar 16:01, Andy Doan wrote:
> On 03/13/2016 03:50 PM, Stephen Finucane wrote:
> >At the moment a patch is split into two model entries: a Patch and a
> >linked Comment. The original rationale for this was that a Patch is
> >really a sub-class of Comment. A comment is a record of the text
> >content of an incoming mail, while a patch is that, plus the patch
> >content too. Hence the separation and a one-to-one relationship when a
> >patch is present. However, this decision was made before Django added
> >support for model inheritance and is no longer necessary. This change
> >flatten the models in preparation for some email subclassing work. This
> >is achieved by copying over the non-duplicated fields from the Comment
> >to the linked Patch, then deleting the Comment.
> >
> >The migrations are broken into two steps: a schema migration and a data
> >migration, per the recommendations of the Django documentation [1]. SQL
> >migration scripts, where necessary, will need to be created manually as
> >there appears to be no way to do this in a way that is
> >RDBMS-independant [2][3].
> >
> >[1] https://docs.djangoproject.com/en/1.9/topics/migrations/#data-migrations
> >[2] https://stackoverflow.com/q/6856849/
> >[3] https://stackoverflow.com/q/224732/
> >
> >Signed-off-by: Stephen Finucane <stephen.finucane at intel.com>
> 
> Reviewed-by: Andy Doan <andy.doan at linaro.org>

Merged, with below comments taken into account.

> Not sure where or if its worth mentioning, but this migration is
> taking me around 30 minutes on my instance. So announcing a
> maintenance window is probably advisable.

Good point. I'll address this in a follow up patch, along with changes
to the CHANGELOG.

> >diff --git a/patchwork/migrations/0007_move_comment_content_to_patch_content.py b/patchwork/migrations/0007_move_comment_content_to_patch_content.py
> 
> >+def uncopy_comment_field(apps, schema_editor):
> >+    Comment = apps.get_model('patchwork', 'Comment')
> 
> Comment is an unused variable.

Done.

> >+def remove_duplicate_comments(apps, schema_editor):
> >+    Comment = apps.get_model('patchwork', 'Comment')
> >+    Patch = apps.get_model('patchwork', 'Patch')
> >+
> >+    for patch in Patch.objects.all():
> >+        comment = Comment.objects.get(patch=patch, msgid=patch.msgid)
> >+        comment.delete()
> 
> You need a try/except block here, eg:
> 
>         try:
>             # when available, this can only return one entry due to the
>             # unique_together constraint
>             Comment.objects.get(patch=patch, msgid=patch.msgid).delete()
>         except Comment.DoesNotExist:
>             # though there's no requirement to actually have a comment
>             continue

Done.

> I see no need for a v3 once you've fixed this.

Also added the 'diff' field to the 'defer' in 'view/__init__.py', which
should boost performance slightly.

Cheers,
Stephen


More information about the Patchwork mailing list