def _getitem(self, cpv): path = pjoin(self.location, cpv) try: data = readlines_ascii(path, True, True, True) if data is None: raise KeyError(cpv) return self._parse_data(data, data.mtime) except (EnvironmentError, ValueError) as e: raise_from(errors.CacheCorruption(cpv, e))
def _read_cache_file(package, cache_path): """Read an existing cache file.""" stored_cache = {} cache_data = list(readlines_ascii(cache_path, True, True, False)) if len(cache_data) >= 1: if cache_data[0] != CACHE_HEADER: logger.warning("plugin cache has a wrong header: %r, regenerating", cache_data[0]) cache_data = [] else: cache_data = cache_data[1:] if not cache_data: return {} try: for line in cache_data: module, mtime, entries = line.split(':', 2) mtime = int(mtime) # Needed because ''.split(':') == [''], not [] if not entries: entries = set() else: entries = entries.replace(':', ',').split(',') if not len(entries) % 3 == 0: logger.error( "failed reading cache %s; entries field isn't " "divisable by 3: %r", cache_path, entries) continue entries = iter(entries) def f(val): if val.isdigit(): val = int(val) return val entries = set( _plugin_data(key, int(priority), f'{package.__name__}.{module}', f(target)) for (key, priority, target) in zip(entries, entries, entries)) stored_cache[(module, mtime)] = entries except IGNORED_EXCEPTIONS: raise except Exception as e: logger.warning("failed reading cache; exception %s, regenerating.", e) stored_cache.clear() return stored_cache
def _read_mtime_cache(location): try: logger.debug("reading mtime cache at %r", (location,)) d = {} for k, v in read_dict(readlines_ascii(location, True), splitter=None, source_isiter=True).iteritems(): v = v.split() # mtime pkg1 fullver1 virtual1 pkg2 fullver2 virtual2... # if it's not the right length, skip this entry, # cache validation will update it. if (len(v) - 1) % 3 == 0: d[k] = v return d except IOError as e: if e.errno != errno.ENOENT: raise logger.debug("failed reading mtime cache at %r", (location,)) return {}
def _read_mtime_cache(location): try: logger.debug("reading mtime cache at %r", (location,)) d = {} for k, v in read_dict(readlines_ascii(location, True), splitter=None, source_isiter=True).iteritems(): v = v.split() # mtime pkg1 fullver1 virtual1 pkg2 fullver2 virtual2... # if it's not the right length, skip this entry, # cache validation will update it. if (len(v) -1) % 3 == 0: d[k] = v return d except IOError as e: if e.errno != errno.ENOENT: raise logger.debug("failed reading mtime cache at %r", (location,)) return {}
def _atoms(self): try: s = set() for x in readlines_ascii(self.path, True): if not x or x.startswith("#"): continue elif x.startswith("@"): if self.error_on_subsets: raise ValueError( "set %s isn't a valid atom in pkgset %r" % (x, self.path)) logger.warning( "set item %r found in pkgset %r: it will be " "wiped on update since portage/pkgcore store set items " "in a separate way", x[1:], self.path) continue s.add(atom(x)) except InvalidDependency as e: raise errors.ParsingError("parsing %r" % self.path, exception=e) from e return s