[Patchew-devel] [PATCH] import: Fix mailing list matching

Fam Zheng posted 1 patch 2 years, 1 month ago
api/models.py                                   |   6 +++++-
mbox.py                                         |   2 ++
tests/data/0036-patch-with-no-to-header.mbox.gz | Bin 0 -> 4783 bytes
tests/test_import.py                            |  11 +++++++++++
4 files changed, 18 insertions(+), 1 deletion(-)
create mode 100644 tests/data/0036-patch-with-no-to-header.mbox.gz
[Patchew-devel] [PATCH] import: Fix mailing list matching
Posted by Fam Zheng 2 years, 1 month ago
If the mbox has no To: field, we have an empty addr in the returned
address list. This is later used in Project.recognizes() as:

    if addr in self.mailing_list:
        ...

Remove the empty result.

Also preprocess the mailing_list before matching.

Reported-by: Mat Martineau <mathew.j.martineau@linux.intel.com>
Signed-off-by: Fam Zheng <fam.zheng@bytedance.com>
---
 api/models.py                                   |   6 +++++-
 mbox.py                                         |   2 ++
 tests/data/0036-patch-with-no-to-header.mbox.gz | Bin 0 -> 4783 bytes
 tests/test_import.py                            |  11 +++++++++++
 4 files changed, 18 insertions(+), 1 deletion(-)
 create mode 100644 tests/data/0036-patch-with-no-to-header.mbox.gz

diff --git a/api/models.py b/api/models.py
index 5879466..18392b1 100644
--- a/api/models.py
+++ b/api/models.py
@@ -265,11 +265,15 @@ class Project(models.Model):
             return True
         return False
 
+    def get_mailing_lists(self):
+        r = self.mailing_list.split()
+        return [x.rstrip(',;') for x in r]
+
     def recognizes(self, m):
         """Test if @m is considered a message in this project"""
         addr_ok = False
         for name, addr in m.get_to() + m.get_cc():
-            if addr in self.mailing_list:
+            if addr in self.get_mailing_lists():
                 addr_ok = True
                 break
         if addr_ok:
diff --git a/mbox.py b/mbox.py
index 20abca1..bcd3600 100644
--- a/mbox.py
+++ b/mbox.py
@@ -115,6 +115,8 @@ class MboxMessage(object):
         addrs = email.utils.getaddresses(f)
         for name, addr in addrs:
             name = name or addr
+            if not addr:
+                continue
             if text:
                 ret.append(_addr_fmt_text(name, addr))
             else:
diff --git a/tests/data/0036-patch-with-no-to-header.mbox.gz b/tests/data/0036-patch-with-no-to-header.mbox.gz
new file mode 100644
index 0000000000000000000000000000000000000000..32a33915a9317151845bec80e3349b7de8064ac5
GIT binary patch
literal 4783
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
JuGBa;006i%C-VRR

literal 0
HcmV?d00001

diff --git a/tests/test_import.py b/tests/test_import.py
index af7830b..ec1ebc4 100755
--- a/tests/test_import.py
+++ b/tests/test_import.py
@@ -86,6 +86,17 @@ class ImportTest(PatchewTestCase):
         )
         self.check_cli(["search", "project:Libvirt-python"], stdout=subj)
 
+    def test_import_no_to_header(self):
+        self.add_project(
+            "Linux",
+            "linux-kernel@vger.kernel.org",
+            "https://github.com/torvalds/linux",
+        )
+        self.cli_import("0036-patch-with-no-to-header.mbox.gz")
+        a = "[PATCH] fpga: microsemi-spi: add Microsemi FPGA manager"
+        self.check_cli(["search", "project:Linux"], stdout=a.strip())
+        self.check_cli(["search", "project:QEMU"], stdout='')
+
 
 class UnprivilegedImportTest(ImportTest):
     def setUp(self):
-- 
2.25.1

_______________________________________________
Patchew-devel mailing list
Patchew-devel@redhat.com
https://listman.redhat.com/mailman/listinfo/patchew-devel

Re: [Patchew-devel] [PATCH] import: Fix mailing list matching
Posted by Paolo Bonzini 2 years, 1 month ago
On 2/15/22 11:36, Fam Zheng wrote:
> If the mbox has no To: field, we have an empty addr in the returned
> address list. This is later used in Project.recognizes() as:
> 
>      if addr in self.mailing_list:
>          ...
> 
> Remove the empty result.
> 
> Also preprocess the mailing_list before matching.
> 
> Reported-by: Mat Martineau <mathew.j.martineau@linux.intel.com>
> Signed-off-by: Fam Zheng <fam.zheng@bytedance.com>

Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>

> ---
>   api/models.py                                   |   6 +++++-
>   mbox.py                                         |   2 ++
>   tests/data/0036-patch-with-no-to-header.mbox.gz | Bin 0 -> 4783 bytes
>   tests/test_import.py                            |  11 +++++++++++
>   4 files changed, 18 insertions(+), 1 deletion(-)
>   create mode 100644 tests/data/0036-patch-with-no-to-header.mbox.gz
> 
> diff --git a/api/models.py b/api/models.py
> index 5879466..18392b1 100644
> --- a/api/models.py
> +++ b/api/models.py
> @@ -265,11 +265,15 @@ class Project(models.Model):
>               return True
>           return False
>   
> +    def get_mailing_lists(self):
> +        r = self.mailing_list.split()
> +        return [x.rstrip(',;') for x in r]
> +
>       def recognizes(self, m):
>           """Test if @m is considered a message in this project"""
>           addr_ok = False
>           for name, addr in m.get_to() + m.get_cc():
> -            if addr in self.mailing_list:
> +            if addr in self.get_mailing_lists():
>                   addr_ok = True
>                   break
>           if addr_ok:
> diff --git a/mbox.py b/mbox.py
> index 20abca1..bcd3600 100644
> --- a/mbox.py
> +++ b/mbox.py
> @@ -115,6 +115,8 @@ class MboxMessage(object):
>           addrs = email.utils.getaddresses(f)
>           for name, addr in addrs:
>               name = name or addr
> +            if not addr:
> +                continue
>               if text:
>                   ret.append(_addr_fmt_text(name, addr))
>               else:
> diff --git a/tests/data/0036-patch-with-no-to-header.mbox.gz b/tests/data/0036-patch-with-no-to-header.mbox.gz
> new file mode 100644
> index 0000000000000000000000000000000000000000..32a33915a9317151845bec80e3349b7de8064ac5
> GIT binary patch
> literal 4783
> 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
> JuGBa;006i%C-VRR
> 
> literal 0
> HcmV?d00001
> 
> diff --git a/tests/test_import.py b/tests/test_import.py
> index af7830b..ec1ebc4 100755
> --- a/tests/test_import.py
> +++ b/tests/test_import.py
> @@ -86,6 +86,17 @@ class ImportTest(PatchewTestCase):
>           )
>           self.check_cli(["search", "project:Libvirt-python"], stdout=subj)
>   
> +    def test_import_no_to_header(self):
> +        self.add_project(
> +            "Linux",
> +            "linux-kernel@vger.kernel.org",
> +            "https://github.com/torvalds/linux",
> +        )
> +        self.cli_import("0036-patch-with-no-to-header.mbox.gz")
> +        a = "[PATCH] fpga: microsemi-spi: add Microsemi FPGA manager"
> +        self.check_cli(["search", "project:Linux"], stdout=a.strip())
> +        self.check_cli(["search", "project:QEMU"], stdout='')
> +
>   
>   class UnprivilegedImportTest(ImportTest):
>       def setUp(self):

_______________________________________________
Patchew-devel mailing list
Patchew-devel@redhat.com
https://listman.redhat.com/mailman/listinfo/patchew-devel