def store_rpm_deps(db, package, nogpgcheck=False): """ Save RPM dependencies of `package` to storage. Expects pyfaf.storage.opsys.Package object. """ pkg_id = package.id ts = rpm.ts() rpm_file = package.get_lob_fd("package") if not rpm_file: log.warning("Package {0} has no lob stored".format(package.name)) return False if nogpgcheck: ts.setVSFlags(rpm._RPMVSF_NOSIGNATURES) #pylint: disable=protected-access try: header = ts.hdrFromFdno(rpm_file.fileno()) except rpm.error as exc: log.error("rpm error: {0}".format(exc)) return False files = header.fiFromHeader() log.debug("%s contains %d files", package.nvra(), len(files)) # Invalid name for type variable # pylint: disable-msg=C0103 for f in files: new = PackageDependency() new.package_id = pkg_id new.type = "PROVIDES" new.name = f[0] new.flags = 0 db.session.add(new) provides = header.dsFromHeader('providename') for p in provides: new = PackageDependency() new.package_id = pkg_id new.type = "PROVIDES" new.name = p.N() new.flags = p.Flags() evr = p.EVR() if evr: new.epoch, new.version, new.release = parse_evr(evr) db.session.add(new) requires = header.dsFromHeader('requirename') for r in requires: new = PackageDependency() new.package_id = pkg_id new.type = "REQUIRES" new.name = r.N() new.flags = r.Flags() evr = r.EVR() if evr: new.epoch, new.version, new.release = parse_evr(evr) db.session.add(new) conflicts = header.dsFromHeader('conflictname') for c in conflicts: new = PackageDependency() new.package_id = pkg_id new.type = "CONFLICTS" new.name = c.N() new.flags = c.Flags() evr = c.EVR() if evr: new.epoch, new.version, new.release = parse_evr(evr) db.session.add(new) # pylint: enable-msg=C0103 rpm_file.close() db.session.flush() return True
def store_package_deps(db, package_obj): pkg_id = package_obj.id ts = rpm.ts() rpm_file = package_obj.get_lob_fd("package") header = ts.hdrFromFdno(rpm_file.fileno()) files = header.fiFromHeader() logging.debug("{0} contains {1} files".format(package_obj.nvra(), len(files))) for f in files: new = PackageDependency() new.package_id = pkg_id new.type = "PROVIDES" new.name = f[0] new.flags = 0 db.session.add(new) provides = header.dsFromHeader('providename') for p in provides: new = PackageDependency() new.package_id = pkg_id new.type = "PROVIDES" new.name = p.N() new.flags = p.Flags() evr = p.EVR() if len(evr): new.epoch, new.version, new.release = rpmutils.stringToVersion(evr) db.session.add(new) requires = header.dsFromHeader('requirename') for r in requires: new = PackageDependency() new.package_id = pkg_id new.type = "REQUIRES" new.name = r.N() new.flags = r.Flags() evr = r.EVR() if len(evr): new.epoch, new.version, new.release = rpmutils.stringToVersion(evr) db.session.add(new) conflicts = header.dsFromHeader('conflictname') for c in conflicts: new = PackageDependency() new.package_id = pkg_id new.type = "CONFLICTS" new.name = c.N() new.flags = c.Flags() evr = c.EVR() if len(evr): new.epoch, new.version, new.release = rpmutils.stringToVersion(evr) db.session.add(new) rpm_file.close() db.session.flush()
def store_rpm_deps(db, package, nogpgcheck=False): """ Save RPM dependencies of `package` to storage. Expects pyfaf.storage.opsys.Package object. """ pkg_id = package.id ts = rpm.ts() rpm_file = package.get_lob_fd("package") if not rpm_file: log.warning("Package {0} has no lob stored".format(package.name)) return False if nogpgcheck: ts.setVSFlags(rpm._RPMVSF_NOSIGNATURES) #pylint: disable=protected-access try: header = ts.hdrFromFdno(rpm_file.fileno()) except rpm.error as exc: log.error("rpm error: {0}".format(exc)) return False files = header.fiFromHeader() log.debug("{0} contains {1} files".format(package.nvra(), len(files))) # Invalid name for type variable # pylint: disable-msg=C0103 for f in files: new = PackageDependency() new.package_id = pkg_id new.type = "PROVIDES" new.name = f[0] new.flags = 0 db.session.add(new) provides = header.dsFromHeader('providename') for p in provides: new = PackageDependency() new.package_id = pkg_id new.type = "PROVIDES" new.name = p.N() new.flags = p.Flags() evr = p.EVR() if evr: new.epoch, new.version, new.release = parse_evr(evr) db.session.add(new) requires = header.dsFromHeader('requirename') for r in requires: new = PackageDependency() new.package_id = pkg_id new.type = "REQUIRES" new.name = r.N() new.flags = r.Flags() evr = r.EVR() if evr: new.epoch, new.version, new.release = parse_evr(evr) db.session.add(new) conflicts = header.dsFromHeader('conflictname') for c in conflicts: new = PackageDependency() new.package_id = pkg_id new.type = "CONFLICTS" new.name = c.N() new.flags = c.Flags() evr = c.EVR() if evr: new.epoch, new.version, new.release = parse_evr(evr) db.session.add(new) # pylint: enable-msg=C0103 rpm_file.close() db.session.flush() return True
def store_rpm_provides(db: Database, package: Package, nogpgcheck: bool = False) -> None: """ Save RPM provides of `package` to storage. Expects pyfaf.storage.opsys.Package object. """ pkg_id = package.id ts = rpm.ts() rpm_file = package.get_lob_fd("package") if not rpm_file: raise FafError("Package {0} has no lob stored".format(package.name)) if nogpgcheck: ts.setVSFlags(rpm._RPMVSF_NOSIGNATURES) #pylint: disable=protected-access try: header = ts.hdrFromFdno(rpm_file.fileno()) except rpm.error as exc: rpm_file.close() raise FafError("rpm error: {0}".format(exc)) from exc files = header.fiFromHeader() log.debug("%s contains %d files", package.nvra(), len(files)) # Invalid name for type variable # pylint: disable-msg=C0103 for f in files: new = PackageDependency() new.package_id = pkg_id new.type = "PROVIDES" new.name = f[0] new.flags = 0 db.session.add(new) provides = header.dsFromHeader('providename') for p in provides: if len(p.N()) > 1024: log.warning("Provides item in RPM header of %s longer than 1024 " "characters. Skipping", package.name) continue new = PackageDependency() new.package_id = pkg_id new.type = "PROVIDES" new.name = p.N() new.flags = p.Flags() evr = p.EVR() if evr: try: new.epoch, new.version, new.release = parse_evr(evr) except ValueError as ex: log.warning("Unparsable EVR ‘%s’ of %s in Provides of %s: %s. " "Skipping", evr, p.N(), package.name, ex) continue db.session.add(new) rpm_file.close() db.session.flush()