Gentoo Archives: gentoo-portage-dev

From: "Michał Górny" <mgorny@g.o>
To: gentoo-portage-dev@l.g.o
Cc: "Michał Górny" <mgorny@g.o>
Subject: [gentoo-portage-dev] [PATCH] repoman: Warn on = dependencies without * or revision
Date: Sat, 03 Mar 2018 21:32:25
Message-Id: 20180303213216.13574-1-mgorny@gentoo.org
1 Warn if the '=' package dependency operator is used along with pure
2 version with no revision specified. This means to catch a common mistake
3 of developers copying '=' from upstream dependency specification while
4 '~' operator would be more appropriate. This causes unintended depgraph
5 breakage when the dependencies are revbumped e.g. due to dependency
6 changes, or prevents people from upgrading.
7
8 The developers are given two suggestions: either to use '~' if any
9 revision is acceptable, or to explicitly specify '-r0' when they really
10 do accept -r0 only.
11
12 Bug: https://bugs.gentoo.org/649482
13 ---
14 repoman/pym/repoman/modules/scan/depend/_depend_checks.py | 9 +++++++++
15 repoman/pym/repoman/qa_data.py | 5 +++++
16 2 files changed, 14 insertions(+)
17
18 diff --git a/repoman/pym/repoman/modules/scan/depend/_depend_checks.py b/repoman/pym/repoman/modules/scan/depend/_depend_checks.py
19 index 11435f99e..3e34be5b3 100644
20 --- a/repoman/pym/repoman/modules/scan/depend/_depend_checks.py
21 +++ b/repoman/pym/repoman/modules/scan/depend/_depend_checks.py
22 @@ -153,6 +153,15 @@ def _depend_checks(ebuild, pkg, portdb, qatracker, repo_metadata):
23 qacat, "%s: %s uses the ~ operator"
24 " with a non-zero revision: '%s'" %
25 (ebuild.relative_path, mytype, atom))
26 + # plain =foo-1.2.3 without revision or *
27 + if atom.operator == "=" and '-r' not in atom.version:
28 + qacat = 'dependency.equalsversion'
29 + qatracker.add_error(
30 + qacat, "%s: %s uses the = operator with"
31 + " no revision: '%s'; if any revision is"
32 + " acceptable, use '~' instead; if only -r0"
33 + " then please append '-r0' to the dep" %
34 + (ebuild.relative_path, mytype, atom))
35
36 check_missingslot(atom, mytype, ebuild.eapi, portdb, qatracker,
37 ebuild.relative_path, ebuild.metadata)
38 diff --git a/repoman/pym/repoman/qa_data.py b/repoman/pym/repoman/qa_data.py
39 index c6abe1760..7d56ffedc 100644
40 --- a/repoman/pym/repoman/qa_data.py
41 +++ b/repoman/pym/repoman/qa_data.py
42 @@ -51,6 +51,10 @@ qahelp = {
43 "dependency.badtilde": (
44 "Uses the ~ dep operator with a non-zero revision part,"
45 " which is useless (the revision is ignored)"),
46 + "dependency.equalsversion": (
47 + "Suspicious =-dependency with a specific version and no rev. "
48 + "Please either use ~ if any revision is acceptable, or append "
49 + "-r0 to silence the warning."),
50 "dependency.missingslot": (
51 "RDEPEND matches more than one SLOT but does not specify a "
52 "slot and/or use the := or :* slot operator"),
53 @@ -258,6 +262,7 @@ qawarnings = set((
54 "dependency.badinexp",
55 "dependency.badmaskedinexp",
56 "dependency.badtilde",
57 + "dependency.equalsversion",
58 "dependency.missingslot",
59 "dependency.perlcore",
60 "DESCRIPTION.toolong",
61 --
62 2.16.2

Replies