def update_pkg_desc_index(repo, observer): """Update a repo's package description cache (metadata/pkg_desc_index)""" ret = 0 pkg_desc_index = pjoin(repo.location, "metadata", "pkg_desc_index") f = None try: f = AtomicWriteFile(pkg_desc_index) for cat, pkgs in sorted(repo.packages.items()): for pkg in sorted(pkgs): cpvs = sorted(CPV(cat, pkg, v) for v in repo.versions[(cat, pkg)]) # get the most recent pkg description, skipping bad pkgs for cpv in reversed(cpvs): try: desc = repo[(cat, pkg, cpv.fullver)].description versions = ' '.join(x.fullver for x in cpvs) f.write(f"{cat}/{pkg} {versions}: {desc}\n") break except MetadataException as e: # should be caught and outputted already by cache regen ret = 1 f.close() except IOError as e: observer.error( f"Unable to update pkg_desc_index file {pkg_desc_index!r}: {e.strerror}") ret = os.EX_IOERR finally: if f is not None: f.discard() return ret
def __init__(self, cpvstr, data=None, shared=None, repo=None): if data is None: data = {} for x in ("DEPEND", "RDEPEND", "PDEPEND", "IUSE", "LICENSE"): data.setdefault(x, "") data.setdefault("KEYWORDS", ' '.join(default_arches)) cpv = CPV(cpvstr, versioned=True) super().__init__(shared, repo, cpv.category, cpv.package, cpv.fullver) object.__setattr__(self, "data", data)