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="<=PackageMetadataXmlCheck2/InvalidMetadataRestrict-5">
+ <email>random.gentoo.dev@gentoo.org</email>
+ </maintainer>
+ <use>
+ <flag name="flag1" restrict="<=PackageMetadataXmlCheck/InvalidMetadataRestrict-5">Some explanation</flag>
+ </use>
+</pkgmetadata>
next 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