aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndré Erdmann <dywi@mailerd.de>2014-07-17 15:53:22 +0200
committerAndré Erdmann <dywi@mailerd.de>2014-07-17 15:53:22 +0200
commiteb00ed0ad07d6453475b1ddbf0c9da641983c5d0 (patch)
tree489fc76a78d84d7626e5a84d0857689f1b9f5314 /roverlay/overlay
parentaddition control rule gen: in-code documentation (diff)
downloadR_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.py33
-rw-r--r--roverlay/overlay/pkgdir/packagedir_base.py61
-rw-r--r--roverlay/overlay/root.py4
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 ):