From nobody Mon Feb 9 23:03:25 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 205.139.110.61 as permitted sender) client-ip=205.139.110.61; envelope-from=patchew-devel-bounces@redhat.com; helo=us-smtp-delivery-1.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 205.139.110.61 as permitted sender) smtp.mailfrom=patchew-devel-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1579187406; cv=none; d=zohomail.com; s=zohoarc; b=UBI7ZCXafjaFPsiYNgLgbqoA8zVN1JD3LdVeWhxUOzd6AcmNNOInbxVPJBIoLsQo+Adruhk35qBtSczFUxS2aheIdF2cgmTeJuLguIVs5f/EoUgfM2S//FV56A43ojBefQZFeEVwn45c6Q6LlRlmyoFpXiS4PfCkPFGleYx3nm8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1579187406; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=q5hwvUdUXAWypwkOQor5LM4+kKtZbpgJlhRh7XJgacQ=; b=IVai/Q+FxJpuuHQWgd+2pUu0guI3jNv/EXkimmUmkBCD0cwuBIoVl7HR872GpANwNeDF5BTE3GroYuhBlUIiHk/4dd+MYBPfsCvmcc5utdXxgXq910prRDJelbvnGyw7j9/tLV0QeaIU+jOvyvghIWdvgdvqhpDAcNj1YQQ19zw= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 205.139.110.61 as permitted sender) smtp.mailfrom=patchew-devel-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from us-smtp-delivery-1.mimecast.com (us-smtp-2.mimecast.com [205.139.110.61]) by mx.zohomail.com with SMTPS id 1579187406169305.7874020733062; Thu, 16 Jan 2020 07:10:06 -0800 (PST) Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-206-cNQB-QmDMzqPWRxiIAhJvw-1; Thu, 16 Jan 2020 10:09:36 -0500 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 11A531800D48; Thu, 16 Jan 2020 15:09:27 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 0607260F82; Thu, 16 Jan 2020 15:09:27 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id EE2BA18034EA; Thu, 16 Jan 2020 15:09:26 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 00GF9NbJ024662 for ; Thu, 16 Jan 2020 10:09:23 -0500 Received: by smtp.corp.redhat.com (Postfix) id ECAA08432E; Thu, 16 Jan 2020 15:09:23 +0000 (UTC) Received: from donizetti.redhat.com (ovpn-112-61.ams2.redhat.com [10.36.112.61]) by smtp.corp.redhat.com (Postfix) with ESMTP id DF08684338; Thu, 16 Jan 2020 15:09:22 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1579187402; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=q5hwvUdUXAWypwkOQor5LM4+kKtZbpgJlhRh7XJgacQ=; b=DGxrgpF25USsPYNK6ljWnRpuri/G1HQ7rgcIQp4RUGetfrbR55v+iTnQobPwY5QmJqlcAE 7RdI1Oo0z3xBEA2tHxXPgl0H4oISWTy4Ub6NbWmGhuPVdxvPh/rFaNiEmYJRMFnweGfsn1 BcX0+BUvX7tUoMeROSLRCNDs4AvsfZ8= From: Paolo Bonzini To: patchew-devel@redhat.com Date: Thu, 16 Jan 2020 16:09:09 +0100 Message-Id: <20200116150909.21388-10-pbonzini@redhat.com> In-Reply-To: <20200116150909.21388-1-pbonzini@redhat.com> References: <20200116150909.21388-1-pbonzini@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-loop: patchew-devel@redhat.com Cc: Kevin Wolf Subject: [Patchew-devel] [PATCH 9/9] process Supersedes tags X-BeenThere: patchew-devel@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Patchew development and discussion list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: patchew-devel-bounces@redhat.com Errors-To: patchew-devel-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-MC-Unique: cNQB-QmDMzqPWRxiIAhJvw-1 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) Content-Type: text/plain; charset="utf-8" A Supersedes tags puts two series in the same topic, even if they have different subjects. For this to work, do not compare versions unless the stripped subject is the same, and always treat already-obsolete series as older. Suggested-by: Kevin Wolf Signed-off-by: Paolo Bonzini Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- api/models.py | 12 +++++- mods/tags.py | 44 +++++++++++++++----- tests/data/0031-supersedes-embedded.mbox.gz | Bin 0 -> 5342 bytes tests/data/0032-supersedes-separate.mbox.gz | Bin 0 -> 6268 bytes tests/test_tags.py | 18 ++++++++ 5 files changed, 63 insertions(+), 11 deletions(-) create mode 100644 tests/data/0031-supersedes-embedded.mbox.gz create mode 100644 tests/data/0032-supersedes-separate.mbox.gz diff --git a/api/models.py b/api/models.py index 6fd04fa..adceee4 100644 --- a/api/models.py +++ b/api/models.py @@ -562,6 +562,12 @@ class Topic(models.Model): "Message", on_delete=3Dmodels.SET_NULL, null=3DTrue, related_name= =3D"+" ) =20 + def merge_with(self, superseded): + if self =3D=3D superseded: + return + Message.objects.filter(topic=3Dself).update(topic=3Dsuperseded) + self.delete() + =20 class Message(models.Model): """ Patch email message """ @@ -647,7 +653,11 @@ class Message(models.Model): =20 # If no --- line, tags go at the end as there's no better place for tag in sorted(tags): - if tag not in old_tags and not tag.startswith("Based-on"): + if ( + tag not in old_tags + and not tag.startswith("Based-on") + and not tag.startswith("Supersedes") + ): yield tag if need_minusminusminus: yield line diff --git a/mods/tags.py b/mods/tags.py index ec2cc49..2c3a503 100644 --- a/mods/tags.py +++ b/mods/tags.py @@ -17,6 +17,7 @@ import rest_framework =20 REV_BY_PREFIX =3D "Reviewed-by:" BASED_ON_PREFIX =3D "Based-on:" +SUPERSEDES_PREFIX =3D "Supersedes:" =20 _default_config =3D """ [default] @@ -24,7 +25,7 @@ tags =3D Tested-by, Reported-by, Acked-by, Suggested-by =20 """ =20 -BUILT_IN_TAGS =3D [REV_BY_PREFIX, BASED_ON_PREFIX] +BUILT_IN_TAGS =3D [REV_BY_PREFIX, BASED_ON_PREFIX, SUPERSEDES_PREFIX] =20 =20 class SeriesTagsModule(PatchewModule): @@ -67,7 +68,7 @@ series cover letter, patch mail body and their replies. =20 def update_tags(self, s): old =3D s.tags - new =3D self.look_for_tags(s) + new =3D self.look_for_tags(s, s) if set(old) !=3D set(new): s.tags =3D list(set(new)) s.save() @@ -79,9 +80,16 @@ series cover letter, patch mail body and their replies. return =20 def newer_than(m1, m2): - if m1.version > m2.version: - return m1.date >=3D m2.date - if m1.version < m2.version: + if m1 =3D=3D m2: + return False + if m1.stripped_subject =3D=3D m2.stripped_subject: + if m1.version > m2.version: + return m1.date >=3D m2.date + if m1.version < m2.version: + return False + if m2.is_obsolete and not m1.is_obsolete: + return True + if m1.is_obsolete and not m2.is_obsolete: return False return m1.date > m2.date =20 @@ -129,21 +137,37 @@ series cover letter, patch mail body and their replie= s. m.is_obsolete =3D True m.save() =20 - def parse_message_tags(self, m): + def process_supersedes(self, series, tag): + old =3D Message.objects.find_series_from_tag(tag, series.project) + if old: + # the newer_than test does not work when the subject changes + assert old.topic + series.topic =3D old.topic + if old.topic.latest =3D=3D old: + old.topic.latest =3D series + old.topic.save() + old.is_obsolete =3D True + old.save() + series.topic.merge_with(old.topic) + + def parse_message_tags(self, series, m): r =3D [] for l in m.get_body().splitlines(): + line =3D l.lower() for p in self.get_tag_prefixes(): - if l.lower().startswith(p.lower()): + if line.startswith(p.lower()): + if line.startswith("supersedes:"): + self.process_supersedes(series, l) r.append(l) return r =20 - def look_for_tags(self, m): + def look_for_tags(self, series, m): # Incorporate tags from non-patch replies - r =3D self.parse_message_tags(m) + r =3D self.parse_message_tags(series, m) for x in m.get_replies(): if x.is_patch: continue - r +=3D self.look_for_tags(x) + r +=3D self.look_for_tags(series, x) return r =20 def prepare_message_hook(self, request, message, detailed): diff --git a/tests/data/0031-supersedes-embedded.mbox.gz b/tests/data/0031-= supersedes-embedded.mbox.gz new file mode 100644 index 0000000000000000000000000000000000000000..a32bfe494f6f3c5d961103d03bb= 402be937c024a GIT binary patch literal 5342 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 literal 0 HcmV?d00001 diff --git a/tests/data/0032-supersedes-separate.mbox.gz b/tests/data/0032-= supersedes-separate.mbox.gz new file mode 100644 index 0000000000000000000000000000000000000000..3cfc5ffa5625fee1cfac15b598c= 7904d757151eb GIT binary patch literal 6268 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 literal 0 HcmV?d00001 diff --git a/tests/test_tags.py b/tests/test_tags.py index 38ded37..73f0c18 100755 --- a/tests/test_tags.py +++ b/tests/test_tags.py @@ -127,6 +127,24 @@ class ImportTest(PatchewTestCase): "20160628014747.20971-3-famz@redhat.com", ) =20 + def test_supersedes_embedded(self): + self.cli_login() + self.cli_import("0031-supersedes-embedded.mbox.gz") + self.cli_logout() + self.do_test_obsoleted_by( + "20200110173215.3865-1-quintela@redhat.com", + "20200114092606.1761-1-quintela@redhat.com", + ) + + def test_supersedes_separate(self): + self.cli_login() + self.cli_import("0032-supersedes-separate.mbox.gz") + self.cli_logout() + self.do_test_obsoleted_by( + "20191128104129.250206-1-slp@redhat.com", + "20200108143138.129909-1-slp@redhat.com", + ) + =20 if __name__ =3D=3D "__main__": main() --=20 2.21.0 _______________________________________________ Patchew-devel mailing list Patchew-devel@redhat.com https://www.redhat.com/mailman/listinfo/patchew-devel