diff options
author | 2014-07-17 15:53:22 +0200 | |
---|---|---|
committer | 2014-07-17 15:53:22 +0200 | |
commit | eb00ed0ad07d6453475b1ddbf0c9da641983c5d0 (patch) | |
tree | 489fc76a78d84d7626e5a84d0857689f1b9f5314 /roverlay/overlay | |
parent | addition control rule gen: in-code documentation (diff) | |
download | R_overlay-eb00ed0ad07d6453475b1ddbf0c9da641983c5d0.tar.gz R_overlay-eb00ed0ad07d6453475b1ddbf0c9da641983c5d0.tar.bz2 R_overlay-eb00ed0ad07d6453475b1ddbf0c9da641983c5d0.zip |
use regex for PF/PN/PVR parsing
add && use regex.py from branch feature/webgui
Diffstat (limited to 'roverlay/overlay')
-rw-r--r-- | roverlay/overlay/creator.py | 33 | ||||
-rw-r--r-- | roverlay/overlay/pkgdir/packagedir_base.py | 61 | ||||
-rw-r--r-- | roverlay/overlay/root.py | 4 |
3 files changed, 70 insertions, 28 deletions
diff --git a/roverlay/overlay/creator.py b/roverlay/overlay/creator.py index d38a7af..50ae68b 100644 --- a/roverlay/overlay/creator.py +++ b/roverlay/overlay/creator.py @@ -24,23 +24,44 @@ except ImportError: import Queue as queue -from roverlay import config, errorqueue - -from roverlay.overlay.root import Overlay -from roverlay.overlay.worker import OverlayWorker -from roverlay.packageinfo import PackageInfo -from roverlay.packagerules.rules import PackageRules +import roverlay.config +import roverlay.errorqueue +import roverlay.packageinfo import roverlay.depres.channels + import roverlay.ebuild.creation + +import roverlay.overlay.root +import roverlay.overlay.worker import roverlay.overlay.rulegen import roverlay.overlay.pkgdir.distroot.static + +import roverlay.packagerules.rules +import roverlay.packagerules.generators.addition_control + + import roverlay.recipe.distmap import roverlay.recipe.easyresolver + import roverlay.stats.collector + import roverlay.util.hashpool + +from roverlay import config, errorqueue + +from roverlay.overlay.root import Overlay +from roverlay.overlay.worker import OverlayWorker +from roverlay.packageinfo import PackageInfo +from roverlay.packagerules.rules import PackageRules + + + + + + class OverlayCreator ( object ): """This is a 'R packages -> Overlay' interface.""" diff --git a/roverlay/overlay/pkgdir/packagedir_base.py b/roverlay/overlay/pkgdir/packagedir_base.py index 1acde04..c0c6dd6 100644 --- a/roverlay/overlay/pkgdir/packagedir_base.py +++ b/roverlay/overlay/pkgdir/packagedir_base.py @@ -25,6 +25,8 @@ import weakref import roverlay.config import roverlay.packageinfo import roverlay.util +import roverlay.util.portage_regex +from roverlay.util.portage_regex import RE_PF import roverlay.recipe.distmap @@ -681,41 +683,54 @@ class PackageDirBase ( roverlay.overlay.base.OverlayObject ): def scan_ebuilds(): """Searches for ebuilds in self.physical_location.""" elen = len ( self.__class__.EBUILD_SUFFIX ) - def ebuild_split_pvr ( _file ): - if _file.endswith ( self.__class__.EBUILD_SUFFIX ): - return _file [ : - elen ].split ( '-', 1 ) - else: - return ( None, None ) - # --- end of is_ebuild (...) --- # assuming that self.physical_location exists # (should be verified by category.py:Category) for f in os.listdir ( self.physical_location ): - try: - # filename without suffix ~= ${PF} := ${PN}-${PVR} - pn, pvr = ebuild_split_pvr ( f ) - if pn is None: - # not an ebuild - pass - elif pn == self.name: - yield ( pvr, self.physical_location + os.sep + f ) + if f.endswith ( self.__class__.EBUILD_SUFFIX ): + match = RE_PF.match ( f[:-elen] ) + if match: + match_vars = match.groupdict() + + if match_vars ['PN'] == self.name: + #assert self.name + + # COULDFIX: yield more match vars, e.g. PV,PR + # currently, PackageInfo._use_pvr() + # does a second regex.match to get these vars + # + yield ( + match_vars ['PVR'], + ( self.physical_location + os.sep + f ) + ) + + elif not match_vars ['PN']: + self.logger.warning ( "{!r}: empty PN?".format(f) ) + + else: + # $PN does not match directory name, warn about that + self.logger.warning ( + ( + 'PN {!r} does not match directory name, ' + 'ignoring {!r}.'.format ( pn, f ) + ) + ) + # -- end if <PN> + else: - # $PN does not match directory name, warn about that self.logger.warning ( - "$PN {!r} does not match directory name, ignoring {!r}.".\ - format ( pn, f ) + "could not parse ebuild file name {!r}".format(f) ) - except Exception as err: - self.logger.exception ( err ) - self.logger.warning ( - "ebuild {!r} has an invalid file name!".format ( f ) - ) + # -- end if <regex matches f> + # -- end if <is ebuild file> + # -- end for # --- end of scan_ebuilds (...) --- ebuild_found = stats.ebuilds_scanned.inc # ignore directories without a Manifest file if os.path.isfile ( self.physical_location + os.sep + 'Manifest' ): + # TODO: check_manifest_entry(<file>) for pvr, efile in scan_ebuilds(): if pvr not in self._packages: try: @@ -729,6 +744,8 @@ class PackageDirBase ( roverlay.overlay.base.OverlayObject ): raise else: ebuild_found() + # -- end for + # -- end if # --- end of scan (...) --- def show ( self, stream=sys.stderr ): diff --git a/roverlay/overlay/root.py b/roverlay/overlay/root.py index a33db82..c44d9e3 100644 --- a/roverlay/overlay/root.py +++ b/roverlay/overlay/root.py @@ -842,6 +842,7 @@ class Overlay ( roverlay.overlay.base.OverlayObject ): def scan_categories(): for x in os.listdir ( self.physical_location ): if '-' in x and self.has_dir ( x ): + # COULDFIX: if self.has_dir(x) and x not in { "metadata", ... } yield self._get_category ( x ) # --- end of scan_categories (...) --- @@ -855,6 +856,9 @@ class Overlay ( roverlay.overlay.base.OverlayObject ): raise except Exception as e: self.logger.exception ( e ) + # changed on 2014-07-17: reraise exception, + # scan() should not fail + raise # --- end of scan (...) --- def show ( self, **show_kw ): |