From 68adf7c8a63c3c72448d82387141025113405a7b Mon Sep 17 00:00:00 2001 From: Arthur Zamarin Date: Fri, 7 Jul 2023 17:48:30 +0300 Subject: [PATCH] UnstableSrcUri: check for unstable SRC_URI Resolves: https://github.com/pkgcore/pkgcheck/issues/510 Signed-off-by: Arthur Zamarin --- src/pkgcheck/checks/metadata.py | 32 +++++++++++++++++-- .../SrcUriCheck/UnstableSrcUri/expected.json | 1 + .../SrcUriCheck/UnstableSrcUri/Manifest | 1 + .../UnstableSrcUri/UnstableSrcUri-0.ebuild | 7 ++++ 4 files changed, 39 insertions(+), 2 deletions(-) create mode 100644 testdata/data/repos/standalone/SrcUriCheck/UnstableSrcUri/expected.json create mode 100644 testdata/repos/standalone/SrcUriCheck/UnstableSrcUri/Manifest create mode 100644 testdata/repos/standalone/SrcUriCheck/UnstableSrcUri/UnstableSrcUri-0.ebuild diff --git a/src/pkgcheck/checks/metadata.py b/src/pkgcheck/checks/metadata.py index 7f0a072b1..49e8af053 100644 --- a/src/pkgcheck/checks/metadata.py +++ b/src/pkgcheck/checks/metadata.py @@ -1332,6 +1332,24 @@ def desc(self): return f"SRC_URI filename {self.filename!r} starts with a dot" +class UnstableSrcUri(results.VersionResult, results.Warning): + """SRC_URI uses unstable URIs. + + This is usually a mistake, as those URIs are not guaranteed to be unchanged + which might cause checksum mismatch. + """ + + def __init__(self, uris, **kwargs): + super().__init__(**kwargs) + self.uris = tuple(uris) + + @property + def desc(self): + s = pluralism(self.uris) + uris = " ".join(self.uris) + return f"unstable SRC_URI{s}: [ {uris} ]" + + class SrcUriCheck(Check): """SRC_URI related checks. @@ -1351,6 +1369,7 @@ class SrcUriCheck(Check): UnknownMirror, UnstatedIuse, SrcUriFilenameDotPrefix, + UnstableSrcUri, } ) @@ -1363,6 +1382,9 @@ def __init__(self, *args, use_addon): r"https?://(github\.com/.*?/.*?/archive/.+\.zip|" r"gitlab\.com/.*?/.*?/-/archive/.+\.zip)" ) + self.unstable_uris = re.compile( + r"^https?://patch-diff.githubusercontent.com/raw/.*/pull/[0-9]+.(patch|diff)$" + ) def feed(self, pkg): lacks_uri = set() @@ -1370,6 +1392,7 @@ def feed(self, pkg): seen = set() bad_filenames = set() tarball_available = set() + unstable_uris = set() report_uris = LogMap("pkgcore.log.logger.info", partial(RedundantUriRename, pkg)) with LogReports(report_uris) as log_reports: @@ -1395,8 +1418,11 @@ def feed(self, pkg): (m, sub_uri) for m, sub_uri in mirrors if isinstance(m, unknown_mirror) ] for mirror, sub_uri in unknown_mirrors: - uri = f"{mirror}/{sub_uri}" - yield UnknownMirror(mirror.mirror_name, uri, pkg=pkg) + yield UnknownMirror(mirror.mirror_name, uri=f"{mirror}/{sub_uri}", pkg=pkg) + + for uri in f_inst.uri: + if self.unstable_uris.match(uri): + unstable_uris.add(uri) # Check for unspecific filenames of the form ${PN}.ext, ${PV}.ext, # and v${PV}.ext as well as archives named using only the raw git @@ -1432,6 +1458,8 @@ def feed(self, pkg): yield BadFilename(sorted(bad_filenames), pkg=pkg) if tarball_available: yield TarballAvailable(sorted(tarball_available), pkg=pkg) + if unstable_uris: + yield UnstableSrcUri(sorted(unstable_uris), pkg=pkg) class BadDescription(results.VersionResult, results.Style): diff --git a/testdata/data/repos/standalone/SrcUriCheck/UnstableSrcUri/expected.json b/testdata/data/repos/standalone/SrcUriCheck/UnstableSrcUri/expected.json new file mode 100644 index 000000000..679e1b9d9 --- /dev/null +++ b/testdata/data/repos/standalone/SrcUriCheck/UnstableSrcUri/expected.json @@ -0,0 +1 @@ +{"__class__": "UnstableSrcUri", "category": "SrcUriCheck", "package": "UnstableSrcUri", "version": "0", "uris": ["https://patch-diff.githubusercontent.com/raw/pkgcore/pkgcheck/pull/599.patch"]} diff --git a/testdata/repos/standalone/SrcUriCheck/UnstableSrcUri/Manifest b/testdata/repos/standalone/SrcUriCheck/UnstableSrcUri/Manifest new file mode 100644 index 000000000..1393e4137 --- /dev/null +++ b/testdata/repos/standalone/SrcUriCheck/UnstableSrcUri/Manifest @@ -0,0 +1 @@ +DIST 599.patch 100 BLAKE2B 10004cd9bebe912f9c8877c0f09df059130c2dc5c4da8c926f8df7945bcb7b255cdf810ce8cd16a987fb5bca3d1e71c088cd894968641db5dfae1c4c059df836 SHA512 15634eab4b9353b1fbb475c7bb9d2a97bd9db8421ea5190b5a84832930b34cb5b79f8c3da68a5eb8db334f06851ec129cc6611a371e47b7c5de7a615feec5e05 diff --git a/testdata/repos/standalone/SrcUriCheck/UnstableSrcUri/UnstableSrcUri-0.ebuild b/testdata/repos/standalone/SrcUriCheck/UnstableSrcUri/UnstableSrcUri-0.ebuild new file mode 100644 index 000000000..324f94a81 --- /dev/null +++ b/testdata/repos/standalone/SrcUriCheck/UnstableSrcUri/UnstableSrcUri-0.ebuild @@ -0,0 +1,7 @@ +DESCRIPTION="Ebuild with unstable SRC_URI" +HOMEPAGE="https://github.com/pkgcore/pkgcheck" +SRC_URI=" + https://patch-diff.githubusercontent.com/raw/pkgcore/pkgcheck/pull/599.patch +" +SLOT="0" +LICENSE="BSD"