SHA256
1
0
forked from pool/rpmlint
rpmlint/CheckAlternativesGhostFiles.py
OBS User autobuild 5e20a03ee9 Accepting request 30231 from Base:System
Copy from Base:System/rpmlint based on submit request 30231 from user lnussel

OBS-URL: https://build.opensuse.org/request/show/30231
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/rpmlint?expand=0&rev=50
2010-01-27 17:18:50 +00:00

82 lines
2.5 KiB
Python

# vim:sw=4:et
#############################################################################
# File : CheckAlternativesGhostFiles.py
# Package : rpmlint
# Author : Michal Vyskocil
# Purpose : Check if files used by update-alternatives are marked as %ghost
#############################################################################
from Filter import *
import AbstractCheck
import rpm
class CheckAlternativesGhostFiles(AbstractCheck.AbstractCheck):
INSTALL="--install"
SLAVE="--slave"
def __init__(self):
AbstractCheck.AbstractCheck.__init__(self, "CheckAlternativesGhostFiles")
@classmethod
def read_ghost_files(cls, script):
ghost_files = []
if not script or not 'update-alternatives' in script:
return ghost_files
for command in ( \
c.replace('\\\n', '').strip() \
for c in script.split('update-alternatives') \
if cls.INSTALL in c):
#parse install
xs = command.split(None, 4)
ghost_files.append(xs[1])
if cls.SLAVE in command:
for sc in ( \
c.strip() \
for c in command[command.index(cls.SLAVE):].split(cls.SLAVE) \
if c.strip() != ''):
xs = sc.split(None, 2)
ghost_files.append(xs[0])
return ghost_files
def check(self, pkg):
if pkg.isSource():
return
alt_files = []
for script in (pkg.header[tag] for tag in (rpm.RPMTAG_POSTIN, rpm.RPMTAG_PREIN, rpm.RPMTAG_POSTTRANS)):
alt_files.extend(self.read_ghost_files(script))
files = pkg.files()
ghost_files = pkg.ghostFiles()
for af in (af for af in alt_files if not af in ghost_files):
if af in files:
printWarning(pkg, 'generic-name-not-marked-as-ghost %s' % (af))
else:
printWarning(pkg, 'generic-name-not-in-filelist %s' % af)
check=CheckAlternativesGhostFiles()
if Config.info:
addDetails(
'generic-name-not-marked-as-ghost',
'''The generic name is not marked as a ghost, which may cause a problems during
update. Mark it as a %ghost in %files section.''',
'generic-name-not-in-filelist',
'''The generic name is not in a filelist of package, add it to list marked as
%ghost. Note: this error will be raised, if you use a hash ($) in file name,
use rpm macros in spec file instead.''',
)