1 |
commit: ec043d62f5056b9d7f7bcd929ae578ed0b553368 |
2 |
Author: Michał Górny <mgorny <AT> gentoo <DOT> org> |
3 |
AuthorDate: Thu Jul 28 15:39:03 2011 +0000 |
4 |
Commit: Michał Górny <mgorny <AT> gentoo <DOT> org> |
5 |
CommitDate: Thu Jul 28 15:39:03 2011 +0000 |
6 |
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/gentoopm.git;a=commit;h=ec043d62 |
7 |
|
8 |
Paludis: support blocking atoms. |
9 |
|
10 |
--- |
11 |
gentoopm/paludispm/atom.py | 5 +++-- |
12 |
gentoopm/paludispm/depend.py | 7 ++++++- |
13 |
2 files changed, 9 insertions(+), 3 deletions(-) |
14 |
|
15 |
diff --git a/gentoopm/paludispm/atom.py b/gentoopm/paludispm/atom.py |
16 |
index c416cb1..ea1d233 100644 |
17 |
--- a/gentoopm/paludispm/atom.py |
18 |
+++ b/gentoopm/paludispm/atom.py |
19 |
@@ -69,8 +69,9 @@ class PaludisAtom(PMAtom): |
20 |
paludis.RepositoryNameError): |
21 |
raise InvalidAtomStringError('Incorrect atom: %s' % s) |
22 |
|
23 |
- def __init__(self, s, env): |
24 |
+ def __init__(self, s, env, block = ''): |
25 |
self._incomplete = False |
26 |
+ self._blocking = block |
27 |
if isinstance(s, paludis.PackageDepSpec): |
28 |
self._atom = s |
29 |
else: |
30 |
@@ -114,7 +115,7 @@ class PaludisAtom(PMAtom): |
31 |
def __str__(self): |
32 |
if self._incomplete: |
33 |
raise ValueError('Unable to stringify incomplete atom') |
34 |
- return str(self._atom) |
35 |
+ return '%s%s' % (self._blocking, str(self._atom)) |
36 |
|
37 |
@property |
38 |
def complete(self): |
39 |
|
40 |
diff --git a/gentoopm/paludispm/depend.py b/gentoopm/paludispm/depend.py |
41 |
index 91a2e3c..ee5ad4c 100644 |
42 |
--- a/gentoopm/paludispm/depend.py |
43 |
+++ b/gentoopm/paludispm/depend.py |
44 |
@@ -3,12 +3,14 @@ |
45 |
# (c) 2011 Michał Górny <mgorny@g.o> |
46 |
# Released under the terms of the 2-clause BSD license. |
47 |
|
48 |
-import paludis |
49 |
+import paludis, re |
50 |
|
51 |
from gentoopm.basepm.depend import PMPackageDepSet, PMConditionalDep, \ |
52 |
PMAnyOfDep, PMAllOfDep, PMExactlyOneOfDep, PMBaseDep |
53 |
from gentoopm.paludispm.atom import PaludisAtom |
54 |
|
55 |
+_block_re = re.compile('^!*') |
56 |
+ |
57 |
class PaludisBaseDep(PMBaseDep): |
58 |
def __init__(self, deps, pkg): |
59 |
self._deps = deps |
60 |
@@ -18,6 +20,9 @@ class PaludisBaseDep(PMBaseDep): |
61 |
for d in self._deps: |
62 |
if isinstance(d, paludis.PackageDepSpec): |
63 |
yield PaludisAtom(d, self._pkg._env) |
64 |
+ elif isinstance(d, paludis.BlockDepSpec): |
65 |
+ yield PaludisAtom(d.blocking, self._pkg._env, |
66 |
+ block = _block_re.match(d.text).group(0)) |
67 |
elif isinstance(d, paludis.AnyDepSpec): |
68 |
yield PaludisAnyOfDep(d, self._pkg) |
69 |
elif isinstance(d, paludis.AllDepSpec): |