aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndré Erdmann <dywi@mailerd.de>2013-08-29 14:30:15 +0200
committerAndré Erdmann <dywi@mailerd.de>2013-08-29 14:30:15 +0200
commit6778dcf7eff2adc62e616c8ae998ac9e74298c6f (patch)
tree57b4ccf4e43383dd1779d3877cb8a72f7ff1312d
parentroverlay/status, ReferenceableDict: inherit Referenceable (diff)
downloadR_overlay-6778dcf7eff2adc62e616c8ae998ac9e74298c6f.tar.gz
R_overlay-6778dcf7eff2adc62e616c8ae998ac9e74298c6f.tar.bz2
R_overlay-6778dcf7eff2adc62e616c8ae998ac9e74298c6f.zip
packageinfo: parse SRC_URI, get status view object
-rw-r--r--roverlay/packageinfo.py48
1 files changed, 47 insertions, 1 deletions
diff --git a/roverlay/packageinfo.py b/roverlay/packageinfo.py
index a3be89b..e991ed7 100644
--- a/roverlay/packageinfo.py
+++ b/roverlay/packageinfo.py
@@ -17,9 +17,12 @@ import re
import os.path
import logging
+
import roverlay.digest
import roverlay.versiontuple
import roverlay.db.distmap
+import roverlay.util.objects
+import roverlay.util.ebuildparser
from roverlay import config, strutil
from roverlay.rpackage import descriptionreader
@@ -66,7 +69,28 @@ from roverlay.rpackage import descriptionreader
LOGGER = logging.getLogger ( 'PackageInfo' )
-class PackageInfo ( object ):
+
+class PackageInfoStatus ( roverlay.util.objects.ObjectView ):
+
+ def __init__ ( self, package_info ):
+ super ( PackageInfoStatus, self ).__init__ ( package_info )
+ self.has_ebuild_file = False
+ # --- end of __init__ (...) ---
+
+ def get_name ( self ):
+ return self.deref_safe().get ( 'name' )
+ # --- end of get_name (...) ---
+
+ def update ( self ):
+ self.has_ebuild_file = bool (
+ self.deref_safe().get ( 'ebuild_file', do_fallback=True )
+ )
+ # --- end of update (...) ---
+
+# --- end of PackageInfoStatus ---
+
+
+class PackageInfo ( roverlay.util.objects.Referenceable ):
"""PackageInfo offers easy, subscriptable access to package
information, whether stored or calculated.
@@ -92,6 +116,8 @@ class PackageInfo ( object ):
called.
"""
+ CACHE_REF = True
+
EBUILDVER_REGEX = re.compile ( '[-]{1,}' )
PKGSUFFIX_REGEX = re.compile (
config.get_or_fail ( 'R_PACKAGE.suffix_regex' ) + '$'
@@ -128,6 +154,8 @@ class PackageInfo ( object ):
arguments:
* **initial_info -- passed to update ( **kw )
"""
+ super ( PackageInfo, self ).__init__()
+
self._info = dict()
self.readonly = False
self.logger = LOGGER
@@ -188,6 +216,12 @@ class PackageInfo ( object ):
return v
# --- end of has_valid_selfdeps (...) ---
+ def get_status_object ( self ):
+ obj = PackageInfoStatus ( self )
+ obj.update()
+ return obj
+ # --- end of get_status_object (...) ---
+
def attach_lazy_action ( self, lazy_action ):
"""Attaches a lazy action.
Unsafe operation (no locks will be acquired etc.).
@@ -684,6 +718,18 @@ class PackageInfo ( object ):
self._evars [evar.get_pseudo_hash()] = evar
# --- end of add_evar (...) ---
+ def parse_ebuild_src_uri ( self, category_name ):
+ return roverlay.util.ebuildparser.SrcUriParser.from_file (
+ self._info ['ebuild_file'], self.create_vartable ( category_name )
+ )
+ # --- end of parse_ebuild_src_uri (...) ---
+
+ def parse_ebuild_distfiles ( self, category_name ):
+ parser = self.parse_ebuild_src_uri ( category_name )
+ for distfile in parser.iter_local_files():
+ yield distfile
+ # --- end of parse_ebuild_distfiles (...) ---
+
def get_evars ( self ):
"""Returns all ebuild variables."""
if hasattr ( self, '_evars' ):