public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
From: "Arthur Zamarin" <arthurzam@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] proj/pkgcore/pkgcheck:master commit in: src/pkgcheck/checks/, ...
Date: Mon, 30 Jan 2023 19:07:53 +0000 (UTC)	[thread overview]
Message-ID: <1674757490.088136ddc8008856eb6c3d3e432e15af8d704ba3.arthurzam@gentoo> (raw)

commit:     088136ddc8008856eb6c3d3e432e15af8d704ba3
Author:     Arthur Zamarin <arthurzam <AT> gentoo <DOT> org>
AuthorDate: Thu Jan 26 18:24:50 2023 +0000
Commit:     Arthur Zamarin <arthurzam <AT> gentoo <DOT> org>
CommitDate: Thu Jan 26 18:24:50 2023 +0000
URL:        https://gitweb.gentoo.org/proj/pkgcore/pkgcheck.git/commit/?id=088136dd

InvalidMetadataRestrict: check for invalid restricts in metadata.xml

Signed-off-by: Arthur Zamarin <arthurzam <AT> gentoo.org>

 src/pkgcheck/checks/metadata_xml.py                | 34 ++++++++++++++++++++++
 .../InvalidMetadataRestrict/expected.json          |  1 +
 .../InvalidMetadataRestrict-0.ebuild               |  8 +++++
 .../InvalidMetadataRestrict/metadata.xml           | 10 +++++++
 4 files changed, 53 insertions(+)

diff --git a/src/pkgcheck/checks/metadata_xml.py b/src/pkgcheck/checks/metadata_xml.py
index 0fcc31ac..adba0bdb 100644
--- a/src/pkgcheck/checks/metadata_xml.py
+++ b/src/pkgcheck/checks/metadata_xml.py
@@ -294,6 +294,19 @@ class InvalidRemoteID(results.PackageResult, results.Warning):
         )
 
 
+class InvalidMetadataRestrict(results.PackageResult, results.Error):
+    """Invalid package restrictions used in metadata.xml."""
+
+    def __init__(self, restrict: str, msg: str, **kwargs):
+        super().__init__(**kwargs)
+        self.restrict = restrict
+        self.msg = msg
+
+    @property
+    def desc(self):
+        return f"metadata.xml: invalid package restrictions {self.restrict!r}: {self.msg}"
+
+
 class _XmlBaseCheck(Check):
     """Base class for metadata.xml scans."""
 
@@ -433,6 +446,7 @@ class PackageMetadataXmlCheck(_XmlBaseCheck):
             NonexistentProjectMaintainer,
             WrongMaintainerType,
             InvalidRemoteID,
+            InvalidMetadataRestrict,
         ]
     )
 
@@ -534,6 +548,26 @@ class PackageMetadataXmlCheck(_XmlBaseCheck):
                 msg = "metadata.xml longdescription is too short"
                 yield RedundantLongDescription(msg, pkg=pkg)
 
+    def _check_restricts(self, pkg, loc, doc):
+        restricts = (
+            c.get("restrict")
+            for path in ("maintainer", "use/flag")
+            for c in doc.xpath(f"/pkgmetadata/{path}[string(@restrict)]")
+        )
+        for restrict_str in restricts:
+            try:
+                restrict = atom(restrict_str, eapi="0")
+                if restrict.key != pkg.key:
+                    yield InvalidMetadataRestrict(
+                        restrict_str, "references another package", pkg=pkg
+                    )
+                if restrict.use:
+                    yield InvalidMetadataRestrict(
+                        restrict_str, "USE-conditionals are prohibited", pkg=pkg
+                    )
+            except MalformedAtom as exc:
+                yield InvalidMetadataRestrict(restrict_str, exc, pkg=pkg)
+
     def _check_remote_id(self, pkg, loc, doc):
         for u in pkg.upstreams:
             # empty values are already reported as PkgMetadataXmlEmptyElement

diff --git a/testdata/data/repos/gentoo/PackageMetadataXmlCheck/InvalidMetadataRestrict/expected.json b/testdata/data/repos/gentoo/PackageMetadataXmlCheck/InvalidMetadataRestrict/expected.json
new file mode 100644
index 00000000..aca61195
--- /dev/null
+++ b/testdata/data/repos/gentoo/PackageMetadataXmlCheck/InvalidMetadataRestrict/expected.json
@@ -0,0 +1 @@
+{"__class__": "InvalidMetadataRestrict", "category": "PackageMetadataXmlCheck", "package": "InvalidMetadataRestrict", "restrict": "<=PackageMetadataXmlCheck2/InvalidMetadataRestrict-5", "msg": "references another package"}

diff --git a/testdata/repos/gentoo/PackageMetadataXmlCheck/InvalidMetadataRestrict/InvalidMetadataRestrict-0.ebuild b/testdata/repos/gentoo/PackageMetadataXmlCheck/InvalidMetadataRestrict/InvalidMetadataRestrict-0.ebuild
new file mode 100644
index 00000000..eb5d8297
--- /dev/null
+++ b/testdata/repos/gentoo/PackageMetadataXmlCheck/InvalidMetadataRestrict/InvalidMetadataRestrict-0.ebuild
@@ -0,0 +1,8 @@
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+DESCRIPTION="Package metadata.xml with invalid restrict"
+HOMEPAGE="https://github.com/pkgcore/pkgcheck"
+SLOT="0"
+LICENSE="BSD"
+IUSE="flag1"

diff --git a/testdata/repos/gentoo/PackageMetadataXmlCheck/InvalidMetadataRestrict/metadata.xml b/testdata/repos/gentoo/PackageMetadataXmlCheck/InvalidMetadataRestrict/metadata.xml
new file mode 100644
index 00000000..52cd01df
--- /dev/null
+++ b/testdata/repos/gentoo/PackageMetadataXmlCheck/InvalidMetadataRestrict/metadata.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+	<maintainer type="person" restrict="&lt;=PackageMetadataXmlCheck2/InvalidMetadataRestrict-5">
+		<email>random.gentoo.dev@gentoo.org</email>
+	</maintainer>
+	<use>
+		<flag name="flag1" restrict="&lt;=PackageMetadataXmlCheck/InvalidMetadataRestrict-5">Some explanation</flag>
+	</use>
+</pkgmetadata>


             reply	other threads:[~2023-01-30 19:07 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-01-30 19:07 Arthur Zamarin [this message]
  -- strict thread matches above, loose matches on Subject: below --
2024-11-22 21:35 [gentoo-commits] proj/pkgcore/pkgcheck:master commit in: src/pkgcheck/checks/, Michał Górny
2024-08-01 19:41 Arthur Zamarin
2023-09-23 15:10 Arthur Zamarin
2023-04-24 16:43 Arthur Zamarin
2023-02-03 13:03 Arthur Zamarin
2023-01-18  5:19 Arthur Zamarin
2023-01-18  5:19 Arthur Zamarin
2023-01-14 20:29 Arthur Zamarin
2023-01-02 20:19 Arthur Zamarin
2022-10-30 18:04 Arthur Zamarin
2022-10-13 17:06 Arthur Zamarin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1674757490.088136ddc8008856eb6c3d3e432e15af8d704ba3.arthurzam@gentoo \
    --to=arthurzam@gentoo.org \
    --cc=gentoo-commits@lists.gentoo.org \
    --cc=gentoo-dev@lists.gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox