On 2/24/22 15:25, DJ Delorie wrote: > > This small patch stitches in "comment added" events into the event > queue. > > Signed-off-by: DJ Delorie <d...@redhat.com> > Closes: #424
I'm not going to comment on the technical parts of DJ's patch, but I will add some context here. I filed issue #424 because it is a feature I want to help improve the patch review workflow for glibc, though I am looking to support adoption across the whole GNU Toolchain. I really want the ability to trigger *further* CI/CD based on the content of replies to patches. This will eventually allow bots to trigger further CI/CD scenarios when reviewers reply to patches. Thank you for your review :-) > diff --git a/patchwork/api/event.py b/patchwork/api/event.py > index 71f9593..45b3f4f 100644 > --- a/patchwork/api/event.py > +++ b/patchwork/api/event.py > @@ -13,6 +13,7 @@ from rest_framework.serializers import SlugRelatedField > from patchwork.api.embedded import CheckSerializer > from patchwork.api.embedded import CoverSerializer > from patchwork.api.embedded import PatchSerializer > +from patchwork.api.comment import PatchCommentSerializer > from patchwork.api.embedded import ProjectSerializer > from patchwork.api.embedded import SeriesSerializer > from patchwork.api.embedded import UserSerializer > @@ -31,6 +32,7 @@ class EventSerializer(ModelSerializer): > current_state = SlugRelatedField(slug_field='slug', read_only=True) > previous_delegate = UserSerializer() > current_delegate = UserSerializer() > + comment_added = PatchCommentSerializer() > created_check = SerializerMethodField() > created_check = CheckSerializer() > previous_relation = SerializerMethodField() > @@ -40,6 +42,7 @@ class EventSerializer(ModelSerializer): > Event.CATEGORY_COVER_CREATED: ['cover'], > Event.CATEGORY_PATCH_CREATED: ['patch'], > Event.CATEGORY_PATCH_COMPLETED: ['patch', 'series'], > + Event.CATEGORY_PATCH_COMMENT_ADDED: ['patch', 'comment_added'], > Event.CATEGORY_PATCH_STATE_CHANGED: ['patch', 'previous_state', > 'current_state'], > Event.CATEGORY_PATCH_DELEGATED: ['patch', 'previous_delegate', > @@ -80,7 +83,7 @@ class EventSerializer(ModelSerializer): > 'id', 'category', 'project', 'date', 'actor', 'patch', > 'series', 'cover', 'previous_state', 'current_state', > 'previous_delegate', 'current_delegate', 'created_check', > - 'previous_relation', 'current_relation', > + 'previous_relation', 'current_relation', 'comment_added', > ) > read_only_fields = fields > versioned_fields = { > @@ -102,4 +105,4 @@ class EventList(ListAPIView): > .prefetch_related('project', 'patch__project', 'series__project', > 'cover', 'previous_state', 'current_state', > 'previous_delegate', 'current_delegate', > - 'created_check') > + 'created_check', 'comment_added') > diff --git a/patchwork/migrations/0046_patch_comment_events.py > b/patchwork/migrations/0046_patch_comment_events.py > new file mode 100644 > index 0000000..6d1a798 > --- /dev/null > +++ b/patchwork/migrations/0046_patch_comment_events.py > @@ -0,0 +1,24 @@ > +# Generated by Django 3.1.13 on 2022-02-25 07:01 > + > +from django.db import migrations, models > +import django.db.models.deletion > + > + > +class Migration(migrations.Migration): > + > + dependencies = [ > + ('patchwork', '0045_addressed_fields'), > + ] > + > + operations = [ > + migrations.AddField( > + model_name='event', > + name='comment_added', > + field=models.ForeignKey(blank=True, null=True, > on_delete=django.db.models.deletion.CASCADE, related_name='+', > to='patchwork.patchcomment'), > + ), > + migrations.AlterField( > + model_name='event', > + name='category', > + field=models.CharField(choices=[('cover-created', 'Cover Letter > Created'), ('patch-created', 'Patch Created'), ('patch-completed', 'Patch > Completed'), ('patch-comment-added', 'Patch Comment Added'), > ('patch-state-changed', 'Patch State Changed'), ('patch-delegated', 'Patch > Delegate Changed'), ('patch-relation-changed', 'Patch Relation Changed'), > ('check-created', 'Check Created'), ('series-created', 'Series Created'), > ('series-completed', 'Series Completed')], db_index=True, help_text='The > category of the event.', max_length=25), > + ), > + ] > diff --git a/patchwork/models.py b/patchwork/models.py > index 6304b34..74229de 100644 > --- a/patchwork/models.py > +++ b/patchwork/models.py > @@ -1022,6 +1022,7 @@ class Event(models.Model): > CATEGORY_COVER_CREATED = 'cover-created' > CATEGORY_PATCH_CREATED = 'patch-created' > CATEGORY_PATCH_COMPLETED = 'patch-completed' > + CATEGORY_PATCH_COMMENT_ADDED = 'patch-comment-added' > CATEGORY_PATCH_STATE_CHANGED = 'patch-state-changed' > CATEGORY_PATCH_DELEGATED = 'patch-delegated' > CATEGORY_PATCH_RELATION_CHANGED = 'patch-relation-changed' > @@ -1032,6 +1033,7 @@ class Event(models.Model): > (CATEGORY_COVER_CREATED, 'Cover Letter Created'), > (CATEGORY_PATCH_CREATED, 'Patch Created'), > (CATEGORY_PATCH_COMPLETED, 'Patch Completed'), > + (CATEGORY_PATCH_COMMENT_ADDED, 'Patch Comment Added'), > (CATEGORY_PATCH_STATE_CHANGED, 'Patch State Changed'), > (CATEGORY_PATCH_DELEGATED, 'Patch Delegate Changed'), > (CATEGORY_PATCH_RELATION_CHANGED, 'Patch Relation Changed'), > @@ -1113,6 +1115,12 @@ class Event(models.Model): > Check, related_name='+', null=True, blank=True, > on_delete=models.CASCADE) > > + # fields for 'patch-comment-added' events > + > + comment_added = models.ForeignKey( > + PatchComment, related_name='+', null=True, blank=True, > + on_delete=models.CASCADE) > + > # TODO(stephenfin): Validate that the correct fields are being set by way > # of a 'clean' method > > diff --git a/patchwork/signals.py b/patchwork/signals.py > index dc08129..4697993 100644 > --- a/patchwork/signals.py > +++ b/patchwork/signals.py > @@ -15,7 +15,7 @@ from patchwork.models import Event > from patchwork.models import Patch > from patchwork.models import PatchChangeNotification > from patchwork.models import Series > - > +from patchwork.models import PatchComment > > @receiver(pre_save, sender=Patch) > def patch_change_callback(sender, instance, raw, **kwargs): > @@ -53,6 +53,18 @@ def patch_change_callback(sender, instance, raw, **kwargs): > notification.last_modified = dt.utcnow() > notification.save() > > +@receiver(post_save, sender=PatchComment) > +def create_patch_comment_created_callback(sender, instance, raw, **kwargs): > + > + def create_event(comment): > + return Event.objects.create( > + category=Event.CATEGORY_PATCH_COMMENT_ADDED, > + project=comment.patch.project, > + patch=comment.patch, > + comment_added=comment) > + > + create_event(instance) > + > > @receiver(post_save, sender=Cover) > def create_cover_created_event(sender, instance, created, raw, **kwargs): > -- Cheers, Carlos. _______________________________________________ Patchwork mailing list Patchwork@lists.ozlabs.org https://lists.ozlabs.org/listinfo/patchwork