From: Frank Brehm Date: Thu, 5 Mar 2015 06:46:46 +0000 (+0100) Subject: Analyzed entries in package.keywords files. X-Git-Url: https://git.uhu-banane.org/?a=commitdiff_plain;h=74a81bacbec75dd96b39b73eca44e2d412e0afeb;p=scripts%2Froot-bin.git Analyzed entries in package.keywords files. --- diff --git a/cleanup-pkg-keywords b/cleanup-pkg-keywords index 962ba2c..85007c8 100755 --- a/cleanup-pkg-keywords +++ b/cleanup-pkg-keywords @@ -12,10 +12,16 @@ # Standard modules import sys import os +import re import logging from distutils.version import LooseVersion +# portage stuff +from portage.versions import pkgcmp, pkgsplit, catpkgsplit +from portage.dep import get_operator, dep_getcpv, dep_getslot, isvalidatom +from portage.dep import isjustname + # own modules: from pb_base.app import PbApplicationError from pb_base.app import PbApplication @@ -36,6 +42,10 @@ class CleanupPkgKeywordsApp(PbApplication): Application class for the 'cleanup-pkg-keywords' application. """ + re_empty_line = re.compile(r'^\s*$') + re_comment = re.compile(r'^\s*#') + re_line_keywords = re.compile(r'^\s*(\S+)(:?\s+.*)?$') + # ------------------------------------------------------------------------- def __init__( self, verbose=0, version=__version__, *arg, **kwargs): @@ -167,8 +177,56 @@ class CleanupPkgKeywordsApp(PbApplication): # ------------------------------------------------------------------------- def perform_file(self, filename): - log.info("Performing %r ...", filename) + log.info("Performing %r ...", filename) + + with open(filename, 'rt') as fh: + + line_nr = 0 + for line in fh.readlines(): + line_nr += 1 + if self.re_empty_line.search(line) or self.re_comment.search(line): + continue + match = self.re_line_keywords.search(line) + if not match: + log.error( + 'Invalid line %r in %r (%d) found.', line.rstrip(), + filename, line_nr) + continue + mypkg = match.group(1) + if not isvalidatom(mypkg): + log.error( + 'Invalid atom %r in %r (%d) found.', mypkg, + filename, line_nr) + continue + log.debug("Checking atom %r in %r (%d) ...", mypkg, + filename, line_nr) + my_operator = get_operator(mypkg) + my_cpv = dep_getcpv(mypkg) + my_slot = dep_getslot(mypkg) + if self.verbose > 2: + log.debug("Operator: %r, CPV: %r, slot: %r", + my_operator, my_cpv, my_slot) + if not my_cpv: + log.error( + 'Invalid Package name %r in %r (%d) found.', mypkg, + filename, line_nr) + continue + if isjustname(my_cpv): + self.check_package(my_cpv, my_slot, None, None, my_operator) + else: + splitted = pkgsplit(my_cpv) + if self.verbose > 2: + log.debug("Splitted CPV: %r", splitted) + self.check_package( + splitted[0], my_slot, splitted[1], + splitted[2], my_operator) + + # ------------------------------------------------------------------------- + def check_package(self, package, slot, version, release, operator): + log.debug( + "Checking package %r, slot %r, version %r, release: %r, operator %r ...", + package, slot, version, release, operator) # =============================================================================