If the package has new iuse flags or different use flags then if
--newuse is specified, we need to merge the package. """
if merging==0 and "--newuse" in self.myopts and \
- mytype == "ebuild" and \
vardbapi.cpv_exists(mykey):
- pkgsettings.setcpv(mykey, mydb=portdb)
+ pkgsettings.setcpv(mykey, mydb=mydbapi)
forced_flags = set()
forced_flags.update(pkgsettings.useforce)
forced_flags.update(pkgsettings.usemask)
"""
target_root = settings["ROOT"]
info_mtimes = mtimedb["info"]
+
+ # Load the most current variables from ${ROOT}/etc/profile.env
+ settings.unlock()
+ settings.regenerate()
+ settings.lock()
+
config_protect = settings.get("CONFIG_PROTECT","").split()
infodirs = settings.get("INFOPATH","").split(":") + \
settings.get("INFODIR","").split(":")
def _aux_get(self, mycpv, wants):
mydir = os.path.join(self.root, VDB_PATH, mycpv)
- if not os.path.isdir(mydir):
- raise KeyError(mycpv)
+ try:
+ if not stat.S_ISDIR(os.stat(mydir).st_mode):
+ raise KeyError(mycpv)
+ except OSError, e:
+ if e.errno == errno.ENOENT:
+ raise KeyError(mycpv)
+ del e
+ raise
results = []
for x in wants:
try:
import re, sys, types
import portage.exception
-from portage.exception import InvalidData
+from portage.exception import InvalidData, InvalidAtom
from portage.versions import catpkgsplit, catsplit, pkgcmp, pkgsplit, ververify
def cpvequal(cpv1, cpv2):
return mydep[colon+1:]
return None
+def dep_getusedeps( depend ):
+ """
+ Pull a listing of USE Dependencies out of a dep atom.
+
+ Example usage:
+ >>> dep_getusedeps('app-misc/test:3[foo][-bar]
+ ['foo','-bar']
+
+ @param depend: The depstring to process
+ @type depend: String
+ @rtype: List
+ @return: List of use flags ( or [] if no flags exist )
+ """
+ use_list = []
+ open_bracket = depend.find('[')
+ # -1 = failure (think c++ string::npos)
+ while( open_bracket != -1 ):
+ close_bracket = depend.find(']', open_bracket )
+ if close_bracket == -1:
+ raise InvalidAtom("USE Dependency with no closing bracket: %s" % depend )
+ use = depend[open_bracket + 1: close_bracket]
+ # foo[1:1] may return '' instead of None, we don't want '' in the result
+ if len(use):
+ use_list.append(use)
+ else:
+ raise InvalidAtom("USE Dependency with no use flag ([]): %s" % depend )
+ # Find next use flag
+ open_bracket = depend.find( '[', open_bracket+1 )
+ return use_list
+
_invalid_atom_chars_regexp = re.compile("[()|?]")
def isvalidatom(atom, allow_blockers=False):
bad_prefix_ops = [ ">~", "<~", "~>", "~<" ]
postfix_ops = [ "*", "" ]
- cpvs = ["sys-apps/portage"]
-
+ cpvs = ["sys-apps/portage", "sys-apps/portage-2.1", "sys-apps/portage-2.1",
+ "sys-apps/portage-2.1"]
+ slots = [None,":",":2"]
for cpv in cpvs:
- for prefix in prefix_ops:
- for postfix in postfix_ops:
- self.assertEqual( dep_getcpv(
- prefix + cpv + postfix ), cpv )
- for prefix in bad_prefix_ops:
- for postfix in postfix_ops:
- self.assertNotEqual( dep_getcpv(
- prefix + cpv + postfix ), cpv )
+ for slot in slots:
+ for prefix in prefix_ops:
+ for postfix in postfix_ops:
+ if slot:
+ self.assertEqual( dep_getcpv(
+ prefix + cpv + slot + postfix ), cpv )
+ else:
+ self.assertEqual( dep_getcpv(
+ prefix + cpv + postfix ), cpv )
+ for prefix in bad_prefix_ops:
+ for postfix in postfix_ops:
+ if slot:
+ self.assertNotEqual( dep_getcpv(
+ prefix + cpv + slot + postfix ), cpv )
+ else:
+ self.assertNotEqual( dep_getcpv(
+ prefix + cpv + postfix ), cpv )
\ No newline at end of file
slot_char = ":"
slots = ( "a", "1.2", "1", "IloveVapier", None )
cpvs = ["sys-apps/portage"]
-
+ versions = ["2.1.1","2.1-r1"]
for cpv in cpvs:
- for slot in slots:
- if slot:
- self.assertEqual( dep_getslot(
- cpv + slot_char + slot ), slot )
- else:
- self.assertEqual( dep_getslot( cpv ), slot )
+ for version in versions:
+ for slot in slots:
+ mycpv = cpv[:]
+ if version:
+ cpv += version
+ if slot:
+ self.assertEqual( dep_getslot(
+ cpv + slot_char + slot ), slot )
+ else:
+ self.assertEqual( dep_getslot( cpv ), slot )
self.assertEqual( dep_getslot( "sys-apps/portage:"), "" )
--- /dev/null
+# test_dep_getusedeps.py -- Portage Unit Testing Functionality
+# Copyright 2007 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Id: test_dep_getslot.py 5794 2007-01-27 18:16:08Z antarus $
+
+from unittest import TestCase
+from portage.dep import dep_getusedeps
+
+class DepGetUseDeps(TestCase):
+ """ A simple testcase for dep_getusedeps
+ """
+
+ def testDepGetUseDeps(self):
+
+ useflags = [ '', 'foo', '-bar', ['baz','bar'], ['baz','-bar'] ]
+ cpvs = [ "sys-apps/portage" ]
+ slots = [ None, "0","1","linux-sources-2.5.7","randomstring" ]
+ versions = [ None, "2.1.1", "2.1.1-r2"]
+ for mycpv in cpvs:
+ for version in versions:
+ for slot in slots:
+ for use in useflags:
+ cpv = mycpv[:]
+ if version:
+ cpv += version
+ if slot:
+ cpv += ":" + slot
+ if isinstance( use, list ):
+ for u in use:
+ cpv = cpv + "[" + u + "]"
+ self.assertEqual( dep_getusedeps(
+ cpv ), use )
+ else:
+ if len(use):
+ self.assertEqual( dep_getusedeps(
+ cpv + "[" + use + "]" ), [use] )
+ else:
+ self.assertEqual( dep_getusedeps(
+ cpv + "[" + use + "]" ), [] )
( ">~", ">" ), ("~<", "~"), ( "=~", "=" ),
( "=>", "=" ), ("=<", "=") ]
- testCP = "sys-apps/portage"
-
- for test in tests:
- result = get_operator( test[0] + testCP )
- self.assertEqual( result, test[1] )
+ test_cpvs = ["sys-apps/portage","sys-apps/portage-2.1"]
+ slots = [ None,"1","linux-2.5.6" ]
+ for cpv in test_cpvs:
+ for test in tests:
+ for slot in slots:
+ atom = cpv[:]
+ if slot:
+ atom += ":" + slot
+ result = get_operator( test[0] + atom )
+ self.assertEqual( result, test[1] )
result = get_operator( "=sys-apps/portage*" )
self.assertEqual( result , "=*" )
( ">sys-apps/portage-2.1", True ),
( "<sys-apps/portage-2.1", True ),
( "~sys-apps/portage-2.1", True ),
+ ( "sys-apps/portage-2.1:foo", True ),
+ ( "sys-apps/portage-2.1:", False ),
( ">~cate-gory/foo-1.0", False ),
( ">~category/foo-1.0", False ),
( "<~category/foo-1.0", False ),