Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package rpmlint for openSUSE:Factory checked in at 2026-06-17 16:17:12 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/rpmlint (Old) and /work/SRC/openSUSE:Factory/.rpmlint.new.1981 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "rpmlint" Wed Jun 17 16:17:12 2026 rev:541 rq:1359486 version:2.9.0+git20260528.2490edb3 Changes: -------- --- /work/SRC/openSUSE:Factory/rpmlint/rpmlint.changes 2026-05-28 23:11:58.771499000 +0200 +++ /work/SRC/openSUSE:Factory/.rpmlint.new.1981/rpmlint.changes 2026-06-17 16:18:00.026262920 +0200 @@ -1,0 +2,21 @@ +Mon Jun 15 09:16:57 UTC 2026 - Filippo Bonazzi <[email protected]> + +- Update to version 2.9.0+git20260528.2490edb3: + * dbus-services: whitelist qSnapper (bsc#1261537) + * Bump github/codeql-action from 4.35.2 to 4.36.0 + * BuildRootAndDateCheck: Convert date errs to warning + * Bump github/codeql-action from 4.35.1 to 4.35.2 + * Update openSUSE's licenses.toml + * Fix: Add sysusers.d to usrlibbinaryexception + * SpecCheck: Fix typo in the 'no-%check-section' explanation + * Bump github/codeql-action from 4.34.1 to 4.35.1 + * test: Add PKG-INFO to egg-info mocks for Python 3.15 compatibility + * Reorder param doc rpmlint/checks/TagsCheck.py + * test: Add more tests for dependencies + * test: Add tests for SELinuxIndependentModuleCheck + * TagsCheck: Reorder is_devel and is_source parameters + * Add SELinuxIndependentModuleCheck to test_lint.py + * Set scoring for selinux-incorrect-if-file-location + * Add check for SELinux Independent Modules + +------------------------------------------------------------------- Old: ---- rpmlint-2.9.0+git20260526.25d1046c.tar.xz New: ---- rpmlint-2.9.0+git20260528.2490edb3.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ rpmlint.spec ++++++ --- /var/tmp/diff_new_pack.Gfodz9/_old 2026-06-17 16:18:01.430321666 +0200 +++ /var/tmp/diff_new_pack.Gfodz9/_new 2026-06-17 16:18:01.434321834 +0200 @@ -23,7 +23,7 @@ %define name_suffix -%{flavor} %endif Name: rpmlint%{name_suffix} -Version: 2.9.0+git20260526.25d1046c +Version: 2.9.0+git20260528.2490edb3 Release: 0 Summary: RPM file correctness checker License: GPL-2.0-or-later ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.Gfodz9/_old 2026-06-17 16:18:01.490324177 +0200 +++ /var/tmp/diff_new_pack.Gfodz9/_new 2026-06-17 16:18:01.490324177 +0200 @@ -1,6 +1,6 @@ <servicedata> <service name="tar_scm"> <param name="url">https://github.com/rpm-software-management/rpmlint.git</param> - <param name="changesrevision">25d1046c109f33bee3ef303834a7a140254a63ea</param></service></servicedata> + <param name="changesrevision">2490edb3f69bfb2c1df3829fe5f091651fde1f6f</param></service></servicedata> (No newline at EOF) ++++++ rpmlint-2.9.0+git20260526.25d1046c.tar.xz -> rpmlint-2.9.0+git20260528.2490edb3.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rpmlint-2.9.0+git20260526.25d1046c/.github/workflows/codeql.yml new/rpmlint-2.9.0+git20260528.2490edb3/.github/workflows/codeql.yml --- old/rpmlint-2.9.0+git20260526.25d1046c/.github/workflows/codeql.yml 2026-05-26 17:29:32.000000000 +0200 +++ new/rpmlint-2.9.0+git20260528.2490edb3/.github/workflows/codeql.yml 2026-05-28 14:31:50.000000000 +0200 @@ -25,15 +25,15 @@ uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Initialize CodeQL - uses: github/codeql-action/init@38697555549f1db7851b81482ff19f1fa5c4fedc # v4.34.1 + uses: github/codeql-action/init@7211b7c8077ea37d8641b6271f6a365a22a5fbfa # v4.36.0 with: languages: ${{ matrix.language }} queries: +security-and-quality - name: Autobuild - uses: github/codeql-action/autobuild@38697555549f1db7851b81482ff19f1fa5c4fedc # v4.34.1 + uses: github/codeql-action/autobuild@7211b7c8077ea37d8641b6271f6a365a22a5fbfa # v4.36.0 - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@38697555549f1db7851b81482ff19f1fa5c4fedc # v4.34.1 + uses: github/codeql-action/analyze@7211b7c8077ea37d8641b6271f6a365a22a5fbfa # v4.36.0 with: category: "/language:${{ matrix.language }}" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rpmlint-2.9.0+git20260526.25d1046c/configs/openSUSE/dbus-services.toml new/rpmlint-2.9.0+git20260528.2490edb3/configs/openSUSE/dbus-services.toml --- old/rpmlint-2.9.0+git20260526.25d1046c/configs/openSUSE/dbus-services.toml 2026-05-26 17:29:32.000000000 +0200 +++ new/rpmlint-2.9.0+git20260528.2490edb3/configs/openSUSE/dbus-services.toml 2026-05-28 14:31:50.000000000 +0200 @@ -1800,3 +1800,16 @@ digester = "xml" hash = "5012b8451001e03da2a00fb66ad629ab1741b5a7e24b2b518b1217d789ffa661" +[[FileDigestGroup]] +package = "qsnapper" +note = "GUI tool for managing snapper snapshots. This is for the daemon implementing privileged operations." +bug = "bsc#1261537" +type = "dbus" +[[FileDigestGroup.digests]] +path = "/usr/share/dbus-1/system-services/com.presire.qsnapper.Operations.service" +digester = "shell" +hash = "df81a398c7eefc077a3fb155785e79dbce7c0da60aa7207f7fa9de5ed4440824" +[[FileDigestGroup.digests]] +path = "/usr/share/dbus-1/system.d/com.presire.qsnapper.Operations.conf" +digester = "xml" +hash = "4ebd3fcf900e113e6d7a9a1e95ff7b32c4ab177723b8660030917313113a58ea" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rpmlint-2.9.0+git20260526.25d1046c/configs/openSUSE/scoring.toml new/rpmlint-2.9.0+git20260528.2490edb3/configs/openSUSE/scoring.toml --- old/rpmlint-2.9.0+git20260526.25d1046c/configs/openSUSE/scoring.toml 2026-05-26 17:29:32.000000000 +0200 +++ new/rpmlint-2.9.0+git20260528.2490edb3/configs/openSUSE/scoring.toml 2026-05-28 14:31:50.000000000 +0200 @@ -24,6 +24,7 @@ percent-in-dependency = 10000 percent-in-obsoletes = 10000 percent-in-provides = 10000 +selinux-incorrect-if-file-location = 100 shlib-policy-name-error = 10000 spurious-executable-perm = 50 summary-ended-with-dot = 20 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rpmlint-2.9.0+git20260526.25d1046c/rpmlint/checks/BuildRootAndDateCheck.py new/rpmlint-2.9.0+git20260528.2490edb3/rpmlint/checks/BuildRootAndDateCheck.py --- old/rpmlint-2.9.0+git20260526.25d1046c/rpmlint/checks/BuildRootAndDateCheck.py 2026-05-26 17:29:32.000000000 +0200 +++ new/rpmlint-2.9.0+git20260528.2490edb3/rpmlint/checks/BuildRootAndDateCheck.py 2026-05-28 14:31:50.000000000 +0200 @@ -38,8 +38,8 @@ data = pkg.read_with_mmap(filename) if self.istoday.search(data): if self.looksliketime.search(data): - self.output.add_info('E', pkg, 'file-contains-date-and-time', filename) + self.output.add_info('W', pkg, 'file-contains-date-and-time', filename) else: - self.output.add_info('E', pkg, 'file-contains-current-date', filename) + self.output.add_info('W', pkg, 'file-contains-current-date', filename) if self.lookslikebuildroot.search(data): self.output.add_info('E', pkg, 'file-contains-buildroot', filename) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rpmlint-2.9.0+git20260526.25d1046c/rpmlint/checks/SELinuxIndependentModuleCheck.py new/rpmlint-2.9.0+git20260528.2490edb3/rpmlint/checks/SELinuxIndependentModuleCheck.py --- old/rpmlint-2.9.0+git20260526.25d1046c/rpmlint/checks/SELinuxIndependentModuleCheck.py 1970-01-01 01:00:00.000000000 +0100 +++ new/rpmlint-2.9.0+git20260528.2490edb3/rpmlint/checks/SELinuxIndependentModuleCheck.py 2026-05-28 14:31:50.000000000 +0200 @@ -0,0 +1,34 @@ +from rpmlint.checks.AbstractCheck import AbstractCheck + + +class SELinuxIndependentModuleCheck(AbstractCheck): + ALLOWED_IF_DIR = '/usr/share/selinux/devel/include/distributed/' + SELINUX_MAIN_POLICY_PACKAGES = [ + 'selinux-policy-devel', + ] + + def __init__(self, config, output): + super().__init__(config, output) + + def __is_independent_module(self, pkg): + for req in pkg.requires + pkg.prereq: + if req[0] == 'selinux-policy-base': + return True + return False + + def check(self, pkg): + # Skip source packages + if pkg.is_source: + return + + # Skip main policy packages + if pkg.name in self.SELINUX_MAIN_POLICY_PACKAGES: + return + + # Skip packages that are not independent modules + if not self.__is_independent_module(pkg): + return + + for filename, _ in pkg.files.items(): + if filename.endswith('.if') and not filename.startswith(self.ALLOWED_IF_DIR): + self.output.add_info('E', pkg, 'selinux-incorrect-if-file-location', filename) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rpmlint-2.9.0+git20260526.25d1046c/rpmlint/checks/TagsCheck.py new/rpmlint-2.9.0+git20260528.2490edb3/rpmlint/checks/TagsCheck.py --- old/rpmlint-2.9.0+git20260526.25d1046c/rpmlint/checks/TagsCheck.py 2026-05-26 17:29:32.000000000 +0200 +++ new/rpmlint-2.9.0+git20260528.2490edb3/rpmlint/checks/TagsCheck.py 2026-05-28 14:31:50.000000000 +0200 @@ -296,14 +296,14 @@ self.output.add_info('W', pkg, f'no-epoch-in-{tag}', Pkg.formatRequire(*x)) - def _check_multiple_dependencies(self, pkg, deps, is_source, is_devel): + def _check_multiple_dependencies(self, pkg, deps, is_devel, is_source): """Contain multiple check, no-epoch-in-dependency, invalid-dependency, invalid-build-requires, devel-dependency, explicit-devel-dependency Args: deps: Variable to find PreReq and Requires tag - is_source: Variable to check if a package is of source type is_devel: The param to check if a package name ends with *-devel + is_source: Variable to check if a package is of source type Returns: Output info to STDOUT diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rpmlint-2.9.0+git20260526.25d1046c/rpmlint/configdefaults.toml new/rpmlint-2.9.0+git20260528.2490edb3/rpmlint/configdefaults.toml --- old/rpmlint-2.9.0+git20260526.25d1046c/rpmlint/configdefaults.toml 2026-05-26 17:29:32.000000000 +0200 +++ new/rpmlint-2.9.0+git20260528.2490edb3/rpmlint/configdefaults.toml 2026-05-28 14:31:50.000000000 +0200 @@ -21,6 +21,7 @@ "PkgConfigCheck", "PostCheck", "PythonCheck", + "SELinuxIndependentModuleCheck", "SignatureCheck", "SourceCheck", "SpecCheck", @@ -282,7 +283,7 @@ PieExecutables = [] # Architecture dependent paths in which packages are allowed to install files # even if they are all non-binary -UsrLibBinaryException = '^/usr/lib(64)?/(perl|python|ruby|menu|pkgconfig|ocaml|lib[^/]+\.(so|l?a)$|bonobo/servers/|\.build-id|firmware|systemd)' +UsrLibBinaryException = '^/usr/lib(64)?/(perl|python|ruby|menu|pkgconfig|ocaml|lib[^/]+\.(so|l?a)$|bonobo/servers/|\.build-id|firmware|systemd|sysusers\.d)' # List of compilation flags that are mandatory MandatoryOptflags = [] # List of forbidden compilation flags diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rpmlint-2.9.0+git20260526.25d1046c/rpmlint/descriptions/SELinuxIndependentModuleCheck.toml new/rpmlint-2.9.0+git20260528.2490edb3/rpmlint/descriptions/SELinuxIndependentModuleCheck.toml --- old/rpmlint-2.9.0+git20260526.25d1046c/rpmlint/descriptions/SELinuxIndependentModuleCheck.toml 1970-01-01 01:00:00.000000000 +0100 +++ new/rpmlint-2.9.0+git20260528.2490edb3/rpmlint/descriptions/SELinuxIndependentModuleCheck.toml 2026-05-28 14:31:50.000000000 +0200 @@ -0,0 +1,3 @@ +selinux-incorrect-if-file-location = ''' +SELinux interface (.if) files must be installed in /usr/share/selinux/devel/include/distributed/ as per Fedora and openSUSE independent module packaging guidelines. Files found elsewhere are packaging errors. +''' \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rpmlint-2.9.0+git20260526.25d1046c/rpmlint/descriptions/SpecCheck.toml new/rpmlint-2.9.0+git20260528.2490edb3/rpmlint/descriptions/SpecCheck.toml --- old/rpmlint-2.9.0+git20260526.25d1046c/rpmlint/descriptions/SpecCheck.toml 2026-05-26 17:29:32.000000000 +0200 +++ new/rpmlint-2.9.0+git20260528.2490edb3/rpmlint/descriptions/SpecCheck.toml 2026-05-28 14:31:50.000000000 +0200 @@ -85,7 +85,7 @@ section, even if empty. """ "no-%check-section"=""" -The spec file does not contain an %check section. +The spec file does not contain a %check section. Please check if the package has a testsuite and what it takes to enable the testsuite as part of the package build. If it is not possible to run it in the build environment (OBS/koji) or no testsuite exists, then please ignore this diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rpmlint-2.9.0+git20260526.25d1046c/rpmlint/pkg.py new/rpmlint-2.9.0+git20260528.2490edb3/rpmlint/pkg.py --- old/rpmlint-2.9.0+git20260526.25d1046c/rpmlint/pkg.py 2026-05-26 17:29:32.000000000 +0200 +++ new/rpmlint-2.9.0+git20260528.2490edb3/rpmlint/pkg.py 2026-05-28 14:31:50.000000000 +0200 @@ -975,6 +975,23 @@ self.req_names = [x[0] for x in self.requires + self.prereq] + def add_dependency(self, dep): + name, flags, version = parse_deps(dep)[0] + version = versionToString(version) + self.header[rpm.RPMTAG_REQUIRESNAME].append(name) + self.header[rpm.RPMTAG_REQUIRESFLAGS].append(flags) + self.header[rpm.RPMTAG_REQUIRESVERSION].append(version) + + _requires = [] + _prereq = [] + self.requires, self.prereq = self._gather_aux(self.header, _requires, + rpm.RPMTAG_REQUIRENAME, + rpm.RPMTAG_REQUIREFLAGS, + rpm.RPMTAG_REQUIREVERSION, + _prereq) + + self.req_names = [x[0] for x in self.requires + self.prereq] + def add_symlink_to(self, name, target): """ Add symlink to name file which path is related to name. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rpmlint-2.9.0+git20260526.25d1046c/test/mockdata/mock_python.py new/rpmlint-2.9.0+git20260528.2490edb3/test/mockdata/mock_python.py --- old/rpmlint-2.9.0+git20260526.25d1046c/test/mockdata/mock_python.py 2026-05-26 17:29:32.000000000 +0200 +++ new/rpmlint-2.9.0+git20260528.2490edb3/test/mockdata/mock_python.py 2026-05-28 14:31:50.000000000 +0200 @@ -191,6 +191,13 @@ PythonIcecreamPackage = get_tested_mock_package( lazyload=True, files={ + '/usr/lib/python3.10/site-packages/icecream-2.1.3-py3.10.egg-info/PKG-INFO': { + 'content': """Metadata-Version: 2.1 +Name: icecream +Version: 2.1.3 +""", + 'create_dirs': True + }, '/usr/lib/python3.10/site-packages/icecream-2.1.3-py3.10.egg-info/requires.txt': { 'content': """ asttokens>=2.0.1 @@ -198,7 +205,6 @@ executing>=0.3.1 pygments>=2.2.0 """, - 'create_dirs': True }, }, header={ @@ -278,6 +284,12 @@ IPythonMissingRequirePackage = get_tested_mock_package( lazyload=True, files={ + '/usr/lib/python3.12/site-packages/ipython-8.14.0-py3.12.egg-info/PKG-INFO': { + 'content': """Metadata-Version: 2.1 +Name: ipython +Version: 8.14.0 +""", + }, '/usr/lib/python3.12/site-packages/ipython-8.14.0-py3.12.egg-info/requires.txt': { 'content-path': 'files/ipython-requires.txt', }, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rpmlint-2.9.0+git20260526.25d1046c/test/mockdata/mock_tags.py new/rpmlint-2.9.0+git20260528.2490edb3/test/mockdata/mock_tags.py --- old/rpmlint-2.9.0+git20260526.25d1046c/test/mockdata/mock_tags.py 2026-05-26 17:29:32.000000000 +0200 +++ new/rpmlint-2.9.0+git20260528.2490edb3/test/mockdata/mock_tags.py 2026-05-28 14:31:50.000000000 +0200 @@ -143,3 +143,26 @@ 'license': 'GPL-2.0+ WITH 389-exception', }, ) + + +DepsPackage = get_tested_mock_package( + lazyload=True, + name='pkg', + header={ + 'requires': [ + 'expat-devel', + 'libexplicit', + ], + 'ARCH': 'noarch', + 'NAME': 'pkg', + 'VERSION': '5.6.3', + 'RELEASE': '2.fc39', + 'EPOCH': 1, + }, +) + + +DepsDevPackage = DepsPackage.clone( + extend=True, + name='pkg-devel', +) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rpmlint-2.9.0+git20260526.25d1046c/test/test_build_date.py new/rpmlint-2.9.0+git20260528.2490edb3/test/test_build_date.py --- old/rpmlint-2.9.0+git20260526.25d1046c/test/test_build_date.py 2026-05-26 17:29:32.000000000 +0200 +++ new/rpmlint-2.9.0+git20260528.2490edb3/test/test_build_date.py 2026-05-28 14:31:50.000000000 +0200 @@ -23,8 +23,8 @@ test.istoday = re.compile('Jan 1 2019') test.check(package) out = output.print_results(output.results) - assert 'E: file-contains-date-and-time /bin/with-datetime' in out - assert 'E: file-contains-current-date /bin/with-date' in out + assert 'W: file-contains-date-and-time /bin/with-datetime' in out + assert 'W: file-contains-current-date /bin/with-date' in out @pytest.mark.parametrize('package', [BashismsPackage]) @@ -33,5 +33,5 @@ test.istoday = re.compile('Jan 1 2019') test.check(package) out = output.print_results(output.results) - assert 'E: file-contains-date-and-time' not in out - assert 'E: file-contains-current-date' not in out + assert 'W: file-contains-date-and-time' not in out + assert 'W: file-contains-current-date' not in out diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rpmlint-2.9.0+git20260526.25d1046c/test/test_lint.py new/rpmlint-2.9.0+git20260528.2490edb3/test/test_lint.py --- old/rpmlint-2.9.0+git20260526.25d1046c/test/test_lint.py 2026-05-26 17:29:32.000000000 +0200 +++ new/rpmlint-2.9.0+git20260528.2490edb3/test/test_lint.py 2026-05-28 14:31:50.000000000 +0200 @@ -51,6 +51,7 @@ 'PkgConfigCheck', 'PostCheck', 'PythonCheck', + 'SELinuxIndependentModuleCheck', 'SignatureCheck', 'SourceCheck', 'SpecCheck', diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rpmlint-2.9.0+git20260526.25d1046c/test/test_selinux.py new/rpmlint-2.9.0+git20260528.2490edb3/test/test_selinux.py --- old/rpmlint-2.9.0+git20260526.25d1046c/test/test_selinux.py 1970-01-01 01:00:00.000000000 +0100 +++ new/rpmlint-2.9.0+git20260528.2490edb3/test/test_selinux.py 2026-05-28 14:31:50.000000000 +0200 @@ -0,0 +1,66 @@ +import pytest +from rpmlint.checks.SELinuxIndependentModuleCheck import SELinuxIndependentModuleCheck +from rpmlint.filter import Filter + +from Testing import CONFIG, get_tested_mock_package + + [email protected](scope='function', autouse=True) +def selinuxcheck(): + CONFIG.info = True + output = Filter(CONFIG) + test = SELinuxIndependentModuleCheck(CONFIG, output) + yield output, test + + [email protected] +def output(selinuxcheck): + output, _test = selinuxcheck + yield output + + [email protected] +def test(selinuxcheck): + _output, test = selinuxcheck + yield test + + [email protected]('package', [ + get_tested_mock_package( + name='flatpak-selinux', + header={'requires': ['selinux-policy-base >= 20260219-2.2']}, + files=[ + '/usr/share/selinux/devel/include/contrib/flatpak.if', + '/usr/share/selinux/packages/flatpak.pp.bz2', + ], + ), +]) +def test_selinux_independent_module(package, output, test): + test.check(package) + out = output.print_results(output.results) + assert 'selinux-incorrect-if-file-location' in out + + [email protected]('package', [ + get_tested_mock_package( + name='selinux-policy-devel', + header={'requires': ['selinux-policy-base >= 20260219-2.2']}, + files=[ + '/usr/share/selinux/devel/include/contrib/flatpak.if', + '/usr/share/selinux/packages/flatpak.pp.bz2', + ], + ), + get_tested_mock_package( + name='ok-package', + header={'requires': ['selinux-policy-base >= 20260219-2.2']}, + files=[ + '/usr/share/selinux/devel/include/distributed/flatpak.if', + '/usr/share/selinux/devel/include/distributed/testing.if', + '/usr/share/selinux/devel/include/distributed/subfolder/testing.if', + ], + ), +]) +def test_selinux_no_independent_module(package, output, test): + test.check(package) + out = output.print_results(output.results) + assert 'selinux-incorrect-if-file-location' not in out diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rpmlint-2.9.0+git20260526.25d1046c/test/test_tags.py new/rpmlint-2.9.0+git20260528.2490edb3/test/test_tags.py --- old/rpmlint-2.9.0+git20260526.25d1046c/test/test_tags.py 2026-05-26 17:29:32.000000000 +0200 +++ new/rpmlint-2.9.0+git20260528.2490edb3/test/test_tags.py 2026-05-28 14:31:50.000000000 +0200 @@ -1,4 +1,6 @@ from mockdata.mock_tags import ( + DepsDevPackage, + DepsPackage, FooDevelPackage, FuseCommonPackage, InvalidExceptionPackage, @@ -499,3 +501,39 @@ test.check(package) out = output.print_results(output.results) assert 'W: missing-dependency-on' not in out + + [email protected]('package,should_fail', [ + [DepsPackage, True], + [DepsDevPackage, False], +]) +def test_devel_dependency(package, should_fail, output, test): + test.check(package) + out = output.print_results(output.results) + assert ('devel-dependency' in out) == should_fail + + [email protected]('package,should_fail', [ + [DepsPackage, True], + [DepsDevPackage, False], +]) +def test_explicit_lib_dependency(package, should_fail, output, test): + test.check(package) + out = output.print_results(output.results) + assert ('explicit-lib-dependency' in out) == should_fail + + [email protected]('package,deps,should_fail', [ + [DepsPackage, ('libxx2_2-devel', ), True], + [DepsPackage, ('libxx-devel', 'libxx2-devel'), True], + [DepsPackage, ('libxx2', 'libxx-devel'), False], +]) +def test_invalid_build_requires(package, deps, should_fail, output, test): + pkg = package.clone() + pkg.is_source = True + pkg.requires = [] + for dep in deps: + pkg.requires.append([dep, None, None]) + test.check(pkg) + out = output.print_results(output.results) + assert ('invalid-build-requires' in out) == should_fail
