1 |
commit: 1e63873f70f222a087ebde05e9e75e35b2c5b59e |
2 |
Author: Michał Górny <mgorny <AT> gentoo <DOT> org> |
3 |
AuthorDate: Sat Jul 30 18:40:04 2011 +0000 |
4 |
Commit: Michał Górny <mgorny <AT> gentoo <DOT> org> |
5 |
CommitDate: Sat Jul 30 18:40:04 2011 +0000 |
6 |
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/gentoopm.git;a=commit;h=1e63873f |
7 |
|
8 |
Support getting hidden USEflags explicitly. |
9 |
|
10 |
--- |
11 |
gentoopm/basepm/pkg.py | 5 ++++- |
12 |
gentoopm/paludispm/pkg.py | 28 ++++++++++++++++++++-------- |
13 |
gentoopm/pkgcorepm/pkg.py | 7 +++++++ |
14 |
gentoopm/portagepm/pkg.py | 7 +++++++ |
15 |
4 files changed, 38 insertions(+), 9 deletions(-) |
16 |
|
17 |
diff --git a/gentoopm/basepm/pkg.py b/gentoopm/basepm/pkg.py |
18 |
index b2e7581..1442a5b 100644 |
19 |
--- a/gentoopm/basepm/pkg.py |
20 |
+++ b/gentoopm/basepm/pkg.py |
21 |
@@ -307,7 +307,10 @@ class PMPackage(PMAtom, FillMissingComparisons): |
22 |
@abstractproperty |
23 |
def use(self): |
24 |
""" |
25 |
- Get the list of USE flags applying to the ebuild. |
26 |
+ Get the list of USE flags applying to the ebuild. Iterating over the |
27 |
+ list should return only the explicitly listed flags (C{IUSE}), though |
28 |
+ it is also possible to explicitly get other flags (using indexing) |
29 |
+ applying to the ebuild. |
30 |
|
31 |
@type: L{SpaceSepFrozenSet}(L{PMUseFlag}) |
32 |
""" |
33 |
|
34 |
diff --git a/gentoopm/paludispm/pkg.py b/gentoopm/paludispm/pkg.py |
35 |
index 7a9b244..8e77b9d 100644 |
36 |
--- a/gentoopm/paludispm/pkg.py |
37 |
+++ b/gentoopm/paludispm/pkg.py |
38 |
@@ -54,14 +54,26 @@ class PaludisChoice(PMUseFlag): |
39 |
|
40 |
class PaludisChoiceSet(SpaceSepFrozenSet): |
41 |
def __new__(self, choices): |
42 |
- l = [] |
43 |
- for group in choices: |
44 |
- if group.raw_name == 'build_options': # paludis specific |
45 |
- continue |
46 |
- for c in group: |
47 |
- if c.explicitly_listed: |
48 |
- l.append(PaludisChoice(c)) |
49 |
- return SpaceSepFrozenSet.__new__(self, l) |
50 |
+ def _get_iuse(): |
51 |
+ for group in choices: |
52 |
+ if group.raw_name == 'build_options': # paludis specific |
53 |
+ continue |
54 |
+ for c in group: |
55 |
+ if c.explicitly_listed: |
56 |
+ yield PaludisChoice(c) |
57 |
+ |
58 |
+ self._choices = choices |
59 |
+ return SpaceSepFrozenSet.__new__(self, _get_iuse()) |
60 |
+ |
61 |
+ def __getitem__(self, k): |
62 |
+ try: |
63 |
+ return SpaceSepFrozenSet.__getitem__(self, k) |
64 |
+ except KeyError: |
65 |
+ for group in self._choices: |
66 |
+ for c in group: |
67 |
+ if str(c.name_with_prefix) == k: |
68 |
+ return PaludisChoice(c) |
69 |
+ raise |
70 |
|
71 |
class PaludisID(PMPackage, PaludisAtom): |
72 |
def __init__(self, pkg, env): |
73 |
|
74 |
diff --git a/gentoopm/pkgcorepm/pkg.py b/gentoopm/pkgcorepm/pkg.py |
75 |
index 757bc90..f9281c2 100644 |
76 |
--- a/gentoopm/pkgcorepm/pkg.py |
77 |
+++ b/gentoopm/pkgcorepm/pkg.py |
78 |
@@ -63,6 +63,13 @@ class PkgCoreUseSet(SpaceSepFrozenSet): |
79 |
self._use = use |
80 |
return SpaceSepFrozenSet.__new__(self, _get_iuse()) |
81 |
|
82 |
+ def __getitem__(self, k): |
83 |
+ try: |
84 |
+ return SpaceSepFrozenSet.__getitem__(self, k) |
85 |
+ except KeyError: |
86 |
+ # XXX, incorrect flags? |
87 |
+ return PkgCoreUseFlag(k, self._use) |
88 |
+ |
89 |
class PkgCorePackage(PMPackage, PkgCoreAtom): |
90 |
def __init__(self, pkg, repo_index = 0): |
91 |
self._pkg = pkg |
92 |
|
93 |
diff --git a/gentoopm/portagepm/pkg.py b/gentoopm/portagepm/pkg.py |
94 |
index 9ced5ec..9ba5a35 100644 |
95 |
--- a/gentoopm/portagepm/pkg.py |
96 |
+++ b/gentoopm/portagepm/pkg.py |
97 |
@@ -74,6 +74,13 @@ class PortageUseSet(SpaceSepFrozenSet): |
98 |
self._use = use |
99 |
return SpaceSepFrozenSet.__new__(self, _get_iuse()) |
100 |
|
101 |
+ def __getitem__(self, k): |
102 |
+ try: |
103 |
+ return SpaceSepFrozenSet.__getitem__(self, k) |
104 |
+ except KeyError: |
105 |
+ # XXX, incorrect flags? |
106 |
+ return PortageUseFlag(k, self._use) |
107 |
+ |
108 |
class PortageDBCPV(PMPackage, CompletePortageAtom): |
109 |
def __init__(self, cpv, dbapi): |
110 |
self._cpv = cpv |