]> Frank Brehm's Git Trees - scripts/root-bin.git/commitdiff
Analyzed entries in package.keywords files.
authorFrank Brehm <frank@brehm-online.com>
Thu, 5 Mar 2015 06:46:46 +0000 (07:46 +0100)
committerFrank Brehm <frank@brehm-online.com>
Thu, 5 Mar 2015 06:46:46 +0000 (07:46 +0100)
cleanup-pkg-keywords

index 962ba2c43987fedebe66794647fb93f6af5a3bf1..85007c87d8d015205d9c30345df1973bf1953a30 100755 (executable)
 # 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)
 
 # =============================================================================