diff options
author | André Erdmann <dywi@mailerd.de> | 2014-07-17 15:53:22 +0200 |
---|---|---|
committer | André Erdmann <dywi@mailerd.de> | 2014-07-17 15:53:22 +0200 |
commit | eb00ed0ad07d6453475b1ddbf0c9da641983c5d0 (patch) | |
tree | 489fc76a78d84d7626e5a84d0857689f1b9f5314 /roverlay/packageinfo.py | |
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/packageinfo.py')
-rw-r--r-- | roverlay/packageinfo.py | 60 |
1 files changed, 40 insertions, 20 deletions
diff --git a/roverlay/packageinfo.py b/roverlay/packageinfo.py index 7ed66c7..43989be 100644 --- a/roverlay/packageinfo.py +++ b/roverlay/packageinfo.py @@ -23,9 +23,12 @@ import roverlay.versiontuple import roverlay.db.distmap import roverlay.util.objects import roverlay.util.ebuildparser +import roverlay.util.portage_regex.default from roverlay import config, strutil from roverlay.rpackage import descriptionreader +from roverlay.util.portage_regex.default import RE_PVR + # PackageInfo info keys know to be used in roverlay's modules: # *** some keys are not listed here (FIXME) *** @@ -70,6 +73,40 @@ from roverlay.rpackage import descriptionreader LOGGER = logging.getLogger ( 'PackageInfo' ) + + +def split_pvr_str ( pvr_str ): + """Helper functions that splits a $PVR string into a version tuple ($PV) + and an int ($PR). + + arguments: + * pvr_str -- + """ + match = RE_PVR.match ( pvr_str ) + + if not match: + raise ValueError ( "invalid pvr: {!s}".format ( pvr_str ) ) + + match_vars = match.groupdict() + pv_list = [ int(z) for z in match_vars['version'].split('.') ] + + if match_vars ['version_suffix']: + # not supported + version_tuple = ( + roverlay.versiontuple.SuffixedIntVersionTuple ( + pv_list, match_vars ['version_suffix'] + ) + ) + else: + version_tuple = ( + roverlay.versiontuple.IntVersionTuple ( pv_list ) + ) + + return ( version_tuple, int ( match_vars['revision'] or 0 ) ) +# --- end of split_pvr_str (...) --- + + + class PackageInfoStatus ( roverlay.util.objects.ObjectView ): def __init__ ( self, package_info ): @@ -880,27 +917,10 @@ class PackageInfo ( roverlay.util.objects.Referenceable ): # --- end of _use_filename (...) --- def _use_pvr ( self, pvr ): - # 0.1_pre2-r17 -> ( ( 0, 1 ), ( 17 ) ) - pv_str, DONT_CARE, pr_str = pvr.partition ( '-r' ) - pv, DONT_CARE, pv_suffix = pv_str.partition ( '_' ) - - # non-digit chars in pv are not supported - pv_list = [ int(z) for z in pv.split ( '.' ) ] - - if pv_suffix: - # not supported - self._info ['version'] = ( - roverlay.versiontuple.SuffixedIntVersionTuple ( - pv_list, pv_suffix - ) - ) - else: - self._info ['version'] = ( - roverlay.versiontuple.IntVersionTuple ( pv_list ) - ) - - self._info ['rev'] = int ( pr_str ) if pr_str else 0 + version_tuple, revision = split_pvr_str ( pvr ) + self._info ['version'] = version_tuple + self._info ['rev'] = revision self._info ['ebuild_verstr'] = pvr # --- end of _use_pvr (...) --- |