diff options
Diffstat (limited to 'lib/portage/_sets/files.py')
-rw-r--r-- | lib/portage/_sets/files.py | 59 |
1 files changed, 32 insertions, 27 deletions
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 |