aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'lib/portage/_sets')
-rw-r--r--lib/portage/_sets/ProfilePackageSet.py6
-rw-r--r--lib/portage/_sets/__init__.py50
-rw-r--r--lib/portage/_sets/base.py18
-rw-r--r--lib/portage/_sets/dbapi.py80
-rw-r--r--lib/portage/_sets/files.py59
-rw-r--r--lib/portage/_sets/libs.py11
-rw-r--r--lib/portage/_sets/meson.build15
-rw-r--r--lib/portage/_sets/profiles.py12
-rw-r--r--lib/portage/_sets/security.py4
-rw-r--r--lib/portage/_sets/shell.py6
10 files changed, 142 insertions, 119 deletions
diff --git a/lib/portage/_sets/ProfilePackageSet.py b/lib/portage/_sets/ProfilePackageSet.py
index 1b5c6eae7..8ef7a5609 100644
--- a/lib/portage/_sets/ProfilePackageSet.py
+++ b/lib/portage/_sets/ProfilePackageSet.py
@@ -11,9 +11,7 @@ class ProfilePackageSet(PackageSet):
_operations = ["merge"]
def __init__(self, profiles, debug=False):
- super(ProfilePackageSet, self).__init__(
- allow_repo=any(allow_profile_repo_deps(y) for y in profiles)
- )
+ super().__init__(allow_repo=any(allow_profile_repo_deps(y) for y in profiles))
self._profiles = profiles
if profiles:
desc_profile = profiles[-1]
@@ -22,7 +20,7 @@ class ProfilePackageSet(PackageSet):
description = desc_profile.location
else:
description = None
- self.description = "Profile packages for profile %s" % description
+ self.description = f"Profile packages for profile {description}"
def load(self):
self._setAtoms(
diff --git a/lib/portage/_sets/__init__.py b/lib/portage/_sets/__init__.py
index 15f942b10..295a1e353 100644
--- a/lib/portage/_sets/__init__.py
+++ b/lib/portage/_sets/__init__.py
@@ -9,9 +9,6 @@ __all__ = [
"load_default_config",
]
-import io
-import logging
-import sys
import portage
from portage import os
from portage import load_mod
@@ -181,7 +178,7 @@ class SetConfig:
import random
while setname in parser.sections():
- setname = "%08d" % random.randint(0, 10 ** 10)
+ setname = "%08d" % random.randint(0, 10**10)
parser.add_section(setname)
for k, v in options.items():
@@ -342,7 +339,6 @@ class SetConfig:
def load_default_config(settings, trees):
-
if not _ENABLE_SET_CONFIG:
return SetConfig(None, settings, trees)
@@ -354,21 +350,33 @@ def load_default_config(settings, trees):
vcs_dirs = [_unicode_encode(x, encoding=_encodings["fs"]) for x in VCS_DIRS]
def _getfiles():
- for path, dirs, files in os.walk(os.path.join(global_config_path, "sets")):
- for d in dirs:
- if d in vcs_dirs or d.startswith(b".") or d.endswith(b"~"):
- dirs.remove(d)
- for f in files:
- if not f.startswith(b".") and not f.endswith(b"~"):
- yield os.path.join(path, f)
-
- dbapi = trees["porttree"].dbapi
- for repo in dbapi.getRepositories():
- path = dbapi.getRepositoryPath(repo)
- yield os.path.join(path, "sets.conf")
-
- yield os.path.join(
- settings["PORTAGE_CONFIGROOT"], USER_CONFIG_PATH, "sets.conf"
- )
+ sets_config_paths = [
+ os.path.join(global_config_path, "sets"),
+ *(
+ os.path.join(repo.location, "sets.conf")
+ for repo in trees["porttree"].dbapi.repositories
+ ),
+ os.path.join(settings["PORTAGE_CONFIGROOT"], USER_CONFIG_PATH, "sets.conf"),
+ ]
+
+ dot = "."
+ tilde = "~"
+ if not portage.utf8_mode:
+ dot = _unicode_encode(dot)
+ tilde = _unicode_encode(tilde)
+
+ for sets_config_path in sets_config_paths:
+ if os.path.isdir(sets_config_path):
+ for path, dirs, files in os.walk(sets_config_path):
+ dirs.sort()
+ files.sort()
+ for d in dirs:
+ if d in vcs_dirs or d.startswith(dot) or d.endswith(tilde):
+ dirs.remove(d)
+ for f in files:
+ if not f.startswith(dot) and not f.endswith(tilde):
+ yield os.path.join(path, f)
+ elif os.path.isfile(sets_config_path):
+ yield sets_config_path
return SetConfig(_getfiles(), settings, trees)
diff --git a/lib/portage/_sets/base.py b/lib/portage/_sets/base.py
index 8e540f3c8..537ad4510 100644
--- a/lib/portage/_sets/base.py
+++ b/lib/portage/_sets/base.py
@@ -34,10 +34,8 @@ class PackageSet:
def __iter__(self):
self._load()
- for x in self._atoms:
- yield x
- for x in self._nonatoms:
- yield x
+ yield from self._atoms
+ yield from self._nonatoms
def __bool__(self):
self._load()
@@ -160,9 +158,7 @@ class PackageSet:
class EditablePackageSet(PackageSet):
def __init__(self, allow_wildcard=False, allow_repo=False):
- super(EditablePackageSet, self).__init__(
- allow_wildcard=allow_wildcard, allow_repo=allow_repo
- )
+ super().__init__(allow_wildcard=allow_wildcard, allow_repo=allow_repo)
def update(self, atoms):
self._load()
@@ -223,10 +219,8 @@ class InternalPackageSet(EditablePackageSet):
functions default to allow_repo=False, which is sufficient to ensure
that repo atoms are prohibited when necessary.
"""
- super(InternalPackageSet, self).__init__(
- allow_wildcard=allow_wildcard, allow_repo=allow_repo
- )
- if initial_atoms != None:
+ super().__init__(allow_wildcard=allow_wildcard, allow_repo=allow_repo)
+ if initial_atoms is not None:
self.update(initial_atoms)
def clear(self):
@@ -242,7 +236,7 @@ class InternalPackageSet(EditablePackageSet):
class DummyPackageSet(PackageSet):
def __init__(self, atoms=None):
- super(DummyPackageSet, self).__init__()
+ super().__init__()
if atoms:
self._setAtoms(atoms)
diff --git a/lib/portage/_sets/dbapi.py b/lib/portage/_sets/dbapi.py
index 4a837522f..7c666b47c 100644
--- a/lib/portage/_sets/dbapi.py
+++ b/lib/portage/_sets/dbapi.py
@@ -2,6 +2,7 @@
# Distributed under the terms of the GNU General Public License v2
import glob
+import shlex
import time
from portage import os
@@ -12,7 +13,6 @@ from portage.dep._slot_operator import strip_slots
from portage.localization import _
from portage._sets.base import PackageSet
from portage._sets import SetConfigError, get_boolean
-import portage
__all__ = [
"CategorySet",
@@ -33,7 +33,7 @@ class EverythingSet(PackageSet):
_filter = None
def __init__(self, vdbapi, **kwargs):
- super(EverythingSet, self).__init__()
+ super().__init__()
self._db = vdbapi
def load(self):
@@ -47,7 +47,7 @@ class EverythingSet(PackageSet):
# SLOT installed, in order to avoid the possibility
# of unwanted upgrades as reported in bug #338959.
pkg = pkg_str(cpv, None)
- atom = Atom("%s:%s" % (pkg.cp, pkg.slot))
+ atom = Atom(f"{pkg.cp}:{pkg.slot}")
if self._filter:
if self._filter(atom):
myatoms.append(atom)
@@ -63,7 +63,6 @@ class EverythingSet(PackageSet):
class OwnerSet(PackageSet):
-
_operations = ["merge", "unmerge"]
description = (
@@ -71,7 +70,7 @@ class OwnerSet(PackageSet):
)
def __init__(self, vardb=None, exclude_files=None, files=None):
- super(OwnerSet, self).__init__()
+ super().__init__()
self._db = vardb
self._exclude_files = exclude_files
self._files = files
@@ -105,7 +104,7 @@ class OwnerSet(PackageSet):
if not exclude_paths:
for link, p in vardb._owners.iter_owners(paths):
pkg = pkg_str(link.mycpv, None)
- rValue.add("%s:%s" % (pkg.cp, pkg.slot))
+ rValue.add(f"{pkg.cp}:{pkg.slot}")
else:
all_paths = set()
all_paths.update(paths)
@@ -113,7 +112,7 @@ class OwnerSet(PackageSet):
exclude_atoms = set()
for link, p in vardb._owners.iter_owners(all_paths):
pkg = pkg_str(link.mycpv, None)
- atom = "%s:%s" % (pkg.cp, pkg.slot)
+ atom = f"{pkg.cp}:{pkg.slot}"
rValue.add(atom)
# Returned paths are relative to ROOT and do not have
# a leading slash.
@@ -134,18 +133,17 @@ class OwnerSet(PackageSet):
exclude_files = options.get("exclude-files")
if exclude_files is not None:
- exclude_files = frozenset(portage.util.shlex_split(exclude_files))
+ exclude_files = frozenset(shlex.split(exclude_files))
return cls(
vardb=trees["vartree"].dbapi,
exclude_files=exclude_files,
- files=frozenset(portage.util.shlex_split(options["files"])),
+ files=frozenset(shlex.split(options["files"])),
)
singleBuilder = classmethod(singleBuilder)
class VariableSet(EverythingSet):
-
_operations = ["merge", "unmerge"]
description = (
@@ -156,7 +154,7 @@ class VariableSet(EverythingSet):
def __init__(
self, vardb, metadatadb=None, variable=None, includes=None, excludes=None
):
- super(VariableSet, self).__init__(vardb)
+ super().__init__(vardb)
self._metadatadb = metadatadb
self._variable = variable
self._includes = includes
@@ -167,15 +165,32 @@ class VariableSet(EverythingSet):
if not ebuild:
return False
(values,) = self._metadatadb.aux_get(ebuild, [self._variable])
- values = values.split()
- if self._includes and not self._includes.intersection(values):
+ values_list = values.split()
+
+ if "DEPEND" in self._variable:
+ include_atoms = []
+ for include in self._includes:
+ include_atoms.append(Atom(include))
+
+ for x in use_reduce(values, token_class=Atom, flat=True):
+ if not isinstance(x, Atom):
+ continue
+
+ for include_atom in include_atoms:
+ if include_atom.match(x):
+ return True
+
return False
- if self._excludes and self._excludes.intersection(values):
+
+ if self._includes and not self._includes.intersection(values_list):
return False
+
+ if self._excludes and self._excludes.intersection(values_list):
+ return False
+
return True
def singleBuilder(cls, options, settings, trees):
-
variable = options.get("variable")
if variable is None:
raise SetConfigError(_("missing required attribute: 'variable'"))
@@ -204,7 +219,6 @@ class VariableSet(EverythingSet):
class SubslotChangedSet(PackageSet):
-
_operations = ["merge", "unmerge"]
description = (
@@ -214,7 +228,7 @@ class SubslotChangedSet(PackageSet):
)
def __init__(self, portdb=None, vardb=None):
- super(SubslotChangedSet, self).__init__()
+ super().__init__()
self._portdb = portdb
self._vardb = vardb
@@ -225,7 +239,7 @@ class SubslotChangedSet(PackageSet):
cp_list = self._vardb.cp_list
for cp in self._vardb.cp_all():
for pkg in cp_list(cp):
- slot_atom = "%s:%s" % (pkg.cp, pkg.slot)
+ slot_atom = f"{pkg.cp}:{pkg.slot}"
ebuild = xmatch(xmatch_level, slot_atom)
if not ebuild:
continue
@@ -241,7 +255,6 @@ class SubslotChangedSet(PackageSet):
class DowngradeSet(PackageSet):
-
_operations = ["merge", "unmerge"]
description = (
@@ -251,7 +264,7 @@ class DowngradeSet(PackageSet):
)
def __init__(self, portdb=None, vardb=None):
- super(DowngradeSet, self).__init__()
+ super().__init__()
self._portdb = portdb
self._vardb = vardb
@@ -264,7 +277,7 @@ class DowngradeSet(PackageSet):
for cp in self._vardb.cp_all():
for cpv in cp_list(cp):
pkg = pkg_str(cpv, None)
- slot_atom = "%s:%s" % (pkg.cp, pkg.slot)
+ slot_atom = f"{pkg.cp}:{pkg.slot}"
ebuild = xmatch(xmatch_level, slot_atom)
if not ebuild:
continue
@@ -280,7 +293,6 @@ class DowngradeSet(PackageSet):
class UnavailableSet(EverythingSet):
-
_operations = ["unmerge"]
description = (
@@ -290,14 +302,13 @@ class UnavailableSet(EverythingSet):
)
def __init__(self, vardb, metadatadb=None):
- super(UnavailableSet, self).__init__(vardb)
+ super().__init__(vardb)
self._metadatadb = metadatadb
def _filter(self, atom):
return not self._metadatadb.match(atom)
def singleBuilder(cls, options, settings, trees):
-
metadatadb = options.get("metadata-source", "porttree")
if not metadatadb in trees:
raise SetConfigError(
@@ -310,7 +321,6 @@ class UnavailableSet(EverythingSet):
class UnavailableBinaries(EverythingSet):
-
_operations = (
"merge",
"unmerge",
@@ -323,7 +333,7 @@ class UnavailableBinaries(EverythingSet):
)
def __init__(self, vardb, metadatadb=None):
- super(UnavailableBinaries, self).__init__(vardb)
+ super().__init__(vardb)
self._metadatadb = metadatadb
def _filter(self, atom):
@@ -334,7 +344,6 @@ class UnavailableBinaries(EverythingSet):
return not self._metadatadb.cpv_exists(inst_cpv)
def singleBuilder(cls, options, settings, trees):
-
metadatadb = options.get("metadata-source", "bintree")
if not metadatadb in trees:
raise SetConfigError(
@@ -350,7 +359,7 @@ class CategorySet(PackageSet):
_operations = ["merge", "unmerge"]
def __init__(self, category, dbapi, only_visible=True):
- super(CategorySet, self).__init__()
+ super().__init__()
self._db = dbapi
self._category = category
self._check = only_visible
@@ -358,7 +367,7 @@ class CategorySet(PackageSet):
s = "visible"
else:
s = "all"
- self.description = "Package set containing %s packages of category %s" % (
+ self.description = "Package set containing {} packages of category {}".format(
s,
self._category,
)
@@ -438,12 +447,11 @@ class AgeSet(EverythingSet):
_aux_keys = ("BUILD_TIME",)
def __init__(self, vardb, mode="older", age=7):
- super(AgeSet, self).__init__(vardb)
+ super().__init__(vardb)
self._mode = mode
self._age = age
def _filter(self, atom):
-
cpv = self._db.match(atom)[0]
try:
(date,) = self._db.aux_get(cpv, self._aux_keys)
@@ -477,12 +485,11 @@ class DateSet(EverythingSet):
_aux_keys = ("BUILD_TIME",)
def __init__(self, vardb, date, mode="older"):
- super(DateSet, self).__init__(vardb)
+ super().__init__(vardb)
self._mode = mode
self._date = date
def _filter(self, atom):
-
cpv = self._db.match(atom)[0]
try:
(date,) = self._db.aux_get(cpv, self._aux_keys)
@@ -572,7 +579,7 @@ class RebuiltBinaries(EverythingSet):
_aux_keys = ("BUILD_TIME",)
def __init__(self, vardb, bindb=None):
- super(RebuiltBinaries, self).__init__(vardb, bindb=bindb)
+ super().__init__(vardb, bindb=bindb)
self._bindb = bindb
def _filter(self, atom):
@@ -591,7 +598,6 @@ class RebuiltBinaries(EverythingSet):
class ChangedDepsSet(PackageSet):
-
_operations = ["merge", "unmerge"]
description = (
@@ -601,7 +607,7 @@ class ChangedDepsSet(PackageSet):
)
def __init__(self, portdb=None, vardb=None):
- super(ChangedDepsSet, self).__init__()
+ super().__init__()
self._portdb = portdb
self._vardb = vardb
@@ -655,7 +661,7 @@ class ChangedDepsSet(PackageSet):
# if dependencies don't match, trigger the rebuild.
if vdbvars != pdbvars:
- atoms.append("=%s" % cpv)
+ atoms.append(f"={cpv}")
self._setAtoms(atoms)
diff --git a/lib/portage/_sets/files.py b/lib/portage/_sets/files.py
index 30fc80bd4..1b9cc6016 100644
--- a/lib/portage/_sets/files.py
+++ b/lib/portage/_sets/files.py
@@ -1,10 +1,11 @@
-# Copyright 2007-2020 Gentoo Authors
+# Copyright 2007-2023 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
import errno
import re
from itertools import chain
+import portage
from portage import os
from portage import _encodings
from portage import _unicode_decode
@@ -35,10 +36,10 @@ class StaticFileSet(EditablePackageSet):
_repopath_sub = re.compile(r"\$\{repository:(?P<reponame>.+)\}")
def __init__(self, filename, greedy=False, dbapi=None):
- super(StaticFileSet, self).__init__(allow_repo=True)
+ super().__init__(allow_repo=True)
self._filename = filename
self._mtime = None
- self.description = "Package set loaded from file %s" % self._filename
+ self.description = f"Package set loaded from file {self._filename}"
self.loader = ItemFileLoader(self._filename, self._validate)
if greedy and not dbapi:
self.errors.append(
@@ -56,18 +57,18 @@ class StaticFileSet(EditablePackageSet):
value = []
for line in metadata:
line = line.strip()
- if len(line) == 0 and key != None:
+ if len(line) == 0 and key is not None:
setattr(self, key, " ".join(value))
key = None
- elif line[-1] == ":" and key == None:
+ elif line[-1] == ":" and key is None:
key = line[:-1].lower()
value = []
- elif key != None:
+ elif key is not None:
value.append(line)
else:
pass
else:
- if key != None:
+ if key is not None:
setattr(self, key, " ".join(value))
def _validate(self, atom):
@@ -76,15 +77,13 @@ class StaticFileSet(EditablePackageSet):
def write(self):
write_atomic(
self._filename,
- "".join(
- "%s\n" % (atom,) for atom in sorted(chain(self._atoms, self._nonatoms))
- ),
+ "".join(f"{atom}\n" for atom in sorted(chain(self._atoms, self._nonatoms))),
)
def load(self):
try:
mtime = os.stat(self._filename).st_mtime
- except (OSError, IOError):
+ except OSError:
mtime = None
if not self._loaded or self._mtime != mtime:
try:
@@ -92,7 +91,7 @@ class StaticFileSet(EditablePackageSet):
for fname in errors:
for e in errors[fname]:
self.errors.append(fname + ": " + e)
- except EnvironmentError as e:
+ except OSError as e:
if e.errno != errno.ENOENT:
raise
del e
@@ -103,7 +102,7 @@ class StaticFileSet(EditablePackageSet):
matches = self.dbapi.match(a)
for cpv in matches:
pkg = self.dbapi._pkg_str(cpv, None)
- atoms.append("%s:%s" % (pkg.cp, pkg.slot))
+ atoms.append(f"{pkg.cp}:{pkg.slot}")
# In addition to any installed slots, also try to pull
# in the latest new slot that may be available.
atoms.append(a)
@@ -178,6 +177,14 @@ class StaticFileSet(EditablePackageSet):
directory = normalize_path(directory)
for parent, dirs, files in os.walk(directory):
+ if portage.utf8_mode:
+ dirs_orig = dirs
+ omit_dir = lambda d: dirs_orig.remove(os.fsdecode(d))
+ parent = os.fsencode(parent)
+ dirs = [os.fsencode(value) for value in dirs]
+ files = [os.fsencode(value) for value in files]
+ else:
+ omit_dir = lambda d: dirs.remove(d)
try:
parent = _unicode_decode(
parent, encoding=_encodings["fs"], errors="strict"
@@ -186,7 +193,7 @@ class StaticFileSet(EditablePackageSet):
continue
for d in dirs[:]:
if d in vcs_dirs or d.startswith(b".") or d.endswith(b"~"):
- dirs.remove(d)
+ omit_dir(d)
for filename in files:
try:
filename = _unicode_decode(
@@ -213,9 +220,9 @@ class StaticFileSet(EditablePackageSet):
class ConfigFileSet(PackageSet):
def __init__(self, filename):
- super(ConfigFileSet, self).__init__()
+ super().__init__()
self._filename = filename
- self.description = "Package set generated from %s" % self._filename
+ self.description = f"Package set generated from {self._filename}"
self.loader = KeyListFileLoader(self._filename, ValidAtomValidator)
def load(self):
@@ -250,7 +257,7 @@ class WorldSelectedSet(EditablePackageSet):
description = "Set of packages and subsets that were directly installed by the user"
def __init__(self, eroot):
- super(WorldSelectedSet, self).__init__(allow_repo=True)
+ super().__init__(allow_repo=True)
self._pkgset = WorldSelectedPackagesSet(eroot)
self._setset = WorldSelectedSetsSet(eroot)
@@ -288,7 +295,7 @@ class WorldSelectedPackagesSet(EditablePackageSet):
description = "Set of packages that were directly installed by the user"
def __init__(self, eroot):
- super(WorldSelectedPackagesSet, self).__init__(allow_repo=True)
+ super().__init__(allow_repo=True)
self._lock = None
self._filename = os.path.join(eroot, WORLD_FILE)
self.loader = ItemFileLoader(self._filename, self._validate)
@@ -298,14 +305,14 @@ class WorldSelectedPackagesSet(EditablePackageSet):
return ValidAtomValidator(atom, allow_repo=True)
def write(self):
- write_atomic(self._filename, "".join(sorted("%s\n" % x for x in self._atoms)))
+ write_atomic(self._filename, "".join(sorted(f"{x}\n" for x in self._atoms)))
def load(self):
atoms = []
atoms_changed = False
try:
mtime = os.stat(self._filename).st_mtime
- except (OSError, IOError):
+ except OSError:
mtime = None
if not self._loaded or self._mtime != mtime:
try:
@@ -313,7 +320,7 @@ class WorldSelectedPackagesSet(EditablePackageSet):
for fname in errors:
for e in errors[fname]:
self.errors.append(fname + ": " + e)
- except EnvironmentError as e:
+ except OSError as e:
if e.errno != errno.ENOENT:
raise
del e
@@ -384,7 +391,7 @@ class WorldSelectedSetsSet(EditablePackageSet):
description = "Set of sets that were directly installed by the user"
def __init__(self, eroot):
- super(WorldSelectedSetsSet, self).__init__(allow_repo=True)
+ super().__init__(allow_repo=True)
self._lock = None
self._filename = os.path.join(eroot, WORLD_SETS_FILE)
self.loader = ItemFileLoader(self._filename, self._validate)
@@ -394,15 +401,13 @@ class WorldSelectedSetsSet(EditablePackageSet):
return setname.startswith(SETPREFIX)
def write(self):
- write_atomic(
- self._filename, "".join(sorted("%s\n" % x for x in self._nonatoms))
- )
+ write_atomic(self._filename, "".join(sorted(f"{x}\n" for x in self._nonatoms)))
def load(self):
atoms_changed = False
try:
mtime = os.stat(self._filename).st_mtime
- except (OSError, IOError):
+ except OSError:
mtime = None
if not self._loaded or self._mtime != mtime:
try:
@@ -410,7 +415,7 @@ class WorldSelectedSetsSet(EditablePackageSet):
for fname in errors:
for e in errors[fname]:
self.errors.append(fname + ": " + e)
- except EnvironmentError as e:
+ except OSError as e:
if e.errno != errno.ENOENT:
raise
del e
diff --git a/lib/portage/_sets/libs.py b/lib/portage/_sets/libs.py
index 683cc0823..f3e1ea220 100644
--- a/lib/portage/_sets/libs.py
+++ b/lib/portage/_sets/libs.py
@@ -5,14 +5,14 @@ from portage.exception import InvalidData
from portage.localization import _
from portage._sets.base import PackageSet
from portage._sets import get_boolean, SetConfigError
-import portage
+import shlex
class LibraryConsumerSet(PackageSet):
_operations = ["merge", "unmerge"]
def __init__(self, vardbapi, debug=False):
- super(LibraryConsumerSet, self).__init__()
+ super().__init__()
self.dbapi = vardbapi
self.debug = debug
@@ -28,12 +28,11 @@ class LibraryConsumerSet(PackageSet):
# without replacement.
pass
else:
- rValue.add("%s:%s" % (pkg.cp, pkg.slot))
+ rValue.add(f"{pkg.cp}:{pkg.slot}")
return rValue
class LibraryFileConsumerSet(LibraryConsumerSet):
-
"""
Note: This does not detect libtool archive (*.la) files that consume the
specified files (revdep-rebuild is able to detect them).
@@ -45,7 +44,7 @@ class LibraryFileConsumerSet(LibraryConsumerSet):
)
def __init__(self, vardbapi, files, **kargs):
- super(LibraryFileConsumerSet, self).__init__(vardbapi, **kargs)
+ super().__init__(vardbapi, **kargs)
self.files = files
def load(self):
@@ -58,7 +57,7 @@ class LibraryFileConsumerSet(LibraryConsumerSet):
self._setAtoms(self.mapPathsToAtoms(consumers))
def singleBuilder(cls, options, settings, trees):
- files = tuple(portage.util.shlex_split(options.get("files", "")))
+ files = tuple(shlex.split(options.get("files", "")))
if not files:
raise SetConfigError(_("no files given"))
debug = get_boolean(options, "debug", False)
diff --git a/lib/portage/_sets/meson.build b/lib/portage/_sets/meson.build
new file mode 100644
index 000000000..9f5696505
--- /dev/null
+++ b/lib/portage/_sets/meson.build
@@ -0,0 +1,15 @@
+py.install_sources(
+ [
+ 'ProfilePackageSet.py',
+ 'base.py',
+ 'dbapi.py',
+ 'files.py',
+ 'libs.py',
+ 'profiles.py',
+ 'security.py',
+ 'shell.py',
+ '__init__.py',
+ ],
+ subdir : 'portage/_sets',
+ pure : not native_extensions
+)
diff --git a/lib/portage/_sets/profiles.py b/lib/portage/_sets/profiles.py
index 289a93218..4731a0add 100644
--- a/lib/portage/_sets/profiles.py
+++ b/lib/portage/_sets/profiles.py
@@ -17,9 +17,7 @@ class PackagesSystemSet(PackageSet):
_operations = ["merge"]
def __init__(self, profiles, debug=False):
- super(PackagesSystemSet, self).__init__(
- allow_repo=any(allow_profile_repo_deps(x) for x in profiles)
- )
+ super().__init__(allow_repo=any(allow_profile_repo_deps(x) for x in profiles))
self._profiles = profiles
self._debug = debug
if profiles:
@@ -29,13 +27,13 @@ class PackagesSystemSet(PackageSet):
description = desc_profile.location
else:
description = None
- self.description = "System packages for profile %s" % description
+ self.description = f"System packages for profile {description}"
def load(self):
debug = self._debug
if debug:
writemsg_level(
- "\nPackagesSystemSet: profiles: %s\n" % (self._profiles,),
+ f"\nPackagesSystemSet: profiles: {self._profiles}\n",
level=logging.DEBUG,
noiselevel=-1,
)
@@ -54,7 +52,7 @@ class PackagesSystemSet(PackageSet):
if debug:
writemsg_level(
- "\nPackagesSystemSet: raw packages: %s\n" % (mylist,),
+ f"\nPackagesSystemSet: raw packages: {mylist}\n",
level=logging.DEBUG,
noiselevel=-1,
)
@@ -63,7 +61,7 @@ class PackagesSystemSet(PackageSet):
if debug:
writemsg_level(
- "\nPackagesSystemSet: stacked packages: %s\n" % (mylist,),
+ f"\nPackagesSystemSet: stacked packages: {mylist}\n",
level=logging.DEBUG,
noiselevel=-1,
)
diff --git a/lib/portage/_sets/security.py b/lib/portage/_sets/security.py
index 5e8bc89e3..a5b2e6aec 100644
--- a/lib/portage/_sets/security.py
+++ b/lib/portage/_sets/security.py
@@ -16,7 +16,7 @@ class SecuritySet(PackageSet):
description = "package set that includes all packages possibly affected by a GLSA"
def __init__(self, settings, vardbapi, portdbapi, least_change=True):
- super(SecuritySet, self).__init__()
+ super().__init__()
self._settings = settings
self._vardbapi = vardbapi
self._portdbapi = portdbapi
@@ -49,7 +49,7 @@ class SecuritySet(PackageSet):
for atom in atomlist[:]:
cpv = self._portdbapi.xmatch("match-all", atom)[0]
pkg = self._portdbapi._pkg_str(cpv, None)
- cps = "%s:%s" % (pkg.cp, pkg.slot)
+ cps = f"{pkg.cp}:{pkg.slot}"
if not cps in mydict:
mydict[cps] = (atom, cpv)
else:
diff --git a/lib/portage/_sets/shell.py b/lib/portage/_sets/shell.py
index 249e1fb05..467a84efd 100644
--- a/lib/portage/_sets/shell.py
+++ b/lib/portage/_sets/shell.py
@@ -23,15 +23,15 @@ class CommandOutputSet(PackageSet):
Args:
name: A string that identifies the set.
command: A string or sequence identifying the command to run
- (see the subprocess.Popen documentaion for the format)
+ (see the subprocess.Popen documentation for the format)
"""
_operations = ["merge", "unmerge"]
def __init__(self, command):
- super(CommandOutputSet, self).__init__()
+ super().__init__()
self._command = command
- self.description = "Package set generated from output of '%s'" % self._command
+ self.description = f"Package set generated from output of '{self._command}'"
def load(self):
pipe = subprocess.Popen(self._command, stdout=subprocess.PIPE, shell=True)