* [gentoo-commits] proj/java-config:master commit in: src/java_config_2/, tests/testsuite/
@ 2013-12-28 13:15 Ralph Sennhauser
0 siblings, 0 replies; only message in thread
From: Ralph Sennhauser @ 2013-12-28 13:15 UTC (permalink / raw
To: gentoo-commits
commit: 4bf5f0fe191531185c15fb2efa48b06becbc08fd
Author: Ralph Sennhauser <sera <AT> gentoo <DOT> org>
AuthorDate: Fri Dec 27 16:49:15 2013 +0000
Commit: Ralph Sennhauser <sera <AT> gentoo <DOT> org>
CommitDate: Sat Dec 28 12:26:30 2013 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/java-config.git;a=commit;h=4bf5f0fe
VersionManager: Drop dependency on Portage
Replace dep-string filtering with a much simpler but non validating
internal algorithm. BGO#464608
Add more tests
---
src/java_config_2/VersionManager.py | 43 ++++++++++++++++++++++---------------
tests/testsuite/VersionManager.py | 12 ++++++++++-
2 files changed, 37 insertions(+), 18 deletions(-)
diff --git a/src/java_config_2/VersionManager.py b/src/java_config_2/VersionManager.py
index c3fcc3f..7b94a8c 100644
--- a/src/java_config_2/VersionManager.py
+++ b/src/java_config_2/VersionManager.py
@@ -4,9 +4,6 @@
# Copyright 2005-2013 Gentoo Foundation
# Distributed under the terms of the GNU General Public license v2
-import sys
-sys.path.append("/usr/lib/portage/pym")
-
from . import VM, Errors
from java_config_2.FileParser import *
import os, glob, re
@@ -110,23 +107,35 @@ class VersionManager:
def filter_depend( self, atoms ):
"""Filter the dependency string for useful information"""
- import os
+ def dep_string_reduce(dep_string,enabled_useflags):
+ dest = []
+ tokens = iter(dep_string.split())
+ useflags = enabled_useflags.split()
+
+ for token in tokens:
+ if token[-1] == "?":
+ if token[:-1] not in useflags:
+ level = 0
+ while 1:
+ token = next(tokens)
+ if token == "(":
+ level+=1
+ if token == ")":
+ level-=1
+ if level < 1:
+ break
+ continue
+ elif token == "(" or token == ")":
+ continue
+ else:
+ dest.append(token)
+
+ return " ".join(dest)
+
# gjl does not use use flags
try:
use = os.environ["USE"]
-
- # Local import to avoid initializing portage elsewhere
- try:
- from portage.dep import use_reduce,paren_reduce
- except ImportError:
- from portage_dep import use_reduce,paren_reduce
- from portage import flatten
-
- # Normalize white space for Portage
- atoms = " ".join(atoms.split())
-
- # Remove conditional depends that are not turned on
- atoms = " ".join(flatten(use_reduce(paren_reduce(atoms),uselist=use)))
+ atoms = dep_string_reduce(atoms, use)
except KeyError:
pass
return atoms
diff --git a/tests/testsuite/VersionManager.py b/tests/testsuite/VersionManager.py
index 3700be8..cc8a50b 100644
--- a/tests/testsuite/VersionManager.py
+++ b/tests/testsuite/VersionManager.py
@@ -46,11 +46,21 @@ class TestVersionManager(unittest.TestCase):
rmatch = "|| =virtual/jdk-1.5 =virtual/jdk-1.4 dev-java/ant-core java-virtuals/jaf"
self.assertEquals(self.verman.filter_depend(self.example_dep_or), rmatch)
- def test_filter_depend_use(self):
+ def test_filter_depend_use_enabled(self):
os.environ["USE"] = "java"
rmatch = ">=virtual/jdk-1.5* dev-java/ant-core java-virtuals/jaf"
self.assertEquals(self.verman.filter_depend(self.example_dep_use), rmatch)
+ def test_filter_depend_use_disabled(self):
+ os.environ["USE"] = ""
+ rmatch = "dev-java/ant-core java-virtuals/jaf"
+ self.assertEquals(self.verman.filter_depend(self.example_dep_use), rmatch)
+
+ def test_filter_depend_use_unset(self):
+ del os.environ["USE"]
+ rmatch = self.example_dep_use
+ self.assertEquals(self.verman.filter_depend(self.example_dep_use), rmatch)
+
def test_version_satisfies(self):
vm = self.em.get_vm('sun-jdk-1.6')
self.assertTrue(self.verman.version_satisfies('>=virtual/jdk-1.5', vm))
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2013-12-28 13:15 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-12-28 13:15 [gentoo-commits] proj/java-config:master commit in: src/java_config_2/, tests/testsuite/ Ralph Sennhauser
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox