Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

UnstableSrcUri: check for unstable SRC_URI #599

Merged
merged 1 commit into from
Sep 1, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 31 additions & 2 deletions src/pkgcheck/checks/metadata.py
Original file line number Diff line number Diff line change
Expand Up @@ -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.

Expand All @@ -1351,6 +1369,7 @@ class SrcUriCheck(Check):
UnknownMirror,
UnstatedIuse,
SrcUriFilenameDotPrefix,
UnstableSrcUri,
}
)

Expand All @@ -1363,13 +1382,18 @@ 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)$|"
r"^https?://github.com/.*/pull/[0-9]+.(patch|diff)$"
)

def feed(self, pkg):
lacks_uri = set()
# duplicate entries are possible.
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:
Expand All @@ -1395,8 +1419,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
Expand Down Expand Up @@ -1432,6 +1459,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):
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"__class__": "UnstableSrcUri", "category": "SrcUriCheck", "package": "UnstableSrcUri", "version": "0", "uris": ["https://github.com/pkgcore/pkgcheck/pull/1234.patch", "https://patch-diff.githubusercontent.com/raw/pkgcore/pkgcheck/pull/599.patch"]}
2 changes: 2 additions & 0 deletions testdata/repos/standalone/SrcUriCheck/UnstableSrcUri/Manifest
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
DIST 599.patch 100 BLAKE2B 10004cd9bebe912f9c8877c0f09df059130c2dc5c4da8c926f8df7945bcb7b255cdf810ce8cd16a987fb5bca3d1e71c088cd894968641db5dfae1c4c059df836 SHA512 15634eab4b9353b1fbb475c7bb9d2a97bd9db8421ea5190b5a84832930b34cb5b79f8c3da68a5eb8db334f06851ec129cc6611a371e47b7c5de7a615feec5e05
DIST 1234.patch 200 BLAKE2B 10204cd9bebe912f9c8877c0f09df059130c2dc5c4da8c926f8df7945bcb7b255cdf810ce8cd16a987fb5bca3d1e71c088cd894968641db5dfae1c4c059df836 SHA512 15633eab4b9353b1fbb475c7bb9d2a97bd9db8421ea5190b5a84832930b34cb5b79f8c3da68a5eb8db334f06851ec129cc6611a371e47b7c5de7a615feec5e05
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
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
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Will this check catch also the pre-redirect https://github.com/foo/bar/pull/1234.patch form? Perhaps we should do that as well.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It didn't catch in original version, updated and included in tests.

https://github.com/pkgcore/pkgcheck/pull/1234.patch
"
SLOT="0"
LICENSE="BSD"