commit: e48c3ef4f88df8906f10ee1ba3fe20f45bacdd2a Author: Arthur Zamarin <arthurzam <AT> gentoo <DOT> org> AuthorDate: Sat Jun 24 07:50:59 2023 +0000 Commit: Arthur Zamarin <arthurzam <AT> gentoo <DOT> org> CommitDate: Sat Jun 24 14:57:20 2023 +0000 URL: https://gitweb.gentoo.org/proj/pkgcore/pkgcheck.git/commit/?id=e48c3ef4
SrcUriFilenameDotPrefix: new check for SRC_URI filenames with dot prefix Resolves: https://github.com/pkgcore/pkgcheck/issues/585 Signed-off-by: Arthur Zamarin <arthurzam <AT> gentoo.org> src/pkgcheck/checks/metadata.py | 26 +++++++++++++++++++--- .../SrcUriFilenameDotPrefix/expected.json | 1 + .../SrcUriCheck/SrcUriFilenameDotPrefix/fix.patch | 17 ++++++++++++++ .../SrcUriCheck/SrcUriFilenameDotPrefix/Manifest | 1 + .../SrcUriFilenameDotPrefix-0.ebuild | 9 ++++++++ 5 files changed, 51 insertions(+), 3 deletions(-) diff --git a/src/pkgcheck/checks/metadata.py b/src/pkgcheck/checks/metadata.py index 8a6c5ba5..7f0a072b 100644 --- a/src/pkgcheck/checks/metadata.py +++ b/src/pkgcheck/checks/metadata.py @@ -1315,6 +1315,23 @@ class InvalidSrcUri(results.MetadataError, results.VersionResult): attr = "fetchables" +class SrcUriFilenameDotPrefix(results.VersionResult, results.Error): + """SRC_URI's filename starts with a dot. + + This is usually a mistake, as referencing empty variable before the dot. + Also those files might appear as hidden in many file system viewers. + Rename the filename using the ``->`` operator. + """ + + def __init__(self, filename, **kwargs): + super().__init__(**kwargs) + self.filename = filename + + @property + def desc(self): + return f"SRC_URI filename {self.filename!r} starts with a dot" + + class SrcUriCheck(Check): """SRC_URI related checks. @@ -1324,7 +1341,7 @@ class SrcUriCheck(Check): required_addons = (addons.UseAddon,) known_results = frozenset( - [ + { BadFilename, BadProtocol, MissingUri, @@ -1333,10 +1350,11 @@ class SrcUriCheck(Check): TarballAvailable, UnknownMirror, UnstatedIuse, - ] + SrcUriFilenameDotPrefix, + } ) - valid_protos = frozenset(["http", "https", "ftp"]) + valid_protos = frozenset({"http", "https", "ftp"}) def __init__(self, *args, use_addon): super().__init__(*args) @@ -1389,6 +1407,8 @@ class SrcUriCheck(Check): bad_filenames_re = rf"^({PN}|v?{PV}|[0-9a-f]{{40}}){exts}$" if re.match(bad_filenames_re, f_inst.filename): bad_filenames.add(f_inst.filename) + elif f_inst.filename.startswith("."): + yield SrcUriFilenameDotPrefix(pkg=pkg, filename=f_inst.filename) restricts = set().union(*(x.vals for x in restrictions if not x.negate)) if not f_inst.uri and "fetch" not in pkg.restrict.evaluate_depset(restricts): diff --git a/testdata/data/repos/standalone/SrcUriCheck/SrcUriFilenameDotPrefix/expected.json b/testdata/data/repos/standalone/SrcUriCheck/SrcUriFilenameDotPrefix/expected.json new file mode 100644 index 00000000..9b9a5224 --- /dev/null +++ b/testdata/data/repos/standalone/SrcUriCheck/SrcUriFilenameDotPrefix/expected.json @@ -0,0 +1 @@ +{"__class__": "SrcUriFilenameDotPrefix", "category": "SrcUriCheck", "package": "SrcUriFilenameDotPrefix", "version": "0", "filename": ".gh.tar.gz"} diff --git a/testdata/data/repos/standalone/SrcUriCheck/SrcUriFilenameDotPrefix/fix.patch b/testdata/data/repos/standalone/SrcUriCheck/SrcUriFilenameDotPrefix/fix.patch new file mode 100644 index 00000000..233616f6 --- /dev/null +++ b/testdata/data/repos/standalone/SrcUriCheck/SrcUriFilenameDotPrefix/fix.patch @@ -0,0 +1,17 @@ +diff -Naur standalone/SrcUriCheck/SrcUriFilenameDotPrefix/Manifest fixed/SrcUriCheck//SrcUriFilenameDotPrefix/Manifest +--- standalone/SrcUriCheck/SrcUriFilenameDotPrefix/Manifest ++++ fixed/SrcUriCheck/SrcUriFilenameDotPrefix/Manifest +@@ -1 +1 @@ +-DIST .gh.tar.gz 153310 BLAKE2B abcd4cd9bebe912f9c8877c0f09df059130c2dc5c4da8c926f8df7995bcb7b255cdf810ce8cd16a957fb5bca3d1e71c088cd894968641db5dfae1c4c059df638 SHA512 86ff9e1c4b9353b1fbb475c7bb9d2a97bd9db8421ea5190b5a84832930b34cb5b79f8c3da68a5eb8db334f06851ec129cc6611a371e47b7c5de7a615feec5e05 ++DIST SrcUriFilenameDotPrefix-v0.gh.tar.gz 153310 BLAKE2B abcd4cd9bebe912f9c8877c0f09df059130c2dc5c4da8c926f8df7995bcb7b255cdf810ce8cd16a957fb5bca3d1e71c088cd894968641db5dfae1c4c059df638 SHA512 86ff9e1c4b9353b1fbb475c7bb9d2a97bd9db8421ea5190b5a84832930b34cb5b79f8c3da68a5eb8db334f06851ec129cc6611a371e47b7c5de7a615feec5e05 +diff --git standalone/SrcUriCheck/SrcUriFilenameDotPrefix/SrcUriFilenameDotPrefix-0.ebuild fixed/SrcUriCheck/SrcUriFilenameDotPrefix/SrcUriFilenameDotPrefix-0.ebuild +--- standalone/SrcUriCheck/SrcUriFilenameDotPrefix/SrcUriFilenameDotPrefix-0.ebuild ++++ fixed/SrcUriCheck/SrcUriFilenameDotPrefix/SrcUriFilenameDotPrefix-0.ebuild +@@ -4,6 +4,6 @@ MY_P="${PN}-v${PV}" + + DESCRIPTION="Ebuild with empty var in SRC_URI" + HOMEPAGE="https://github.com/pkgcore/pkgcheck" +-SRC_URI="https://github.com/pkgcore/pkgcheck/${MY_P}.tar.gz -> ${MYP}.gh.tar.gz" ++SRC_URI="https://github.com/pkgcore/pkgcheck/${MY_P}.tar.gz -> ${MY_P}.gh.tar.gz" + SLOT="0" + LICENSE="BSD" diff --git a/testdata/repos/standalone/SrcUriCheck/SrcUriFilenameDotPrefix/Manifest b/testdata/repos/standalone/SrcUriCheck/SrcUriFilenameDotPrefix/Manifest new file mode 100644 index 00000000..3ec1af9a --- /dev/null +++ b/testdata/repos/standalone/SrcUriCheck/SrcUriFilenameDotPrefix/Manifest @@ -0,0 +1 @@ +DIST .gh.tar.gz 153310 BLAKE2B abcd4cd9bebe912f9c8877c0f09df059130c2dc5c4da8c926f8df7995bcb7b255cdf810ce8cd16a957fb5bca3d1e71c088cd894968641db5dfae1c4c059df638 SHA512 86ff9e1c4b9353b1fbb475c7bb9d2a97bd9db8421ea5190b5a84832930b34cb5b79f8c3da68a5eb8db334f06851ec129cc6611a371e47b7c5de7a615feec5e05 diff --git a/testdata/repos/standalone/SrcUriCheck/SrcUriFilenameDotPrefix/SrcUriFilenameDotPrefix-0.ebuild b/testdata/repos/standalone/SrcUriCheck/SrcUriFilenameDotPrefix/SrcUriFilenameDotPrefix-0.ebuild new file mode 100644 index 00000000..f961c3ad --- /dev/null +++ b/testdata/repos/standalone/SrcUriCheck/SrcUriFilenameDotPrefix/SrcUriFilenameDotPrefix-0.ebuild @@ -0,0 +1,9 @@ +EAPI=7 + +MY_P="${PN}-v${PV}" + +DESCRIPTION="Ebuild with empty var in SRC_URI" +HOMEPAGE="https://github.com/pkgcore/pkgcheck" +SRC_URI="https://github.com/pkgcore/pkgcheck/${MY_P}.tar.gz -> ${MYP}.gh.tar.gz" +SLOT="0" +LICENSE="BSD"
