Skip to content

Commit 832b93e

Browse files
authored
Merge pull request rpm-software-management#1485 from rpm-software-management/fix-check-multiple-dependencies
TagsCheck: Reorder is_devel and is_source parameters
2 parents 6264e09 + 90309ab commit 832b93e

4 files changed

Lines changed: 80 additions & 2 deletions

File tree

rpmlint/checks/TagsCheck.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -296,14 +296,14 @@ def _check_no_epoch_in_tags(self, pkg):
296296
self.output.add_info('W', pkg, f'no-epoch-in-{tag}',
297297
Pkg.formatRequire(*x))
298298

299-
def _check_multiple_dependencies(self, pkg, deps, is_source, is_devel):
299+
def _check_multiple_dependencies(self, pkg, deps, is_devel, is_source):
300300
"""Contain multiple check, no-epoch-in-dependency, invalid-dependency,
301301
invalid-build-requires, devel-dependency, explicit-devel-dependency
302302
303303
Args:
304304
deps: Variable to find PreReq and Requires tag
305-
is_source: Variable to check if a package is of source type
306305
is_devel: The param to check if a package name ends with *-devel
306+
is_source: Variable to check if a package is of source type
307307
308308
Returns:
309309
Output info to STDOUT

rpmlint/pkg.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -973,6 +973,23 @@ def add_header(self, header):
973973

974974
self.req_names = [x[0] for x in self.requires + self.prereq]
975975

976+
def add_dependency(self, dep):
977+
name, flags, version = parse_deps(dep)[0]
978+
version = versionToString(version)
979+
self.header[rpm.RPMTAG_REQUIRESNAME].append(name)
980+
self.header[rpm.RPMTAG_REQUIRESFLAGS].append(flags)
981+
self.header[rpm.RPMTAG_REQUIRESVERSION].append(version)
982+
983+
_requires = []
984+
_prereq = []
985+
self.requires, self.prereq = self._gather_aux(self.header, _requires,
986+
rpm.RPMTAG_REQUIRENAME,
987+
rpm.RPMTAG_REQUIREFLAGS,
988+
rpm.RPMTAG_REQUIREVERSION,
989+
_prereq)
990+
991+
self.req_names = [x[0] for x in self.requires + self.prereq]
992+
976993
def add_symlink_to(self, name, target):
977994
"""
978995
Add symlink to name file which path is related to name.

test/mockdata/mock_tags.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,3 +143,26 @@
143143
'license': 'GPL-2.0+ WITH 389-exception',
144144
},
145145
)
146+
147+
148+
DepsPackage = get_tested_mock_package(
149+
lazyload=True,
150+
name='pkg',
151+
header={
152+
'requires': [
153+
'expat-devel',
154+
'libexplicit',
155+
],
156+
'ARCH': 'noarch',
157+
'NAME': 'pkg',
158+
'VERSION': '5.6.3',
159+
'RELEASE': '2.fc39',
160+
'EPOCH': 1,
161+
},
162+
)
163+
164+
165+
DepsDevPackage = DepsPackage.clone(
166+
extend=True,
167+
name='pkg-devel',
168+
)

test/test_tags.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
from mockdata.mock_tags import (
2+
DepsDevPackage,
3+
DepsPackage,
24
FooDevelPackage,
35
FuseCommonPackage,
46
InvalidExceptionPackage,
@@ -499,3 +501,39 @@ def test_missing_dependency_on_with_epoch(package, output, test):
499501
test.check(package)
500502
out = output.print_results(output.results)
501503
assert 'W: missing-dependency-on' not in out
504+
505+
506+
@pytest.mark.parametrize('package,should_fail', [
507+
[DepsPackage, True],
508+
[DepsDevPackage, False],
509+
])
510+
def test_devel_dependency(package, should_fail, output, test):
511+
test.check(package)
512+
out = output.print_results(output.results)
513+
assert ('devel-dependency' in out) == should_fail
514+
515+
516+
@pytest.mark.parametrize('package,should_fail', [
517+
[DepsPackage, True],
518+
[DepsDevPackage, False],
519+
])
520+
def test_explicit_lib_dependency(package, should_fail, output, test):
521+
test.check(package)
522+
out = output.print_results(output.results)
523+
assert ('explicit-lib-dependency' in out) == should_fail
524+
525+
526+
@pytest.mark.parametrize('package,deps,should_fail', [
527+
[DepsPackage, ('libxx2_2-devel', ), True],
528+
[DepsPackage, ('libxx-devel', 'libxx2-devel'), True],
529+
[DepsPackage, ('libxx2', 'libxx-devel'), False],
530+
])
531+
def test_invalid_build_requires(package, deps, should_fail, output, test):
532+
pkg = package.clone()
533+
pkg.is_source = True
534+
pkg.requires = []
535+
for dep in deps:
536+
pkg.requires.append([dep, None, None])
537+
test.check(pkg)
538+
out = output.print_results(output.results)
539+
assert ('invalid-build-requires' in out) == should_fail

0 commit comments

Comments
 (0)