from portage.versions import catsplit, catpkgsplit
from portage.sets.base import PackageSet
-from portage.sets import SetConfigError
+from portage.sets import SetConfigError, get_boolean
from portage.dbapi.vartree import dblink
from portage.util import grabfile
_builderGetRepository = classmethod(_builderGetRepository)
def _builderGetVisible(cls, options):
- visible = options.get("only_visible", "true").lower()
- if visible not in ["1", "0", "yes", "no", "true", "false", "on", "off"]:
- raise SetConfigError("invalid value for only_visible: %s" % visible)
- return bool(visible in ["1", "yes", "true", "on"])
+ return get_boolean(options, "only_visible", True)
_builderGetVisible = classmethod(_builderGetVisible)
def singleBuilder(cls, options, settings, trees):
self._setAtoms(self.mapPathsToAtoms(consumers))
def singleBuilder(cls, options, settings, trees):
- if options.get("debug", "true").lower() in ["true", "on", "1", "yes"]:
- debug = True
- else:
- debug = False
+ debug = get_boolean(options, "debug", False)
return MissingLibraryConsumerSet(trees["vartree"].dbapi, debug=debug)
singleBuilder = classmethod(singleBuilder)
from portage.locks import lockfile, unlockfile
from portage import portage_gid
from portage.sets.base import PackageSet, EditablePackageSet
-from portage.sets import SetConfigError, SETPREFIX
+from portage.sets import SetConfigError, SETPREFIX, get_boolean
from portage.env.loaders import ItemFileLoader, KeyListFileLoader
from portage.env.validators import ValidAtomValidator
from portage import dep_getkey, cpv_getkey
class StaticFileSet(EditablePackageSet):
_operations = ["merge", "unmerge"]
- def __init__(self, filename):
+ def __init__(self, filename, greedy=False, dbapi=None):
super(StaticFileSet, self).__init__()
self._filename = filename
self._mtime = None
self.description = "Package set loaded from file %s" % self._filename
self.loader = ItemFileLoader(self._filename, self._validate)
+ if greedy and not dbapi:
+ self.errors.append("%s configured as greedy set, but no dbapi instance passed in constructor" % self._filename)
+ greedy = False
+ self.greedy = greedy
+ self.dbapi = dbapi
metadata = grabfile(self._filename + ".metadata")
key = None
raise
del e
data = {}
- self._setAtoms(data.keys())
+ if self.greedy:
+ atoms = []
+ for a in data.keys():
+ matches = self.dbapi.match(a)
+ if len(matches) > 1:
+ for cpv in matches:
+ atoms.append(dep_getkey(cpv)+":"+self.dbapi.aux_get(cpv, ["SLOT"])[0])
+ else:
+ atoms.append(a)
+ else:
+ atoms = data.keys()
+ self._setAtoms(atoms)
self._mtime = mtime
def singleBuilder(self, options, settings, trees):
if not "filename" in options:
raise SetConfigError("no filename specified")
- return ConfigFileSet(options[filename])
+ greedy = get_boolean(options, "greedy", True)
+ return StaticFileSet(options["filename"], greedy=greedy, dbapi=trees["vartree"].dbapi)
singleBuilder = classmethod(singleBuilder)
def multiBuilder(self, options, settings, trees):
name_pattern = options.get("name_pattern", "sets/$name")
if not "$name" in name_pattern and not "${name}" in name_pattern:
raise SetConfigError("name_pattern doesn't include $name placeholder")
+ greedy = get_boolean(options, "greedy", True)
if os.path.isdir(directory):
for filename in os.listdir(directory):
if filename.endswith(".metadata"):
continue
myname = name_pattern.replace("$name", filename)
myname = myname.replace("${name}", filename)
- rValue[myname] = StaticFileSet(os.path.join(directory, filename))
+ rValue[myname] = StaticFileSet(os.path.join(directory, filename), greedy=greedy, dbapi=trees["vartree"].dbapi)
return rValue
multiBuilder = classmethod(multiBuilder)
def singleBuilder(self, options, settings, trees):
if not "filename" in options:
raise SetConfigError("no filename specified")
- return ConfigFileSet(options[filename])
+ return ConfigFileSet(options["filename"])
singleBuilder = classmethod(singleBuilder)
def multiBuilder(self, options, settings, trees):
from portage.util import grabfile, write_atomic
from portage.sets.base import PackageSet
from portage.versions import catpkgsplit, pkgcmp
+from portage.sets import get_boolean
__all__ = ["SecuritySet", "NewGlsaSet", "NewAffectedSet", "AffectedSet"]
myglsa.inject()
def singleBuilder(cls, options, settings, trees):
- if "use_emerge_resoler" in options \
- and options.get("use_emerge_resolver").lower() in ["1", "yes", "true", "on"]:
- least_change = False
- else:
- least_change = True
+ least_change = not get_boolean(options, "use_emerge_resolver", False)
return cls(settings, trees["vartree"].dbapi, trees["porttree"].dbapi, least_change=least_change)
singleBuilder = classmethod(singleBuilder)