rpmlint/Filter.py

125 lines
3.1 KiB
Python

# -*- coding: utf-8 -*-
#############################################################################
# File : Filter.py
# Package : rpmlint
# Author : Frederic Lepied
# Created on : Sat Oct 23 15:52:27 1999
# Version : $Id$
# Purpose : filter the output of rpmlint to allow exceptions.
#############################################################################
import textwrap
import Config
try:
import Testing
except ImportError:
Testing = None
_diagnostic = list()
_badness_score = 0
printed_messages = { "I": 0, "W": 0, "E": 0 }
def printInfo(pkg, reason, *details):
_print("I", pkg, reason, details)
def printWarning(pkg, reason, *details):
_print("W", pkg, reason, details)
def printError(pkg, reason, *details):
_print("E", pkg, reason, details)
def _print(msgtype, pkg, reason, details):
global printed_messages, _badness_score, _diagnostics
threshold = badnessThreshold()
badness = 0
if threshold >= 0:
badness = Config.badness(reason)
msgtype = badness and "E" or "W"
ln = ""
if pkg.current_linenum is not None:
ln = "%s:" % pkg.current_linenum
arch = ""
if pkg.arch is not None:
arch = ".%s" % pkg.arch
s = "%s%s:%s %s: %s" % (pkg.name, arch, ln, msgtype, reason)
if badness:
s = s + " (Badness: %d)" % badness
for d in details:
s = s + " %s" % d
if Testing and Testing.isTest():
Testing.addOutput(s)
else:
if not Config.isFiltered(s):
printed_messages[msgtype] += 1
_badness_score += badness
if threshold >= 0:
_diagnostic.append(s + "\n")
else:
print (s)
if Config.info:
printDescriptions(reason)
return True
return False
def printDescriptions(reason):
try:
d = _details[reason]
if d and d != '' and d != "\n":
print (textwrap.fill(d, 78))
print ("")
except KeyError:
pass
def _diag_sortkey(x):
xs = x.split()
return (xs[2], xs[1])
def printAllReasons():
threshold = badnessThreshold()
if threshold < 0:
return False
global _badness_score, _diagnostic
_diagnostic.sort(key = _diag_sortkey, reverse = True)
last_reason = ''
for diag in _diagnostic:
if Config.info:
reason = diag.split()[2]
if reason != last_reason:
if len(last_reason):
printDescriptions(last_reason)
last_reason = reason
print (diag)
if Config.info and len(last_reason):
printDescriptions(last_reason)
_diagnostic = list()
return _badness_score > threshold
_details = {}
def addDetails(*details):
for idx in range(len(details)/2):
_details[details[idx*2]] = details[idx*2+1]
def badnessScore():
global _badness_score
return _badness_score
def badnessThreshold():
return Config.getOption("BadnessThreshold", -1)
# Filter.py ends here
# Local variables:
# indent-tabs-mode: nil
# py-indent-offset: 4
# End:
# ex: ts=4 sw=4 et