[v2,3/4] tagging: use tag infrastructure to create tags in mboxes

Message ID 20180917170512.24405-2-vkabatov@redhat.com
State New
Headers show
Series
  • [v2,1/4] Rework tagging infrastructure
Related show

Commit Message

Veronika Kabatova Sept. 17, 2018, 5:05 p.m.
From: Veronika Kabatova <vkabatov@redhat.com>

Signed-off-by: Veronika Kabatova <vkabatov@redhat.com>
---
 patchwork/models.py                           | 12 ------------
 patchwork/tests/test_mboxviews.py             | 19 ++++++++++++++++---
 patchwork/views/utils.py                      |  9 ++++++---
 .../tagging-rework-9907e9dc3f835566.yaml      |  3 +++
 4 files changed, 25 insertions(+), 18 deletions(-)

Patch

diff --git a/patchwork/models.py b/patchwork/models.py
index 5caf7641..a7c75e63 100644
--- a/patchwork/models.py
+++ b/patchwork/models.py
@@ -284,18 +284,6 @@  class EmailMixin(models.Model):
     submitter = models.ForeignKey(Person, on_delete=models.CASCADE)
     content = models.TextField(null=True, blank=True)
 
-    response_re = re.compile(
-        r'^(Tested|Reviewed|Acked|Signed-off|Nacked|Reported)-by:.*$',
-        re.M | re.I)
-
-    @property
-    def patch_responses(self):
-        if not self.content:
-            return ''
-
-        return ''.join([match.group(0) + '\n' for match in
-                        self.response_re.finditer(self.content)])
-
     def _extract_tags(self, tags):
         found_tags = {}
         if not self.content:
diff --git a/patchwork/tests/test_mboxviews.py b/patchwork/tests/test_mboxviews.py
index 9d941bf8..f7be7b0e 100644
--- a/patchwork/tests/test_mboxviews.py
+++ b/patchwork/tests/test_mboxviews.py
@@ -36,9 +36,10 @@  from patchwork.tests.utils import create_user
 
 
 class MboxPatchResponseTest(TestCase):
-
     """Test that the mbox view appends the Acked-by from a patch comment."""
 
+    fixtures = ['default_tags']
+
     def setUp(self):
         self.project = create_project()
         self.person = create_person()
@@ -53,7 +54,9 @@  class MboxPatchResponseTest(TestCase):
             submitter=self.person,
             content='comment 2 text\nAcked-by: 2\n')
         response = self.client.get(reverse('patch-mbox', args=[patch.id]))
-        self.assertContains(response, 'Acked-by: 1\nAcked-by: 2\n')
+        # Can't guarantee the order in which the tags are returned
+        self.assertContains(response, 'Acked-by: 1\n')
+        self.assertContains(response, 'Acked-by: 2\n')
 
     def test_patch_utf8_nbsp(self):
         patch = create_patch(
@@ -73,6 +76,8 @@  class MboxPatchSplitResponseTest(TestCase):
     """Test that the mbox view appends the Acked-by from a patch comment,
        and places it before an '---' update line."""
 
+    fixtures = ['default_tags']
+
     def setUp(self):
         project = create_project()
         self.person = create_person()
@@ -88,7 +93,15 @@  class MboxPatchSplitResponseTest(TestCase):
 
     def test_patch_response(self):
         response = self.client.get(reverse('patch-mbox', args=[self.patch.id]))
-        self.assertContains(response, 'Acked-by: 1\nAcked-by: 2\n')
+        # Can't guarantee the order in which the tags are returned
+        self.assertContains(response, 'Acked-by: 1\n')
+        self.assertContains(response, 'Acked-by: 2\n')
+        # We need to check for 3 Acked-by strings, one comes from the body of
+        # the patch and the other two are the tags themselves.
+        self.assertRegex(
+            response.content.decode(),
+            '(?s).*Acked-by: 1\n.*Acked-by.*Acked-by.*---\nupdate.*'
+        )
 
 
 class MboxHeaderTest(TestCase):
diff --git a/patchwork/views/utils.py b/patchwork/views/utils.py
index 4644c621..0586265b 100644
--- a/patchwork/views/utils.py
+++ b/patchwork/views/utils.py
@@ -27,11 +27,13 @@  import email.utils
 import re
 
 from django.conf import settings
+from django.db.models import Q
 from django.http import Http404
 from django.utils import six
 
 from patchwork.models import Comment
 from patchwork.models import Patch
+from patchwork.models import SubmissionTag
 
 if settings.ENABLE_REST_API:
     from rest_framework.authtoken.models import Token
@@ -74,9 +76,10 @@  def _submission_to_mbox(submission):
     else:
         postscript = ''
 
-    # TODO(stephenfin): Make this use the tags infrastructure
-    for comment in Comment.objects.filter(submission=submission):
-        body += comment.patch_responses
+    for (tagname, value) in SubmissionTag.objects.filter(
+            Q(submission=submission) | Q(series=submission.series)
+    ).values_list('tag__name', 'value').distinct():
+        body += '%s: %s\n' % (tagname, value)
 
     if postscript:
         body += '---\n' + postscript + '\n'
diff --git a/releasenotes/notes/tagging-rework-9907e9dc3f835566.yaml b/releasenotes/notes/tagging-rework-9907e9dc3f835566.yaml
index fdfd39f0..7fd64184 100644
--- a/releasenotes/notes/tagging-rework-9907e9dc3f835566.yaml
+++ b/releasenotes/notes/tagging-rework-9907e9dc3f835566.yaml
@@ -24,3 +24,6 @@  upgrade:
     the actual tag data will be created by the command, to make the migration  
     itself faster. Please note that this will take a lot of time and based on  
     the size of the data in question, might be useful to run in batches.  
+other:
+  - |
+    The tagging feature is now used to populate tags in mbox files.