Gentoo Archives: gentoo-commits

From: "André Erdmann" <dywi@×××××××.de>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/R_overlay:master commit in: roverlay/ebuild/, roverlay/depres/
Date: Mon, 02 Sep 2013 13:20:19
Message-Id: 1378127751.bc06adb9f7fc906c5ee11ad9dfa636255a37266d.dywi@gentoo
1 commit: bc06adb9f7fc906c5ee11ad9dfa636255a37266d
2 Author: André Erdmann <dywi <AT> mailerd <DOT> de>
3 AuthorDate: Mon Sep 2 13:15:51 2013 +0000
4 Commit: André Erdmann <dywi <AT> mailerd <DOT> de>
5 CommitDate: Mon Sep 2 13:15:51 2013 +0000
6 URL: http://git.overlays.gentoo.org/gitweb/?p=proj/R_overlay.git;a=commit;h=bc06adb9
7
8 depres, dep env: provide a ref to the package info
9
10 DepEnv objects can now (optionally) contain a reference to "their" PackageInfo
11 object. This allows the dynamic selfdep pool to decide which rules to try (and
12 in which order) based on the package being processed.
13 (I've chosen a (weak) reference because DepEnv objects should not keep
14 PackageInfos in memory.)
15
16 The actual PackageInfo can then be accessed via <DepEnv>.get_package_info().
17
18 ---
19 roverlay/depres/channels.py | 4 +++-
20 roverlay/depres/depenv.py | 25 ++++++++++++++++++++++---
21 roverlay/ebuild/creation.py | 10 +++++++++-
22 3 files changed, 34 insertions(+), 5 deletions(-)
23
24 diff --git a/roverlay/depres/channels.py b/roverlay/depres/channels.py
25 index ed51df4..30eed5b 100644
26 --- a/roverlay/depres/channels.py
27 +++ b/roverlay/depres/channels.py
28 @@ -32,7 +32,7 @@ class _EbuildJobChannelBase ( DependencyResolverChannel ):
29 add deps, then satisfy_request(): collect/lookup
30 """
31
32 - def __init__ ( self, err_queue, name=None, logger=None ):
33 + def __init__ ( self, err_queue, name=None, logger=None, package_ref=None ):
34 """EbuildJobChannel
35
36 arguments:
37 @@ -41,6 +41,8 @@ class _EbuildJobChannelBase ( DependencyResolverChannel ):
38 """
39 super ( _EbuildJobChannelBase, self ) . __init__ ( main_resolver=None )
40
41 + self.package_ref = package_ref
42 +
43 # this is the number of resolved deps so far,
44 # should only be modified in the join()-method
45 self._depdone = 0
46
47 diff --git a/roverlay/depres/depenv.py b/roverlay/depres/depenv.py
48 index c8fea7e..2e6417e 100644
49 --- a/roverlay/depres/depenv.py
50 +++ b/roverlay/depres/depenv.py
51 @@ -132,13 +132,14 @@ class DepEnv ( object ):
52 STATUS_UNRESOLVABLE = 4
53
54 @classmethod
55 - def from_str ( cls, dep_str, deptype_mask ):
56 + def from_str ( cls, dep_str, deptype_mask, package_ref=None ):
57 """Generator that (pre-)parses a dependency string and creates
58 DepEnv objects for it.
59
60 arguments:
61 * dep_str --
62 * deptype_mask --
63 + * package_ref --
64 """
65 # split dep_str into logically ANDed dependency strings,
66 # unquote them, remove "from <uri>.." entries and replace all
67 @@ -153,22 +154,32 @@ class DepEnv ( object ):
68 ).strip()
69 ),
70 deptype_mask = deptype_mask,
71 + package_ref = package_ref,
72 )
73 # --- end of from_str (...) ---
74
75 - def __init__ ( self, dep_str, deptype_mask ):
76 + def __init__ ( self, dep_str, deptype_mask, package_ref=None ):
77 """Initializes a dependency environment that represents the dependency
78 resolution of one entry in the description data of an R package.
79 Precalculating most (if not all) data since this object will be passed
80 through many dep rules.
81
82 arguments:
83 - * dep_str -- dependency string at it appears in the description data.
84 + * dep_str -- dependency string at it appears in the description data.
85 + * deptype_mask --
86 + * package_ref --
87 """
88 self.deptype_mask = deptype_mask
89 self.status = DepEnv.STATUS_UNDONE
90 self.resolved_by = None
91
92 + self.package_ref = package_ref
93 + if package_ref is not None:
94 + self.get_package_info = self._deref_package_info
95 + else:
96 + self.get_package_info = self._deref_none
97 +
98 +
99 self.dep_str = dep_str
100 self.dep_str_low = dep_str.lower()
101
102 @@ -180,6 +191,14 @@ class DepEnv ( object ):
103
104 # --- end of __init__ (...) ---
105
106 + def _deref_none ( self ):
107 + return None
108 + # --- end of _deref_none (...) ---
109 +
110 + def _deref_package_info ( self ):
111 + return self.package_ref.deref_safe()
112 + # --- end of _deref_package_info (...) ---
113 +
114 def _depsplit ( self ):
115 result = list()
116 for r in self.__class__.VERSION_REGEX:
117
118 diff --git a/roverlay/ebuild/creation.py b/roverlay/ebuild/creation.py
119 index a2a021d..fafd099 100644
120 --- a/roverlay/ebuild/creation.py
121 +++ b/roverlay/ebuild/creation.py
122 @@ -12,6 +12,8 @@ easy-to-use ebuild creation access.
123
124 __all__ = [ 'EbuildCreation', ]
125
126 +#TODO/COULDFIX: merge creation.py and depres.py
127 +
128 import logging
129
130 from roverlay.ebuild import depres, ebuilder, evars
131 @@ -53,6 +55,12 @@ class EbuildCreation ( object ):
132 #self.use_expand_flag_names = None
133 # --- end of __init__ (...) ---
134
135 + def _get_depres_channel ( self, **channel_kw ):
136 + return self.depres_channel_spawner (
137 + package_ref=self.package_info.get_ref(), **channel_kw
138 + )
139 + # --- end of _get_depres_channel (...) ---
140 +
141 def done ( self ) : return self.status < 1
142 def busy ( self ) : return self.status > 0
143 def success ( self ) : return self.status == 0
144 @@ -120,7 +128,7 @@ class EbuildCreation ( object ):
145 # resolve dependencies
146 dep_resolution = depres.EbuildDepRes (
147 self.package_info, self.logger,
148 - run_now=True, depres_channel_spawner=self.depres_channel_spawner,
149 + run_now=True, depres_channel_spawner=self._get_depres_channel,
150 err_queue=self.err_queue
151 )
152 if dep_resolution.success():