[Patchew-devel] [PATCH v2 07/12] maintainer: Update watched queue when getting new message
Fam Zheng
fam at euphon.net
Wed Nov 28 14:35:00 UTC 2018
From: Fam Zheng <famz at redhat.com>
Git ResultUpdate is a good point to run the watched queries, because
maintainers fiels is populated here.
Signed-off-by: Fam Zheng <famz at redhat.com>
---
api/search.py | 6 ++++++
mods/maintainer.py | 19 +++++++++++++++++++
2 files changed, 25 insertions(+)
diff --git a/api/search.py b/api/search.py
index 3067235..a15d238 100644
--- a/api/search.py
+++ b/api/search.py
@@ -369,3 +369,9 @@ Search text keyword in the email message. Example:
self._last_keywords, q)
return queryset.filter(q)
+
+ def query_test_message(self, query, message):
+ queryset = Message.objects.filter(id=message.id)
+ terms = [x.strip() for x in query.split() if x.strip()]
+ return self.search_series(*terms, queryset=queryset).first()
+
diff --git a/mods/maintainer.py b/mods/maintainer.py
index 54738ec..60ed4c4 100644
--- a/mods/maintainer.py
+++ b/mods/maintainer.py
@@ -14,12 +14,17 @@ from django.http import Http404, HttpResponseRedirect, HttpResponseBadRequest
from django.urls import reverse
from mod import PatchewModule
from api.models import Message, Queue, WatchedQuery
+from api.search import SearchEngine
+from event import register_handler
class MaintainerModule(PatchewModule):
""" Project maintainer related tasks """
name = "maintainer"
+ def __init__(self):
+ register_handler("ResultUpdate", self.on_result_update)
+
def _add_to_queue(self, user, m, queue):
for x in [m] + list(m.get_patches()):
Queue.objects.get_or_create(user=user, message=x, name=queue)
@@ -29,6 +34,20 @@ class MaintainerModule(PatchewModule):
name=queue)
q.delete()
+ def _update_watch_queue(self, series):
+ se = SearchEngine()
+ for wq in WatchedQuery.objects.all():
+ if se.query_test_message(wq.query, series):
+ self._add_to_queue(wq.user, series, "watched")
+
+ def on_result_update(self, evt, obj, old_status, result):
+ if not isinstance(obj, Message):
+ return
+ if result == obj.git_result and result.status != result.PENDING:
+ # By the time of git result update we should have calculated
+ # maintainers so redo the watched queue
+ self._update_watch_queue(obj)
+
def _update_review_state(self, request, message_id, accept):
if not request.user.is_authenticated:
return HttpResponseForbidden()
--
2.17.2
More information about the Patchew-devel
mailing list