1 |
commit: 4bf5f0fe191531185c15fb2efa48b06becbc08fd |
2 |
Author: Ralph Sennhauser <sera <AT> gentoo <DOT> org> |
3 |
AuthorDate: Fri Dec 27 16:49:15 2013 +0000 |
4 |
Commit: Ralph Sennhauser <sera <AT> gentoo <DOT> org> |
5 |
CommitDate: Sat Dec 28 12:26:30 2013 +0000 |
6 |
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/java-config.git;a=commit;h=4bf5f0fe |
7 |
|
8 |
VersionManager: Drop dependency on Portage |
9 |
|
10 |
Replace dep-string filtering with a much simpler but non validating |
11 |
internal algorithm. BGO#464608 |
12 |
|
13 |
Add more tests |
14 |
|
15 |
--- |
16 |
src/java_config_2/VersionManager.py | 43 ++++++++++++++++++++++--------------- |
17 |
tests/testsuite/VersionManager.py | 12 ++++++++++- |
18 |
2 files changed, 37 insertions(+), 18 deletions(-) |
19 |
|
20 |
diff --git a/src/java_config_2/VersionManager.py b/src/java_config_2/VersionManager.py |
21 |
index c3fcc3f..7b94a8c 100644 |
22 |
--- a/src/java_config_2/VersionManager.py |
23 |
+++ b/src/java_config_2/VersionManager.py |
24 |
@@ -4,9 +4,6 @@ |
25 |
# Copyright 2005-2013 Gentoo Foundation |
26 |
# Distributed under the terms of the GNU General Public license v2 |
27 |
|
28 |
-import sys |
29 |
-sys.path.append("/usr/lib/portage/pym") |
30 |
- |
31 |
from . import VM, Errors |
32 |
from java_config_2.FileParser import * |
33 |
import os, glob, re |
34 |
@@ -110,23 +107,35 @@ class VersionManager: |
35 |
def filter_depend( self, atoms ): |
36 |
"""Filter the dependency string for useful information""" |
37 |
|
38 |
- import os |
39 |
+ def dep_string_reduce(dep_string,enabled_useflags): |
40 |
+ dest = [] |
41 |
+ tokens = iter(dep_string.split()) |
42 |
+ useflags = enabled_useflags.split() |
43 |
+ |
44 |
+ for token in tokens: |
45 |
+ if token[-1] == "?": |
46 |
+ if token[:-1] not in useflags: |
47 |
+ level = 0 |
48 |
+ while 1: |
49 |
+ token = next(tokens) |
50 |
+ if token == "(": |
51 |
+ level+=1 |
52 |
+ if token == ")": |
53 |
+ level-=1 |
54 |
+ if level < 1: |
55 |
+ break |
56 |
+ continue |
57 |
+ elif token == "(" or token == ")": |
58 |
+ continue |
59 |
+ else: |
60 |
+ dest.append(token) |
61 |
+ |
62 |
+ return " ".join(dest) |
63 |
+ |
64 |
# gjl does not use use flags |
65 |
try: |
66 |
use = os.environ["USE"] |
67 |
- |
68 |
- # Local import to avoid initializing portage elsewhere |
69 |
- try: |
70 |
- from portage.dep import use_reduce,paren_reduce |
71 |
- except ImportError: |
72 |
- from portage_dep import use_reduce,paren_reduce |
73 |
- from portage import flatten |
74 |
- |
75 |
- # Normalize white space for Portage |
76 |
- atoms = " ".join(atoms.split()) |
77 |
- |
78 |
- # Remove conditional depends that are not turned on |
79 |
- atoms = " ".join(flatten(use_reduce(paren_reduce(atoms),uselist=use))) |
80 |
+ atoms = dep_string_reduce(atoms, use) |
81 |
except KeyError: |
82 |
pass |
83 |
return atoms |
84 |
|
85 |
diff --git a/tests/testsuite/VersionManager.py b/tests/testsuite/VersionManager.py |
86 |
index 3700be8..cc8a50b 100644 |
87 |
--- a/tests/testsuite/VersionManager.py |
88 |
+++ b/tests/testsuite/VersionManager.py |
89 |
@@ -46,11 +46,21 @@ class TestVersionManager(unittest.TestCase): |
90 |
rmatch = "|| =virtual/jdk-1.5 =virtual/jdk-1.4 dev-java/ant-core java-virtuals/jaf" |
91 |
self.assertEquals(self.verman.filter_depend(self.example_dep_or), rmatch) |
92 |
|
93 |
- def test_filter_depend_use(self): |
94 |
+ def test_filter_depend_use_enabled(self): |
95 |
os.environ["USE"] = "java" |
96 |
rmatch = ">=virtual/jdk-1.5* dev-java/ant-core java-virtuals/jaf" |
97 |
self.assertEquals(self.verman.filter_depend(self.example_dep_use), rmatch) |
98 |
|
99 |
+ def test_filter_depend_use_disabled(self): |
100 |
+ os.environ["USE"] = "" |
101 |
+ rmatch = "dev-java/ant-core java-virtuals/jaf" |
102 |
+ self.assertEquals(self.verman.filter_depend(self.example_dep_use), rmatch) |
103 |
+ |
104 |
+ def test_filter_depend_use_unset(self): |
105 |
+ del os.environ["USE"] |
106 |
+ rmatch = self.example_dep_use |
107 |
+ self.assertEquals(self.verman.filter_depend(self.example_dep_use), rmatch) |
108 |
+ |
109 |
def test_version_satisfies(self): |
110 |
vm = self.em.get_vm('sun-jdk-1.6') |
111 |
self.assertTrue(self.verman.version_satisfies('>=virtual/jdk-1.5', vm)) |