diff options
Diffstat (limited to 'lib/portage/_sets')
-rw-r--r-- | lib/portage/_sets/ProfilePackageSet.py | 6 | ||||
-rw-r--r-- | lib/portage/_sets/__init__.py | 50 | ||||
-rw-r--r-- | lib/portage/_sets/base.py | 18 | ||||
-rw-r--r-- | lib/portage/_sets/dbapi.py | 80 | ||||
-rw-r--r-- | lib/portage/_sets/files.py | 59 | ||||
-rw-r--r-- | lib/portage/_sets/libs.py | 11 | ||||
-rw-r--r-- | lib/portage/_sets/meson.build | 15 | ||||
-rw-r--r-- | lib/portage/_sets/profiles.py | 12 | ||||
-rw-r--r-- | lib/portage/_sets/security.py | 4 | ||||
-rw-r--r-- | lib/portage/_sets/shell.py | 6 |
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) |