1 |
commit: 14fa2c10125834937c7c3db5f6495749b1d06d94 |
2 |
Author: André Erdmann <dywi <AT> mailerd <DOT> de> |
3 |
AuthorDate: Fri Aug 2 13:30:12 2013 +0000 |
4 |
Commit: André Erdmann <dywi <AT> mailerd <DOT> de> |
5 |
CommitDate: Fri Aug 2 13:30:12 2013 +0000 |
6 |
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/R_overlay.git;a=commit;h=14fa2c10 |
7 |
|
8 |
manifest implementations: simplify code |
9 |
|
10 |
* moved [overlay]/pkgdir/__init__ to pkgdir/base |
11 |
* pkgdir/base no longer uses importlib, package dir modules/classes are used |
12 |
directly instead (_PACKAGE_DIR_IMPLEMENTATIONS lists PackageDir classes now) |
13 |
* overlay/category sets its pkgdir class in __init__ now |
14 |
|
15 |
--- |
16 |
roverlay/overlay/__init__.py | 4 -- |
17 |
roverlay/overlay/category.py | 15 ++-- |
18 |
roverlay/overlay/creator.py | 2 +- |
19 |
roverlay/overlay/pkgdir/__init__.py | 86 ----------------------- |
20 |
roverlay/overlay/pkgdir/{__init__.py => base.py} | 43 +++--------- |
21 |
roverlay/overlay/pkgdir/packagedir_newmanifest.py | 4 +- |
22 |
6 files changed, 21 insertions(+), 133 deletions(-) |
23 |
|
24 |
diff --git a/roverlay/overlay/__init__.py b/roverlay/overlay/__init__.py |
25 |
index 84cdf31..708f8ae 100644 |
26 |
--- a/roverlay/overlay/__init__.py |
27 |
+++ b/roverlay/overlay/__init__.py |
28 |
@@ -5,7 +5,3 @@ |
29 |
# either version 2 of the License, or (at your option) any later version. |
30 |
|
31 |
"""overlay package""" |
32 |
- |
33 |
-__all__ = [ 'Overlay', ] |
34 |
- |
35 |
-from roverlay.overlay.root import Overlay |
36 |
|
37 |
diff --git a/roverlay/overlay/category.py b/roverlay/overlay/category.py |
38 |
index 751a26d..2fc3a4f 100644 |
39 |
--- a/roverlay/overlay/category.py |
40 |
+++ b/roverlay/overlay/category.py |
41 |
@@ -26,7 +26,10 @@ except ImportError: |
42 |
|
43 |
import roverlay.stats.collector |
44 |
|
45 |
-from roverlay.overlay import pkgdir |
46 |
+import roverlay.overlay.pkgdir.base |
47 |
+##import roverlay.overlay.pkgdir.packagedir_ebuildmanifest |
48 |
+##import roverlay.overlay.pkgdir.packagedir_newmanifest |
49 |
+ |
50 |
|
51 |
class WriteQueueJob ( object ): |
52 |
|
53 |
@@ -100,6 +103,7 @@ class Category ( object ): |
54 |
self.physical_location = directory |
55 |
self.get_header = get_header |
56 |
self.runtime_incremental = runtime_incremental |
57 |
+ self.packagedir_cls = roverlay.overlay.pkgdir.base.get_class() |
58 |
# --- end of __init__ (...) --- |
59 |
|
60 |
def _get_package_dir ( self, pkg_name ): |
61 |
@@ -113,7 +117,7 @@ class Category ( object ): |
62 |
self._lock.acquire() |
63 |
try: |
64 |
if not pkg_name in self._subdirs: |
65 |
- newpkg = pkgdir.get_class() ( |
66 |
+ newpkg = self.packagedir_cls ( |
67 |
name = pkg_name, |
68 |
logger = self.logger, |
69 |
directory = self.physical_location + os.sep + pkg_name, |
70 |
@@ -249,12 +253,7 @@ class Category ( object ): |
71 |
|
72 |
""" |
73 |
if unsafe: |
74 |
- try: |
75 |
- return bool ( |
76 |
- next ( iter ( self._subdirs.values() ) ).MANIFEST_THREADSAFE |
77 |
- ) |
78 |
- except StopIteration: |
79 |
- return True |
80 |
+ return self.packagedir_cls.MANIFEST_THREADSAFE |
81 |
else: |
82 |
for pkgdir in self._subdirs.values(): |
83 |
#if not pkgdir.__class__.MANIFEST_THREADSAFE: |
84 |
|
85 |
diff --git a/roverlay/overlay/creator.py b/roverlay/overlay/creator.py |
86 |
index 32dacbc..96c5531 100644 |
87 |
--- a/roverlay/overlay/creator.py |
88 |
+++ b/roverlay/overlay/creator.py |
89 |
@@ -26,7 +26,7 @@ except ImportError: |
90 |
|
91 |
from roverlay import config, errorqueue |
92 |
|
93 |
-from roverlay.overlay import Overlay |
94 |
+from roverlay.overlay.root import Overlay |
95 |
from roverlay.overlay.worker import OverlayWorker |
96 |
from roverlay.packageinfo import PackageInfo |
97 |
from roverlay.packagerules.rules import PackageRules |
98 |
|
99 |
diff --git a/roverlay/overlay/pkgdir/__init__.py b/roverlay/overlay/pkgdir/__init__.py |
100 |
index 90dfb6e..e69de29 100644 |
101 |
--- a/roverlay/overlay/pkgdir/__init__.py |
102 |
+++ b/roverlay/overlay/pkgdir/__init__.py |
103 |
@@ -1,86 +0,0 @@ |
104 |
-# R overlay -- overlay package, package directory |
105 |
-# -*- coding: utf-8 -*- |
106 |
-# Copyright (C) 2012 André Erdmann <dywi@×××××××.de> |
107 |
-# Distributed under the terms of the GNU General Public License; |
108 |
-# either version 2 of the License, or (at your option) any later version. |
109 |
- |
110 |
-__all__ = [ 'create', 'get_class', ] |
111 |
- |
112 |
-# the actual PackageDir implementation will be loaded after initialization |
113 |
-# of the config module (using importlib.import_module) |
114 |
-import importlib |
115 |
- |
116 |
-import logging |
117 |
- |
118 |
-import roverlay.config |
119 |
- |
120 |
- |
121 |
-# _package_dir_module is an imported module or None |
122 |
-_package_dir_module = None |
123 |
-_package_dir_class = None |
124 |
- |
125 |
-_PACKAGE_DIR_IMPLEMENTATIONS = { |
126 |
- 'none' : 'packagedir_base', |
127 |
- 'default' : 'packagedir_newmanifest', |
128 |
- 'e' : 'packagedir_ebuildmanifest', |
129 |
- 'ebuild' : 'packagedir_ebuildmanifest', |
130 |
- 'next' : 'packagedir_newmanifest', |
131 |
-} |
132 |
- |
133 |
-def _configure(): |
134 |
- """Determines which Manifest implementation to use and sets the |
135 |
- _package_dir_module, _package_dir_class variables accordingly. |
136 |
- """ |
137 |
- |
138 |
- mf_impl = roverlay.config.get_or_fail ( 'OVERLAY.manifest_implementation' ) |
139 |
- |
140 |
- # also accept the internal (module) name of the manifest implementation |
141 |
- pkgdir_impl = ( |
142 |
- _PACKAGE_DIR_IMPLEMENTATIONS.get ( mf_impl, None ) |
143 |
- or ( |
144 |
- mf_impl |
145 |
- if mf_impl in _PACKAGE_DIR_IMPLEMENTATIONS.values() |
146 |
- else None |
147 |
- ) |
148 |
- ) |
149 |
- |
150 |
- if pkgdir_impl is not None: |
151 |
- global _package_dir_module |
152 |
- _package_dir_module = importlib.import_module ( |
153 |
- 'roverlay.overlay.pkgdir.' + pkgdir_impl |
154 |
- ) |
155 |
- |
156 |
- global _package_dir_class |
157 |
- if hasattr ( _package_dir_module, 'PackageDir' ): |
158 |
- _package_dir_class = _package_dir_module.PackageDir |
159 |
- else: |
160 |
- _package_dir_class = _package_dir_module.PackageDirBase |
161 |
- |
162 |
- if hasattr ( _package_dir_class, 'init_cls' ): |
163 |
- _package_dir_class.init_cls() |
164 |
- else: |
165 |
- _package_dir_class.init_base_cls() |
166 |
- |
167 |
- logging.getLogger ('pkgdir').debug ( |
168 |
- 'Using {!r} as manifest implementation.'.format ( mf_impl ) |
169 |
- ) |
170 |
- else: |
171 |
- # NameError, NotImplementedError, ...? |
172 |
- raise Exception ( |
173 |
- "PackageDir/Manifest implementation {} is unknown".format ( mf_impl ) |
174 |
- ) |
175 |
-# --- end of configure (...) --- |
176 |
- |
177 |
-def get_class(): |
178 |
- """Returns the configured PackageDir class.""" |
179 |
- if _package_dir_class is None: |
180 |
- _configure() |
181 |
- return _package_dir_class |
182 |
-# --- end of get_class (...) --- |
183 |
- |
184 |
-def create ( *args, **kwargs ): |
185 |
- """Returns a new PackageDir object by calling the constructor |
186 |
- of the configured PackageDir class (as returned by get_class()). |
187 |
- """ |
188 |
- return get_class() ( *args, **kwargs ) |
189 |
-# --- end of create (...) --- |
190 |
|
191 |
diff --git a/roverlay/overlay/pkgdir/__init__.py b/roverlay/overlay/pkgdir/base.py |
192 |
similarity index 59% |
193 |
copy from roverlay/overlay/pkgdir/__init__.py |
194 |
copy to roverlay/overlay/pkgdir/base.py |
195 |
index 90dfb6e..4d48a3f 100644 |
196 |
--- a/roverlay/overlay/pkgdir/__init__.py |
197 |
+++ b/roverlay/overlay/pkgdir/base.py |
198 |
@@ -6,55 +6,34 @@ |
199 |
|
200 |
__all__ = [ 'create', 'get_class', ] |
201 |
|
202 |
-# the actual PackageDir implementation will be loaded after initialization |
203 |
-# of the config module (using importlib.import_module) |
204 |
-import importlib |
205 |
- |
206 |
import logging |
207 |
|
208 |
import roverlay.config |
209 |
|
210 |
+import roverlay.overlay.pkgdir.packagedir_base |
211 |
+import roverlay.overlay.pkgdir.packagedir_ebuildmanifest |
212 |
+import roverlay.overlay.pkgdir.packagedir_newmanifest |
213 |
+ |
214 |
|
215 |
-# _package_dir_module is an imported module or None |
216 |
-_package_dir_module = None |
217 |
_package_dir_class = None |
218 |
|
219 |
_PACKAGE_DIR_IMPLEMENTATIONS = { |
220 |
- 'none' : 'packagedir_base', |
221 |
- 'default' : 'packagedir_newmanifest', |
222 |
- 'e' : 'packagedir_ebuildmanifest', |
223 |
- 'ebuild' : 'packagedir_ebuildmanifest', |
224 |
- 'next' : 'packagedir_newmanifest', |
225 |
+ 'none' : roverlay.overlay.pkgdir.packagedir_base.PackageDirBase, |
226 |
+ 'default' : roverlay.overlay.pkgdir.packagedir_newmanifest.PackageDir, |
227 |
+ 'e' : roverlay.overlay.pkgdir.packagedir_ebuildmanifest.PackageDir, |
228 |
+ 'ebuild' : roverlay.overlay.pkgdir.packagedir_ebuildmanifest.PackageDir, |
229 |
+ 'next' : roverlay.overlay.pkgdir.packagedir_newmanifest.PackageDir, |
230 |
} |
231 |
|
232 |
def _configure(): |
233 |
"""Determines which Manifest implementation to use and sets the |
234 |
_package_dir_module, _package_dir_class variables accordingly. |
235 |
""" |
236 |
- |
237 |
mf_impl = roverlay.config.get_or_fail ( 'OVERLAY.manifest_implementation' ) |
238 |
|
239 |
- # also accept the internal (module) name of the manifest implementation |
240 |
- pkgdir_impl = ( |
241 |
- _PACKAGE_DIR_IMPLEMENTATIONS.get ( mf_impl, None ) |
242 |
- or ( |
243 |
- mf_impl |
244 |
- if mf_impl in _PACKAGE_DIR_IMPLEMENTATIONS.values() |
245 |
- else None |
246 |
- ) |
247 |
- ) |
248 |
- |
249 |
- if pkgdir_impl is not None: |
250 |
- global _package_dir_module |
251 |
- _package_dir_module = importlib.import_module ( |
252 |
- 'roverlay.overlay.pkgdir.' + pkgdir_impl |
253 |
- ) |
254 |
- |
255 |
+ if mf_impl in _PACKAGE_DIR_IMPLEMENTATIONS: |
256 |
global _package_dir_class |
257 |
- if hasattr ( _package_dir_module, 'PackageDir' ): |
258 |
- _package_dir_class = _package_dir_module.PackageDir |
259 |
- else: |
260 |
- _package_dir_class = _package_dir_module.PackageDirBase |
261 |
+ _package_dir_class = _PACKAGE_DIR_IMPLEMENTATIONS [mf_impl] |
262 |
|
263 |
if hasattr ( _package_dir_class, 'init_cls' ): |
264 |
_package_dir_class.init_cls() |
265 |
|
266 |
diff --git a/roverlay/overlay/pkgdir/packagedir_newmanifest.py b/roverlay/overlay/pkgdir/packagedir_newmanifest.py |
267 |
index 7bbfb86..fb9bd2d 100644 |
268 |
--- a/roverlay/overlay/pkgdir/packagedir_newmanifest.py |
269 |
+++ b/roverlay/overlay/pkgdir/packagedir_newmanifest.py |
270 |
@@ -13,10 +13,10 @@ import threading |
271 |
import roverlay.config |
272 |
|
273 |
import roverlay.overlay.pkgdir.manifest.file |
274 |
-import roverlay.overlay.pkgdir.packagedir_base |
275 |
- |
276 |
from roverlay.overlay.pkgdir.manifest.file import ManifestFile |
277 |
|
278 |
+import roverlay.overlay.pkgdir.packagedir_base |
279 |
+ |
280 |
|
281 |
class PackageDir ( roverlay.overlay.pkgdir.packagedir_base.PackageDirBase ): |
282 |
""" |