[PATCH 2/2] project: Provide a setting to only consider git send-email patches
Damien Lespiau
damien.lespiau at intel.com
Sat Oct 10 04:06:20 AEDT 2015
I've seen quite a few false positive, ie. mail with diffs in them
(because people use diffs to illustrate an idea) were treated as
patches.
One goal I have is to lower patchwork maintenance (ie limit the number
of fixes we need to do by hand). That's a small improvement towards that
direction.
Signed-off-by: Damien Lespiau <damien.lespiau at intel.com>
---
patchwork/bin/parsemail.py | 5 ++-
.../migrations/0004_project_git_send_email_only.py | 19 +++++++++++
patchwork/models.py | 1 +
patchwork/tests/test_patchparser.py | 38 ++++++++++++++++++++++
4 files changed, 62 insertions(+), 1 deletion(-)
create mode 100644 patchwork/migrations/0004_project_git_send_email_only.py
diff --git a/patchwork/bin/parsemail.py b/patchwork/bin/parsemail.py
index bba55c0..ba0b148 100755
--- a/patchwork/bin/parsemail.py
+++ b/patchwork/bin/parsemail.py
@@ -321,8 +321,11 @@ def find_content(project, mail):
is_root = refs == []
is_cover_letter = is_root and x == 0
is_patch = patchbuf is not None
+ is_git_send_email = mail.get('X-Mailer', '').startswith('git-send-email ')
- if pullurl or is_patch:
+ drop_patch = project.git_send_email_only and not is_git_send_email
+
+ if pullurl or (is_patch and not drop_patch):
ret.patch_order = x or 1
ret.patch = Patch(name = name, pull_url = pullurl, content = patchbuf,
date = mail_date(mail), headers = mail_headers(mail))
diff --git a/patchwork/migrations/0004_project_git_send_email_only.py b/patchwork/migrations/0004_project_git_send_email_only.py
new file mode 100644
index 0000000..5dc928a
--- /dev/null
+++ b/patchwork/migrations/0004_project_git_send_email_only.py
@@ -0,0 +1,19 @@
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
+
+from django.db import models, migrations
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('patchwork', '0003_series'),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='project',
+ name='git_send_email_only',
+ field=models.BooleanField(default=False),
+ ),
+ ]
diff --git a/patchwork/models.py b/patchwork/models.py
index aea0fd0..5df08f9 100644
--- a/patchwork/models.py
+++ b/patchwork/models.py
@@ -65,6 +65,7 @@ class Project(models.Model):
webscm_url = models.CharField(max_length=2000, blank=True)
send_notifications = models.BooleanField(default=False)
use_tags = models.BooleanField(default=True)
+ git_send_email_only = models.BooleanField(default=False)
def __unicode__(self):
return self.name
diff --git a/patchwork/tests/test_patchparser.py b/patchwork/tests/test_patchparser.py
index 8905396..61fdd5a 100644
--- a/patchwork/tests/test_patchparser.py
+++ b/patchwork/tests/test_patchparser.py
@@ -595,6 +595,44 @@ class InitialPatchStateTest(MailFromPatchTest):
parse_mail(email)
self._assertState(self.default_state)
+class GitSendEmailTest(MailFromPatchTest):
+ def _assertNPatches(self, n):
+ self.assertEquals(Patch.objects.count(), n)
+
+ def testSettingOffGitSendEmail(self):
+ """git_send_email_only is false (default value) and email has been sent
+ with git send-email"""
+ email = self.get_email()
+ email['X-Mailer'] = 'git-send-email 1.8.3.1'
+ parse_mail(email)
+ self._assertNPatches(1)
+
+ def testSettingOffNoGitSendEmail(self):
+ """git_send_email_only is false (default value) and email has not been
+ sent with git send-email"""
+ email = self.get_email()
+ parse_mail(email)
+ self._assertNPatches(1)
+
+ def testSettingOnGitSendEmail(self):
+ """git_send_email_only is true and email has been sent with
+ git send-email"""
+ self.p1.git_send_email_only = True
+ self.p1.save()
+ email = self.get_email()
+ email['X-Mailer'] = 'git-send-email 1.8.3.1'
+ parse_mail(email)
+ self._assertNPatches(1)
+
+ def testSettingOnNoGitSendEmail(self):
+ """git_send_email_only is true and email has been not sent with
+ git send-email"""
+ self.p1.git_send_email_only = True
+ self.p1.save()
+ email = self.get_email()
+ parse_mail(email)
+ self._assertNPatches(0)
+
class ParseInitialTagsTest(PatchTest):
patch_filename = '0001-add-line.patch'
test_comment = ('test comment\n\n' +
--
2.1.0
More information about the Patchwork
mailing list