Gentoo Archives: gentoo-commits

From: Arthur Zamarin <arthurzam@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/pkgcore/pkgcheck:master commit in: src/pkgcheck/checks/, ...
Date: Mon, 30 Jan 2023 19:07:57
Message-Id: 1674757490.088136ddc8008856eb6c3d3e432e15af8d704ba3.arthurzam@gentoo
1 commit: 088136ddc8008856eb6c3d3e432e15af8d704ba3
2 Author: Arthur Zamarin <arthurzam <AT> gentoo <DOT> org>
3 AuthorDate: Thu Jan 26 18:24:50 2023 +0000
4 Commit: Arthur Zamarin <arthurzam <AT> gentoo <DOT> org>
5 CommitDate: Thu Jan 26 18:24:50 2023 +0000
6 URL: https://gitweb.gentoo.org/proj/pkgcore/pkgcheck.git/commit/?id=088136dd
7
8 InvalidMetadataRestrict: check for invalid restricts in metadata.xml
9
10 Signed-off-by: Arthur Zamarin <arthurzam <AT> gentoo.org>
11
12 src/pkgcheck/checks/metadata_xml.py | 34 ++++++++++++++++++++++
13 .../InvalidMetadataRestrict/expected.json | 1 +
14 .../InvalidMetadataRestrict-0.ebuild | 8 +++++
15 .../InvalidMetadataRestrict/metadata.xml | 10 +++++++
16 4 files changed, 53 insertions(+)
17
18 diff --git a/src/pkgcheck/checks/metadata_xml.py b/src/pkgcheck/checks/metadata_xml.py
19 index 0fcc31ac..adba0bdb 100644
20 --- a/src/pkgcheck/checks/metadata_xml.py
21 +++ b/src/pkgcheck/checks/metadata_xml.py
22 @@ -294,6 +294,19 @@ class InvalidRemoteID(results.PackageResult, results.Warning):
23 )
24
25
26 +class InvalidMetadataRestrict(results.PackageResult, results.Error):
27 + """Invalid package restrictions used in metadata.xml."""
28 +
29 + def __init__(self, restrict: str, msg: str, **kwargs):
30 + super().__init__(**kwargs)
31 + self.restrict = restrict
32 + self.msg = msg
33 +
34 + @property
35 + def desc(self):
36 + return f"metadata.xml: invalid package restrictions {self.restrict!r}: {self.msg}"
37 +
38 +
39 class _XmlBaseCheck(Check):
40 """Base class for metadata.xml scans."""
41
42 @@ -433,6 +446,7 @@ class PackageMetadataXmlCheck(_XmlBaseCheck):
43 NonexistentProjectMaintainer,
44 WrongMaintainerType,
45 InvalidRemoteID,
46 + InvalidMetadataRestrict,
47 ]
48 )
49
50 @@ -534,6 +548,26 @@ class PackageMetadataXmlCheck(_XmlBaseCheck):
51 msg = "metadata.xml longdescription is too short"
52 yield RedundantLongDescription(msg, pkg=pkg)
53
54 + def _check_restricts(self, pkg, loc, doc):
55 + restricts = (
56 + c.get("restrict")
57 + for path in ("maintainer", "use/flag")
58 + for c in doc.xpath(f"/pkgmetadata/{path}[string(@restrict)]")
59 + )
60 + for restrict_str in restricts:
61 + try:
62 + restrict = atom(restrict_str, eapi="0")
63 + if restrict.key != pkg.key:
64 + yield InvalidMetadataRestrict(
65 + restrict_str, "references another package", pkg=pkg
66 + )
67 + if restrict.use:
68 + yield InvalidMetadataRestrict(
69 + restrict_str, "USE-conditionals are prohibited", pkg=pkg
70 + )
71 + except MalformedAtom as exc:
72 + yield InvalidMetadataRestrict(restrict_str, exc, pkg=pkg)
73 +
74 def _check_remote_id(self, pkg, loc, doc):
75 for u in pkg.upstreams:
76 # empty values are already reported as PkgMetadataXmlEmptyElement
77
78 diff --git a/testdata/data/repos/gentoo/PackageMetadataXmlCheck/InvalidMetadataRestrict/expected.json b/testdata/data/repos/gentoo/PackageMetadataXmlCheck/InvalidMetadataRestrict/expected.json
79 new file mode 100644
80 index 00000000..aca61195
81 --- /dev/null
82 +++ b/testdata/data/repos/gentoo/PackageMetadataXmlCheck/InvalidMetadataRestrict/expected.json
83 @@ -0,0 +1 @@
84 +{"__class__": "InvalidMetadataRestrict", "category": "PackageMetadataXmlCheck", "package": "InvalidMetadataRestrict", "restrict": "<=PackageMetadataXmlCheck2/InvalidMetadataRestrict-5", "msg": "references another package"}
85
86 diff --git a/testdata/repos/gentoo/PackageMetadataXmlCheck/InvalidMetadataRestrict/InvalidMetadataRestrict-0.ebuild b/testdata/repos/gentoo/PackageMetadataXmlCheck/InvalidMetadataRestrict/InvalidMetadataRestrict-0.ebuild
87 new file mode 100644
88 index 00000000..eb5d8297
89 --- /dev/null
90 +++ b/testdata/repos/gentoo/PackageMetadataXmlCheck/InvalidMetadataRestrict/InvalidMetadataRestrict-0.ebuild
91 @@ -0,0 +1,8 @@
92 +# Copyright 1999-2023 Gentoo Authors
93 +# Distributed under the terms of the GNU General Public License v2
94 +
95 +DESCRIPTION="Package metadata.xml with invalid restrict"
96 +HOMEPAGE="https://github.com/pkgcore/pkgcheck"
97 +SLOT="0"
98 +LICENSE="BSD"
99 +IUSE="flag1"
100
101 diff --git a/testdata/repos/gentoo/PackageMetadataXmlCheck/InvalidMetadataRestrict/metadata.xml b/testdata/repos/gentoo/PackageMetadataXmlCheck/InvalidMetadataRestrict/metadata.xml
102 new file mode 100644
103 index 00000000..52cd01df
104 --- /dev/null
105 +++ b/testdata/repos/gentoo/PackageMetadataXmlCheck/InvalidMetadataRestrict/metadata.xml
106 @@ -0,0 +1,10 @@
107 +<?xml version="1.0" encoding="UTF-8"?>
108 +<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
109 +<pkgmetadata>
110 + <maintainer type="person" restrict="&lt;=PackageMetadataXmlCheck2/InvalidMetadataRestrict-5">
111 + <email>random.gentoo.dev@g.o</email>
112 + </maintainer>
113 + <use>
114 + <flag name="flag1" restrict="&lt;=PackageMetadataXmlCheck/InvalidMetadataRestrict-5">Some explanation</flag>
115 + </use>
116 +</pkgmetadata>