1 |
commit: 6778dcf7eff2adc62e616c8ae998ac9e74298c6f |
2 |
Author: André Erdmann <dywi <AT> mailerd <DOT> de> |
3 |
AuthorDate: Thu Aug 29 12:30:15 2013 +0000 |
4 |
Commit: André Erdmann <dywi <AT> mailerd <DOT> de> |
5 |
CommitDate: Thu Aug 29 12:30:15 2013 +0000 |
6 |
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/R_overlay.git;a=commit;h=6778dcf7 |
7 |
|
8 |
packageinfo: parse SRC_URI, get status view object |
9 |
|
10 |
--- |
11 |
roverlay/packageinfo.py | 48 +++++++++++++++++++++++++++++++++++++++++++++++- |
12 |
1 file changed, 47 insertions(+), 1 deletion(-) |
13 |
|
14 |
diff --git a/roverlay/packageinfo.py b/roverlay/packageinfo.py |
15 |
index a3be89b..e991ed7 100644 |
16 |
--- a/roverlay/packageinfo.py |
17 |
+++ b/roverlay/packageinfo.py |
18 |
@@ -17,9 +17,12 @@ import re |
19 |
import os.path |
20 |
import logging |
21 |
|
22 |
+ |
23 |
import roverlay.digest |
24 |
import roverlay.versiontuple |
25 |
import roverlay.db.distmap |
26 |
+import roverlay.util.objects |
27 |
+import roverlay.util.ebuildparser |
28 |
|
29 |
from roverlay import config, strutil |
30 |
from roverlay.rpackage import descriptionreader |
31 |
@@ -66,7 +69,28 @@ from roverlay.rpackage import descriptionreader |
32 |
|
33 |
LOGGER = logging.getLogger ( 'PackageInfo' ) |
34 |
|
35 |
-class PackageInfo ( object ): |
36 |
+ |
37 |
+class PackageInfoStatus ( roverlay.util.objects.ObjectView ): |
38 |
+ |
39 |
+ def __init__ ( self, package_info ): |
40 |
+ super ( PackageInfoStatus, self ).__init__ ( package_info ) |
41 |
+ self.has_ebuild_file = False |
42 |
+ # --- end of __init__ (...) --- |
43 |
+ |
44 |
+ def get_name ( self ): |
45 |
+ return self.deref_safe().get ( 'name' ) |
46 |
+ # --- end of get_name (...) --- |
47 |
+ |
48 |
+ def update ( self ): |
49 |
+ self.has_ebuild_file = bool ( |
50 |
+ self.deref_safe().get ( 'ebuild_file', do_fallback=True ) |
51 |
+ ) |
52 |
+ # --- end of update (...) --- |
53 |
+ |
54 |
+# --- end of PackageInfoStatus --- |
55 |
+ |
56 |
+ |
57 |
+class PackageInfo ( roverlay.util.objects.Referenceable ): |
58 |
"""PackageInfo offers easy, subscriptable access to package |
59 |
information, whether stored or calculated. |
60 |
|
61 |
@@ -92,6 +116,8 @@ class PackageInfo ( object ): |
62 |
called. |
63 |
""" |
64 |
|
65 |
+ CACHE_REF = True |
66 |
+ |
67 |
EBUILDVER_REGEX = re.compile ( '[-]{1,}' ) |
68 |
PKGSUFFIX_REGEX = re.compile ( |
69 |
config.get_or_fail ( 'R_PACKAGE.suffix_regex' ) + '$' |
70 |
@@ -128,6 +154,8 @@ class PackageInfo ( object ): |
71 |
arguments: |
72 |
* **initial_info -- passed to update ( **kw ) |
73 |
""" |
74 |
+ super ( PackageInfo, self ).__init__() |
75 |
+ |
76 |
self._info = dict() |
77 |
self.readonly = False |
78 |
self.logger = LOGGER |
79 |
@@ -188,6 +216,12 @@ class PackageInfo ( object ): |
80 |
return v |
81 |
# --- end of has_valid_selfdeps (...) --- |
82 |
|
83 |
+ def get_status_object ( self ): |
84 |
+ obj = PackageInfoStatus ( self ) |
85 |
+ obj.update() |
86 |
+ return obj |
87 |
+ # --- end of get_status_object (...) --- |
88 |
+ |
89 |
def attach_lazy_action ( self, lazy_action ): |
90 |
"""Attaches a lazy action. |
91 |
Unsafe operation (no locks will be acquired etc.). |
92 |
@@ -684,6 +718,18 @@ class PackageInfo ( object ): |
93 |
self._evars [evar.get_pseudo_hash()] = evar |
94 |
# --- end of add_evar (...) --- |
95 |
|
96 |
+ def parse_ebuild_src_uri ( self, category_name ): |
97 |
+ return roverlay.util.ebuildparser.SrcUriParser.from_file ( |
98 |
+ self._info ['ebuild_file'], self.create_vartable ( category_name ) |
99 |
+ ) |
100 |
+ # --- end of parse_ebuild_src_uri (...) --- |
101 |
+ |
102 |
+ def parse_ebuild_distfiles ( self, category_name ): |
103 |
+ parser = self.parse_ebuild_src_uri ( category_name ) |
104 |
+ for distfile in parser.iter_local_files(): |
105 |
+ yield distfile |
106 |
+ # --- end of parse_ebuild_distfiles (...) --- |
107 |
+ |
108 |
def get_evars ( self ): |
109 |
"""Returns all ebuild variables.""" |
110 |
if hasattr ( self, '_evars' ): |