2009-09-02 18:03:41 +02:00
|
|
|
# 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()
|
2010-01-27 18:18:50 +01:00
|
|
|
for af in (af for af in alt_files if not af in ghost_files):
|
2009-09-02 18:03:41 +02:00
|
|
|
if af in files:
|
2010-01-27 18:18:50 +01:00
|
|
|
printWarning(pkg, 'generic-name-not-marked-as-ghost %s' % (af))
|
|
|
|
else:
|
|
|
|
printWarning(pkg, 'generic-name-not-in-filelist %s' % af)
|
2009-09-02 18:03:41 +02:00
|
|
|
|
|
|
|
|
|
|
|
check=CheckAlternativesGhostFiles()
|
|
|
|
|
|
|
|
if Config.info:
|
|
|
|
addDetails(
|
|
|
|
|
2010-01-27 18:18:50 +01:00
|
|
|
'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.''',
|
2009-09-02 18:03:41 +02:00
|
|
|
|
2010-01-27 18:18:50 +01:00
|
|
|
'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.''',
|
2009-09-02 18:03:41 +02:00
|
|
|
|
|
|
|
)
|