def list_packages(self, filters, latest): """ List available packages. :returns: list """ pkglist = self._get_solvable_packages() pkglist.sort(key=cmp_to_key(self._sort_packages)) self.num_packages = len(pkglist) pkglist = self._apply_filters(pkglist, filters) if latest: latest_pkgs = {} new_pkgs = [] for pkg in pkglist: ident = '{}.{}'.format(pkg.name, pkg.arch) if ident not in latest_pkgs.keys() or LooseVersion(str( pkg.evr)) > LooseVersion(str(latest_pkgs[ident].evr)): latest_pkgs[ident] = pkg pkglist = list(latest_pkgs.values()) to_return = [] for pack in pkglist: new_pack = ContentPackage() epoch, version, release = RawSolvablePackage._parse_solvable_evr( pack.evr) new_pack.setNVREA(pack.name, version, release, epoch, pack.arch) new_pack.unique_id = RawSolvablePackage(pack) checksum = pack.lookup_checksum(solv.SOLVABLE_CHECKSUM) new_pack.checksum_type = checksum.typestr() new_pack.checksum = checksum.hex() to_return.append(new_pack) return to_return
def list_packages(self, filters): """ list packages""" self.sack.populate(self.repo, 'metadata', None, 0) pkglist = self.sack.returnPackages() pkglist = yum.misc.unique(pkglist) self.num_packages = len(pkglist) if not filters: # if there's no include/exclude filter on command line or in database for p in self.repo.includepkgs: filters.append(('+', [p])) for p in self.repo.exclude: filters.append(('-', [p])) if filters: pkglist = self._filter_packages(pkglist, filters) pkglist = self._get_package_dependencies(self.sack, pkglist) # do not pull in dependencies if they're explicitly excluded pkglist = self._filter_packages(pkglist, filters, True) self.num_excluded = self.num_packages - len(pkglist) to_return = [] for pack in pkglist: if pack.arch == 'src': continue new_pack = ContentPackage() new_pack.setNVREA(pack.name, pack.version, pack.release, pack.epoch, pack.arch) new_pack.unique_id = pack new_pack.checksum_type = pack.checksums[0][0] if new_pack.checksum_type == 'sha': new_pack.checksum_type = 'sha1' new_pack.checksum = pack.checksums[0][1] to_return.append(new_pack) return to_return
def list_packages(self, filters, latest): """ list packages""" pkglist = self.repo.get_package_list() self.num_packages = len(pkglist) if latest: # TODO pass pkglist.sort(self._sort_packages) if not filters: # if there's no include/exclude filter on command line or in database for p in self.repo.includepkgs: filters.append(('+', [p])) for p in self.repo.exclude: filters.append(('-', [p])) if filters: pkglist = self._filter_packages(pkglist, filters) self.num_excluded = self.num_packages - len(pkglist) to_return = [] for pack in pkglist: new_pack = ContentPackage() new_pack.setNVREA(pack.name, pack.version, pack.release, pack.epoch, pack.arch) new_pack.unique_id = pack new_pack.checksum_type = pack.checksum_type new_pack.checksum = pack.checksum to_return.append(new_pack) return to_return
def list_packages(self, filters, latest): """ list packages""" pkglist = self.repo.get_package_list() self.num_packages = len(pkglist) if latest: # TODO pass pkglist.sort(self._sort_packages) if not filters: # if there's no include/exclude filter on command line or in database for p in self.repo.includepkgs: filters.append(("+", [p])) for p in self.repo.exclude: filters.append(("-", [p])) if filters: # TODO pass to_return = [] for pack in pkglist: new_pack = ContentPackage() new_pack.setNVREA(pack["name"], pack["version"], pack["release"], pack["epoch"], pack["arch"]) new_pack.unique_id = pack new_pack.checksum_type = pack["checksum_type"] new_pack.checksum = pack["checksum"] to_return.append(new_pack) return to_return
def list_packages(self, filters, latest): """ list packages""" try: self.repo.getPackageSack().populate(self.repo, 'metadata', None, 0) except yum.Errors.RepoError as e: if "No more mirrors" in str(e): reqFile = re.search('failure:\s+(.+)\s+from', str(e)).groups()[0] raise ChannelTimeoutException( "Retrieving '%s' failed: File not found in repository '%s'" % (reqFile, self.repo)) else: raise pkglist = ListPackageSack(self.repo.getPackageSack().returnPackages()) self.num_packages = len(pkglist) if latest: pkglist = pkglist.returnNewestByNameArch() pkglist = yum.misc.unique(pkglist) pkglist.sort(self._sort_packages) if not filters: # if there's no include/exclude filter on command line or in database # check repository config file for p in self.repo.includepkgs: filters.append(('+', [p])) for p in self.repo.exclude: filters.append(('-', [p])) filters = self._expand_package_groups(filters) if filters: pkglist = self._filter_packages(pkglist, filters) pkglist = self._get_package_dependencies( self.repo.getPackageSack(), pkglist) # do not pull in dependencies if they're explicitly excluded pkglist = self._filter_packages(pkglist, filters, True) self.num_excluded = self.num_packages - len(pkglist) to_return = [] for pack in pkglist: new_pack = ContentPackage() new_pack.setNVREA(pack.name, pack.version, pack.release, pack.epoch, pack.arch) new_pack.unique_id = pack new_pack.checksum_type = pack.checksums[0][0] if new_pack.checksum_type == 'sha': new_pack.checksum_type = 'sha1' new_pack.checksum = pack.checksums[0][1] for cs in pack.checksums: new_pack.checksums[cs[0]] = cs[1] to_return.append(new_pack) return to_return
def list_packages(self, filters, latest): """ list packages""" self.dnfbase.fill_sack(load_system_repo=False, load_available_repos=True) pkglist = self.dnfbase.sack.query(flags=hawkey.IGNORE_MODULAR_EXCLUDES) self.num_packages = len(pkglist) if latest: pkglist = pkglist.latest() pkglist = list(dict.fromkeys(pkglist)) # Filter out duplicates if not filters: # if there's no include/exclude filter on command line or in database # check repository config file for p in self.dnfbase.repos[self.repoid].includepkgs: filters.append(('+', [p])) for p in self.dnfbase.repos[self.repoid].exclude: filters.append(('-', [p])) filters = self._expand_package_groups(filters) if filters: pkglist = self._filter_packages(pkglist, filters) pkglist = self._get_package_dependencies(self.dnfbase.sack, pkglist) self.num_excluded = self.num_packages - len(pkglist) to_return = [] for pack in pkglist: if pack.arch == 'src': continue new_pack = ContentPackage() new_pack.setNVREA(pack.name, pack.version, pack.release, pack.epoch, pack.arch) new_pack.unique_id = RawSolvablePackage(pack) # new_pack.hawkey_id = pack new_pack.checksum_type = pack.returnIdSum()[0] if new_pack.checksum_type == 'sha': new_pack.checksum_type = 'sha1' new_pack.checksum = pack.returnIdSum()[1] to_return.append(new_pack) return to_return
def list_packages(self, filters, latest): """ list packages""" self.repo.getPackageSack().populate(self.repo, 'metadata', None, 0) pkglist = ListPackageSack(self.repo.getPackageSack().returnPackages()) self.num_packages = len(pkglist) if latest: pkglist = pkglist.returnNewestByNameArch() pkglist = yum.misc.unique(pkglist) pkglist.sort(self._sort_packages) if not filters: # if there's no include/exclude filter on command line or in database # check repository config file for p in self.repo.includepkgs: filters.append(('+', [p])) for p in self.repo.exclude: filters.append(('-', [p])) filters = self._expand_package_groups(filters) if filters: pkglist = self._filter_packages(pkglist, filters) pkglist = self._get_package_dependencies( self.repo.getPackageSack(), pkglist) self.num_excluded = self.num_packages - len(pkglist) to_return = [] for pack in pkglist: if pack.arch == 'src': continue new_pack = ContentPackage() new_pack.setNVREA(pack.name, pack.version, pack.release, pack.epoch, pack.arch) new_pack.unique_id = pack new_pack.checksum_type = pack.checksums[0][0] if new_pack.checksum_type == 'sha': new_pack.checksum_type = 'sha1' new_pack.checksum = pack.checksums[0][1] to_return.append(new_pack) return to_return
def list_packages(self, filters, latest): """ List available packages. :returns: list """ if not self.repo.is_configured: self.setup_repo(self.repo) pool = solv.Pool() repo = pool.add_repo(str(self.channel_label or self.reponame)) solv_path = os.path.join(self.repo.root, ZYPP_SOLV_CACHE_PATH, self.channel_label or self.reponame, 'solv') if not os.path.isfile(solv_path) or not repo.add_solv(solv.xfopen(str(solv_path)), 0): raise SolvFileNotFound(solv_path) #TODO: Implement latest #if latest: # pkglist = pkglist.returnNewestByNameArch() #TODO: Implement sort #pkglist.sort(self._sort_packages) to_return = [] for pack in repo.solvables: # Solvables with ":" in name are not packages if ':' in pack.name: continue new_pack = ContentPackage() epoch, version, release = RawSolvablePackage._parse_solvable_evr(pack.evr) new_pack.setNVREA(pack.name, version, release, epoch, pack.arch) new_pack.unique_id = RawSolvablePackage(pack) checksum = pack.lookup_checksum(solv.SOLVABLE_CHECKSUM) new_pack.checksum_type = checksum.typestr() new_pack.checksum = checksum.hex() to_return.append(new_pack) self.num_packages = len(to_return) return to_return
def list_packages(self, filters, latest): """ list packages""" pkglist = self.repo.get_package_list() self.num_packages = len(pkglist) if latest: latest_pkgs = {} new_pkgs = [] for pkg in pkglist: ident = '{}.{}'.format(pkg.name, pkg.arch) if ident not in latest_pkgs.keys() or LooseVersion( pkg.evr()) > LooseVersion(latest_pkgs[ident].evr()): latest_pkgs[ident] = pkg pkglist = list(latest_pkgs.values()) pkglist.sort(key=cmp_to_key(self._sort_packages)) if not filters: # if there's no include/exclude filter on command line or in database for p in self.repo.includepkgs: filters.append(('+', [p])) for p in self.repo.exclude: filters.append(('-', [p])) if filters: pkglist = self._filter_packages(pkglist, filters) self.num_excluded = self.num_packages - len(pkglist) to_return = [] for pack in pkglist: new_pack = ContentPackage() new_pack.setNVREA(pack.name, pack.version, pack.release, pack.epoch, pack.arch) new_pack.unique_id = pack new_pack.checksum_type = pack.checksum_type new_pack.checksum = pack.checksum to_return.append(new_pack) return to_return