Move 'Dependecies' to Pkg atributes

This commit is contained in:
Ondřej Súkup 2020-02-13 17:40:19 +01:00 committed by Tomáš Chvátal
parent cb916051ea
commit af1ef113fb
7 changed files with 80 additions and 149 deletions

View File

@ -6,6 +6,6 @@ class CheckForXinetd(AbstractCheck):
if pkg.is_source:
return
for req in pkg.requires() + pkg.prereq():
for req in pkg.requires + pkg.prereq:
if req[0] == 'xinetd':
self.output.add_info('E', pkg, 'obsolete-xinetd-requirement')

View File

@ -441,7 +441,7 @@ class FilesCheck(AbstractCheck):
devel_pkg = devel_regex.search(pkg.name)
if not devel_pkg:
for p in pkg.provides():
for p in pkg.provides:
if devel_regex.search(p[0]):
devel_pkg = True
break
@ -559,7 +559,7 @@ class FilesCheck(AbstractCheck):
if res.group(1) != pkg.name:
self.output.add_info('E', pkg, 'incoherent-logrotate-file', f)
deps = [x[0] for x in pkg.requires() + pkg.recommends() + pkg.suggests()]
deps = [x[0] for x in pkg.requires + pkg.recommends + pkg.suggests]
if res and not ('logrotate' in deps) and pkg.name != 'logrotate':
self.output.add_info('E', pkg, 'missing-dependency-to-logrotate', 'for logrotate script', f)
if f.startswith('/etc/cron.') \

View File

@ -142,7 +142,7 @@ class I18NCheck(AbstractCheck):
if res:
locales = 'locales-' + res.group(1)
if locales != name:
if locales not in (x[0] for x in pkg.requires()):
if locales not in (x[0] for x in pkg.requires):
self.output.add_info('E', pkg, 'no-dependency-on', locales)

View File

@ -116,7 +116,7 @@ class PostCheck(AbstractCheck):
self.output.error_details.update(post_details_dict)
def check_binary(self, pkg):
prereq = [x[0] for x in pkg.prereq()]
prereq = [x[0] for x in pkg.prereq]
for tag in Pkg.SCRIPT_TAGS:
script = pkg[tag[0]]

View File

@ -16,7 +16,7 @@ class SysVInitOnSystemdCheck(AbstractCheck):
self._find_services_and_scripts(pkg)
for req in pkg.requires() + pkg.prereq():
for req in pkg.requires + pkg.prereq:
if req[0] == 'insserv':
self.output.add_info('E', pkg, 'obsolete-insserv-requirement')

View File

@ -138,7 +138,7 @@ class TagsCheck(AbstractCheck):
Pkg.formatRequire(*x))
name = pkg.name
deps = pkg.requires() + pkg.prereq()
deps = pkg.requires + pkg.prereq
devel_depend = False
is_devel = FilesCheck.devel_regex.search(name)
is_source = pkg.is_source
@ -217,12 +217,12 @@ class TagsCheck(AbstractCheck):
else:
prov = res.group(1) + '-devel'
if prov not in (x[0] for x in pkg.provides()):
if prov not in (x[0] for x in pkg.provides):
self.output.add_info('W', pkg, 'no-provides', prov)
if has_pc:
found_pkg_config_dep = False
for p in (x[0] for x in pkg.provides()):
for p in (x[0] for x in pkg.provides):
if p.startswith('pkgconfig('):
found_pkg_config_dep = True
break
@ -233,10 +233,10 @@ class TagsCheck(AbstractCheck):
ignored_words = set()
for pf in pkg.files:
ignored_words.update(pf.split('/'))
ignored_words.update((x[0] for x in pkg.provides()))
ignored_words.update((x[0] for x in pkg.requires()))
ignored_words.update((x[0] for x in pkg.conflicts()))
ignored_words.update((x[0] for x in pkg.obsoletes()))
ignored_words.update((x[0] for x in pkg.provides))
ignored_words.update((x[0] for x in pkg.requires))
ignored_words.update((x[0] for x in pkg.conflicts))
ignored_words.update((x[0] for x in pkg.obsoletes))
langs = pkg[rpm.RPMTAG_HEADERI18NTABLE]
@ -379,12 +379,12 @@ class TagsCheck(AbstractCheck):
elif tag == 'URL':
self.output.add_info('W', pkg, 'no-url-tag')
obs_names = [x[0] for x in pkg.obsoletes()]
prov_names = [x[0] for x in pkg.provides()]
obs_names = [x[0] for x in pkg.obsoletes]
prov_names = [x[0] for x in pkg.provides]
for o in (x for x in obs_names if x not in prov_names):
self.output.add_info('W', pkg, 'obsolete-not-provided', o)
for o in pkg.obsoletes():
for o in pkg.obsoletes:
value = Pkg.formatRequire(*o)
self._unexpanded_macros(pkg, 'Obsoletes %s' % (value,), value)
@ -400,13 +400,13 @@ class TagsCheck(AbstractCheck):
self.output.add_info('E', pkg, 'useless-provides', p)
for tagname, items in (
('Provides', pkg.provides()),
('Conflicts', pkg.conflicts()),
('Obsoletes', pkg.obsoletes()),
('Supplements', pkg.supplements()),
('Suggests', pkg.suggests()),
('Enhances', pkg.enhances()),
('Recommends', pkg.recommends())):
('Provides', pkg.provides),
('Conflicts', pkg.conflicts),
('Obsoletes', pkg.obsoletes),
('Supplements', pkg.supplements),
('Suggests', pkg.suggests),
('Enhances', pkg.enhances),
('Recommends', pkg.recommends)):
for p in items:
e = Pkg.has_forbidden_controlchars(p)
if e:
@ -417,7 +417,7 @@ class TagsCheck(AbstractCheck):
value = Pkg.formatRequire(*p)
self._unexpanded_macros(pkg, '%s %s' % (tagname, value), value)
for p in (pkg.requires()):
for p in (pkg.requires):
e = Pkg.has_forbidden_controlchars(p)
if e:
self.output.add_info('E',
@ -425,9 +425,9 @@ class TagsCheck(AbstractCheck):
'forbidden-controlchar-found',
'Requires: %s' % e)
obss = pkg.obsoletes()
obss = pkg.obsoletes
if obss:
provs = pkg.provides()
provs = pkg.provides
for prov in provs:
for obs in obss:
if Pkg.rangeCompare(obs, prov):

View File

@ -378,7 +378,7 @@ class Pkg(AbstractPkg):
self.extracted = extracted
self.dirname = self.dir_name(dirname)
self.current_linenum = None
self._requires = None
self._req_names = -1
if header:
@ -397,6 +397,11 @@ class Pkg(AbstractPkg):
self.is_source = not self.header[rpm.RPMTAG_SOURCERPM]
self.name = self[rpm.RPMTAG_NAME]
(self.requires, self.prereq, self.provides, self.conflicts,
self.obsoletes, self.recommends, self.suggests, self.enhances,
self.supplements) = self._gatherDepInfo()
self.files = self._gatherFilesInfo()
self.config_files = [x.name for x in self.files.values() if x.is_config]
self.doc_files = [x.name for x in self.files.values() if x.is_doc]
@ -592,40 +597,15 @@ class Pkg(AbstractPkg):
result = self.files.get(linkpath)
return result
# API to access dependency information
def obsoletes(self):
"""
Get package Obsoletes as list of
(name, flags, (epoch, version, release)) tuples.
"""
self._gatherDepInfo()
return self._obsoletes
def requires(self):
"""
Get package Requires as list of
(name, flags, (epoch, version, release)) tuples.
"""
self._gatherDepInfo()
return self._requires
def prereq(self):
"""
Get package PreReqs as list of
(name, flags, (epoch, version, release)) tuples.
"""
self._gatherDepInfo()
return self._prereq
def req_names(self):
if self._req_names == -1:
self._req_names = [x[0] for x in self.requires() + self.prereq()]
self._req_names = [x[0] for x in self.requires + self.prereq]
return self._req_names
def check_versioned_dep(self, name, version):
# try to match name%_isa as well (e.g. 'foo(x86-64)', 'foo(x86-32)')
name_re = re.compile(r'^%s(\(\w+-\d+\))?$' % re.escape(name))
for d in self.requires() + self.prereq():
for d in self.requires + self.prereq:
if name_re.match(d[0]):
if d[1] & rpm.RPMSENSE_EQUAL != rpm.RPMSENSE_EQUAL \
or d[2][1] != version:
@ -633,54 +613,6 @@ class Pkg(AbstractPkg):
return True
return False
def conflicts(self):
"""
Get package Conflicts as list of
(name, flags, (epoch, version, release)) tuples.
"""
self._gatherDepInfo()
return self._conflicts
def provides(self):
"""
Get package Provides as list of
(name, flags, (epoch, version, release)) tuples.
"""
self._gatherDepInfo()
return self._provides
def recommends(self):
"""
Get package Recommends as list of
(name, flags, (epoch, version, release)) tuples.
"""
self._gatherDepInfo()
return self._recommends
def suggests(self):
"""
Get package Suggests as list of
(name, flags, (epoch, version, release)) tuples.
"""
self._gatherDepInfo()
return self._suggests
def enhances(self):
"""
Get package Enhances as list of
(name, flags, (epoch, version, release)) tuples.
"""
self._gatherDepInfo()
return self._enhances
def supplements(self):
"""
Get package Supplements as list of
(name, flags, (epoch, version, release)) tuples.
"""
self._gatherDepInfo()
return self._supplements
# internal function to gather dependency info used by the above ones
def _gather_aux(self, header, xs, nametag, flagstag, versiontag,
prereq=None):
@ -696,56 +628,55 @@ class Pkg(AbstractPkg):
prereq.append((name, flags[loop] & (~PREREQ_FLAG), evr))
else:
xs.append((name, flags[loop], evr))
return xs, prereq
def _gatherDepInfo(self):
if self._requires is None:
self._requires = []
self._prereq = []
self._provides = []
self._conflicts = []
self._obsoletes = []
self._recommends = []
self._suggests = []
self._enhances = []
self._supplements = []
_requires = []
_prereq = []
_provides = []
_conflicts = []
_obsoletes = []
_recommends = []
_suggests = []
_enhances = []
_supplements = []
self._gather_aux(self.header, self._requires,
rpm.RPMTAG_REQUIRENAME,
rpm.RPMTAG_REQUIREFLAGS,
rpm.RPMTAG_REQUIREVERSION,
self._prereq)
self._gather_aux(self.header, self._conflicts,
rpm.RPMTAG_CONFLICTNAME,
rpm.RPMTAG_CONFLICTFLAGS,
rpm.RPMTAG_CONFLICTVERSION)
self._gather_aux(self.header, self._provides,
rpm.RPMTAG_PROVIDENAME,
rpm.RPMTAG_PROVIDEFLAGS,
rpm.RPMTAG_PROVIDEVERSION)
self._gather_aux(self.header, self._obsoletes,
rpm.RPMTAG_OBSOLETENAME,
rpm.RPMTAG_OBSOLETEFLAGS,
rpm.RPMTAG_OBSOLETEVERSION)
if hasattr(rpm, 'RPMTAG_RECOMMENDNAME'): # rpm >= 4.12
self._gather_aux(self.header, self._recommends,
rpm.RPMTAG_RECOMMENDNAME,
rpm.RPMTAG_RECOMMENDFLAGS,
rpm.RPMTAG_RECOMMENDVERSION)
if hasattr(rpm, 'RPMTAG_SUGGESTNAME'): # rpm >= 4.12
self._gather_aux(self.header, self._suggests,
rpm.RPMTAG_SUGGESTNAME,
rpm.RPMTAG_SUGGESTFLAGS,
rpm.RPMTAG_SUGGESTVERSION)
if hasattr(rpm, 'RPMTAG_ENHANCENAME'): # rpm >= 4.12
self._gather_aux(self.header, self._enhances,
rpm.RPMTAG_ENHANCENAME,
rpm.RPMTAG_ENHANCEFLAGS,
rpm.RPMTAG_ENHANCEVERSION)
if hasattr(rpm, 'RPMTAG_SUPPLEMENTNAME'): # rpm >= 4.12
self._gather_aux(self.header, self._supplements,
rpm.RPMTAG_SUPPLEMENTNAME,
rpm.RPMTAG_SUPPLEMENTFLAGS,
rpm.RPMTAG_SUPPLEMENTVERSION)
_requires, _prereq = self._gather_aux(self.header, _requires,
rpm.RPMTAG_REQUIRENAME,
rpm.RPMTAG_REQUIREFLAGS,
rpm.RPMTAG_REQUIREVERSION,
_prereq)
_conflits, _ = self._gather_aux(self.header, _conflicts,
rpm.RPMTAG_CONFLICTNAME,
rpm.RPMTAG_CONFLICTFLAGS,
rpm.RPMTAG_CONFLICTVERSION)
_provides, _ = self._gather_aux(self.header, _provides,
rpm.RPMTAG_PROVIDENAME,
rpm.RPMTAG_PROVIDEFLAGS,
rpm.RPMTAG_PROVIDEVERSION)
_obsoletes, _ = self._gather_aux(self.header, _obsoletes,
rpm.RPMTAG_OBSOLETENAME,
rpm.RPMTAG_OBSOLETEFLAGS,
rpm.RPMTAG_OBSOLETEVERSION)
_recommends, _ = self._gather_aux(self.header, _recommends,
rpm.RPMTAG_RECOMMENDNAME,
rpm.RPMTAG_RECOMMENDFLAGS,
rpm.RPMTAG_RECOMMENDVERSION)
_suggests, _ = self._gather_aux(self.header, _suggests,
rpm.RPMTAG_SUGGESTNAME,
rpm.RPMTAG_SUGGESTFLAGS,
rpm.RPMTAG_SUGGESTVERSION)
_enhances, _ = self._gather_aux(self.header, _enhances,
rpm.RPMTAG_ENHANCENAME,
rpm.RPMTAG_ENHANCEFLAGS,
rpm.RPMTAG_ENHANCEVERSION)
_supplements, _ = self._gather_aux(self.header, _supplements,
rpm.RPMTAG_SUPPLEMENTNAME,
rpm.RPMTAG_SUPPLEMENTFLAGS,
rpm.RPMTAG_SUPPLEMENTVERSION)
return (_requires, _prereq, _provides, _conflicts, _obsoletes, _recommends,
_suggests, _enhances, _supplements)
def scriptprog(self, which):
"""