def print_summary(self): """Print a summary of the query.""" if self.query_type == "set": cat_str = "" pkg_str = pp.emph(self.query) else: try: cat, pkg = self.category, self.name + self.fullversion except errors.GentoolkitInvalidCPV: cat = '' pkg = self.atom if cat and not self.is_regex: cat_str = "in %s " % pp.emph(cat.lstrip('><=~!')) else: cat_str = "" if self.is_regex: pkg_str = pp.emph(self.query) else: pkg_str = pp.emph(pkg) repo = '' if self.repo_filter is not None: repo = ' %s' % pp.section(self.repo_filter) pp.uprint(" * Searching%s for %s %s..." % (repo, pkg_str, cat_str))
def scan_upstream(query): matches = Query(query).find( include_masked=True, in_installed=False ) if not matches: sys.stderr.write(pp.warn("No package matching '%s'" % pp.pkgquery(query))) return [] matches = sorted(matches) pkg = matches.pop() while '9999' in pkg.version and len(matches): pkg = matches.pop() if not pkg: sys.stderr.write(pp.warn("Package '%s' only have a dev version (9999)" % pp.pkgquery(pkg.cp))) return [] if pkg.cp in BLACKLIST_PACKAGES: sys.stderr.write(pp.warn("Package '%s' is blacklisted" % pp.pkgquery(pkg.cp))) return [] if not CONFIG['quiet']: pp.uprint(" * %s [%s]" % (pp.cpv(pkg.cpv), pp.section(pkg.repo_name()))) pp.uprint() ebuild_path = pkg.ebuild_path() if ebuild_path: pp.uprint('Ebuild: ' + pp.path(os.path.normpath(ebuild_path))) pp.uprint('Repository: ' + pkg.repo_name()) pp.uprint('Homepage: ' + pkg.environment("HOMEPAGE")) pp.uprint('Description: ' + pkg.environment("DESCRIPTION")) cpv = pkg.cpv metadata = { "EAPI" : port_settings["EAPI"], "SRC_URI" : pkg.environment("SRC_URI", False), } use = frozenset(port_settings["PORTAGE_USE"].split()) try: alist = porttree._parse_uri_map(cpv, metadata, use=use) aalist = porttree._parse_uri_map(cpv, metadata) except Exception as e: sys.stderr.write(pp.warn("%s\n" % str(e))) sys.stderr.write(pp.warn("Invalid SRC_URI for '%s'" % pp.pkgquery(cpv))) return [] if "mirror" in portage.settings.features: urls = aalist else: urls = alist return scan_upstream_urls(pkg.cpv, urls)
def call_format_functions(best_match, matches): """Call information gathering functions and display the results.""" if CONFIG['verbose']: repo = best_match.repo_name() pp.uprint(" * %s [%s]" % (pp.cpv(best_match.cp), pp.section(repo))) got_opts = False if any(QUERY_OPTS.values()): # Specific information requested, less formatting got_opts = True if QUERY_OPTS["herd"] or not got_opts: herds = best_match.metadata.herds(include_email=True) if any(not h[0] for h in herds): print(pp.warn("The packages metadata.xml has an empty <herd> tag"), file=sys.stderr) herds = [x for x in herds if x[0]] herds = format_herds(herds) if QUERY_OPTS["herd"]: print_sequence(format_list(herds)) else: for herd in herds: pp.uprint(format_line(herd, "Herd: ", " " * 13)) if QUERY_OPTS["maintainer"] or not got_opts: maints = format_maintainers(best_match.metadata.maintainers()) if QUERY_OPTS["maintainer"]: print_sequence(format_list(maints)) else: if not maints: pp.uprint(format_line([], "Maintainer: ", " " * 13)) else: for maint in maints: pp.uprint(format_line(maint, "Maintainer: ", " " * 13)) if QUERY_OPTS["upstream"] or not got_opts: upstream = format_upstream(best_match.metadata.upstream()) homepage = format_homepage(best_match.environment("HOMEPAGE")) if QUERY_OPTS["upstream"]: upstream = format_list(upstream) else: upstream = format_list(upstream, "Upstream: ", " " * 13) print_sequence(upstream) print_sequence(homepage) if not got_opts: pkg_loc = best_match.package_path() pp.uprint(format_line(pkg_loc, "Location: ", " " * 13)) if QUERY_OPTS["keywords"] or not got_opts: # Get {<Package 'dev-libs/glib-2.20.5'>: [u'ia64', u'm68k', ...], ...} keyword_map = filter_keywords(matches) for match in matches: slot = match.environment('SLOT') verstr_len = len(match.fullversion) + len(slot) fmtd_keywords = format_keywords(keyword_map[match]) keywords_line = format_keywords_line(match, fmtd_keywords, slot, verstr_len) if QUERY_OPTS["keywords"]: pp.uprint(keywords_line) else: indent = " " * (16 + verstr_len) pp.uprint(format_line(keywords_line, "Keywords: ", indent)) if QUERY_OPTS["description"]: desc = best_match.metadata.descriptions() print_sequence(format_list(desc)) if QUERY_OPTS["useflags"]: useflags = format_useflags(best_match.metadata.use()) print_sequence(format_list(useflags)) if QUERY_OPTS["license"] or not got_opts: _license = best_match.environment(["LICENSE"]) if QUERY_OPTS["license"]: _license = format_list(_license) else: _license = format_list(_license, "License: ", " " * 13) print_sequence(_license) if QUERY_OPTS["stablereq"]: # Get {<Package 'dev-libs/glib-2.20.5'>: [u'ia64', u'm68k', ...], ...} stablereq_map = stablereq(matches) for match in matches: slot = match.environment('SLOT') verstr_len = len(match.fullversion) + len(slot) fmtd_ccs = ','.join(sorted(stablereq_map[match])) stablereq_line = format_stablereq_line(match, fmtd_ccs, slot) #print("STABLEREQ:", ) pp.uprint(stablereq_line) if QUERY_OPTS["xml"]: print_file(os.path.join(best_match.package_path(), 'metadata.xml'))
def scan_upstream(query, on_progress=None): """ Scans the upstream searching new versions for the given query """ matches = [] if query.endswith(".ebuild"): cpv = package_from_ebuild(query) reload_gentoolkit() if cpv: matches = [Package(cpv)] else: matches = Query(query).find( include_masked=True, in_installed=False, ) if not matches: output.ewarn(pp.warn("No package matching '%s'" % pp.pkgquery(query))) return None matches = sorted(matches) pkg = matches.pop() while '9999' in pkg.version and len(matches): pkg = matches.pop() if not pkg: output.ewarn( pp.warn("Package '%s' only have a dev version (9999)" % pp.pkgquery(pkg.cp))) return None # useful data only for formatted output start_time = datetime.now() output.metadata("datetime", start_time.isoformat(), show=False) output.metadata("cp", pkg.cp, show=False) output.metadata("cpv", pkg.cpv, show=False) if on_progress: on_progress(increment=10) if pkg.cp in BLACKLIST_PACKAGES: output.ewarn( pp.warn("Package '%s' is blacklisted" % pp.pkgquery(pkg.cp))) return None if not CONFIG['quiet']: if not CONFIG['format']: pp.uprint(" * %s [%s]" % (pp.cpv(pkg.cpv), pp.section(pkg.repo_name()))) pp.uprint() else: output.metadata("overlay", pp.section(pkg.repo_name())) ebuild_path = pkg.ebuild_path() if ebuild_path: output.metadata("ebuild", pp.path(os.path.normpath(ebuild_path))) uris, homepage, description = pkg.environment( ('SRC_URI', 'HOMEPAGE', 'DESCRIPTION')) output.metadata("repository", pkg.repo_name()) output.metadata("homepage", homepage) output.metadata("description", description) else: uris = pkg.environment('SRC_URI') cpv = pkg.cpv uris = parse_src_uri(uris) uris_expanded = [ from_mirror(uri) if 'mirror://' in uri else uri for uri in uris ] pkg._uris = uris pkg._uris_expanded = uris_expanded versions = handlers.scan(pkg, uris, on_progress) cp, ver, rev = portage.pkgsplit(pkg.cpv) result = filter_versions(cp, versions) if on_progress: on_progress(increment=10) # output scan time for formatted output scan_time = (datetime.now() - start_time).total_seconds() output.metadata("scan_time", scan_time, show=False) is_current_version_stable = is_version_stable(ver) if len(result) > 0: if not (CONFIG['format'] or CONFIG['quiet']): print("") for cp, url, version, handler, confidence in result: if CONFIG["ignore-pre-release"]: if not is_version_stable(version): continue if CONFIG["ignore-pre-release-if-stable"]: if is_current_version_stable and \ not is_version_stable(version): continue if CONFIG['progress']: print("", file=sys.stderr) output.result(cp, version, url, handler, confidence) return result
def call_format_functions(best_match, matches): """Call information gathering functions and display the results.""" if CONFIG['verbose']: repo = best_match.repo_name() pp.uprint(" * %s [%s]" % (pp.cpv(best_match.cp), pp.section(repo))) got_opts = False if any(QUERY_OPTS.values()): # Specific information requested, less formatting got_opts = True if QUERY_OPTS["herd"] or not got_opts: herds = best_match.metadata.herds(include_email=True) if any(not h[0] for h in herds): print(pp.warn("The packages metadata.xml has an empty <herd> tag"), file = sys.stderr) herds = [x for x in herds if x[0]] herds = format_herds(herds) if QUERY_OPTS["herd"]: print_sequence(format_list(herds)) else: for herd in herds: pp.uprint(format_line(herd, "Herd: ", " " * 13)) if QUERY_OPTS["maintainer"] or not got_opts: maints = format_maintainers(best_match.metadata.maintainers()) if QUERY_OPTS["maintainer"]: print_sequence(format_list(maints)) else: if not maints: pp.uprint(format_line([], "Maintainer: ", " " * 13)) else: for maint in maints: pp.uprint(format_line(maint, "Maintainer: ", " " * 13)) if QUERY_OPTS["upstream"] or not got_opts: upstream = format_upstream(best_match.metadata.upstream()) homepage = format_homepage(best_match.environment("HOMEPAGE")) if QUERY_OPTS["upstream"]: upstream = format_list(upstream) else: upstream = format_list(upstream, "Upstream: ", " " * 13) print_sequence(upstream) print_sequence(homepage) if not got_opts: pkg_loc = best_match.package_path() pp.uprint(format_line(pkg_loc, "Location: ", " " * 13)) if QUERY_OPTS["keywords"] or not got_opts: # Get {<Package 'dev-libs/glib-2.20.5'>: [u'ia64', u'm68k', ...], ...} keyword_map = filter_keywords(matches) for match in matches: slot = match.environment('SLOT') verstr_len = len(match.fullversion) + len(slot) fmtd_keywords = format_keywords(keyword_map[match]) keywords_line = format_keywords_line( match, fmtd_keywords, slot, verstr_len ) if QUERY_OPTS["keywords"]: pp.uprint(keywords_line) else: indent = " " * (16 + verstr_len) pp.uprint(format_line(keywords_line, "Keywords: ", indent)) if QUERY_OPTS["description"]: desc = best_match.metadata.descriptions() print_sequence(format_list(desc)) if QUERY_OPTS["useflags"]: useflags = format_useflags(best_match.metadata.use()) print_sequence(format_list(useflags)) if QUERY_OPTS["stablereq"]: # Get {<Package 'dev-libs/glib-2.20.5'>: [u'ia64', u'm68k', ...], ...} stablereq_map = stablereq(matches) for match in matches: slot = match.environment('SLOT') verstr_len = len(match.fullversion) + len(slot) fmtd_ccs = ','.join(sorted(stablereq_map[match])) stablereq_line = format_stablereq_line( match, fmtd_ccs, slot ) #print("STABLEREQ:", ) pp.uprint(stablereq_line) if QUERY_OPTS["xml"]: print_file(os.path.join(best_match.package_path(), 'metadata.xml'))
def scan_upstream(query, on_progress=None): """ Scans the upstream searching new versions for the given query """ maxval = 3 curval = 0 matches = [] if query.endswith(".ebuild"): cpv = package_from_ebuild(query) if cpv: reload_gentoolkit() matches = [Package(cpv)] else: matches = Query(query).find( include_masked=True, in_installed=False ) if not matches: output.ewarn( pp.warn("No package matching '%s'" % pp.pkgquery(query)) ) return None matches = sorted(matches) pkg = matches.pop() while '9999' in pkg.version and len(matches): pkg = matches.pop() if not pkg: output.ewarn( pp.warn("Package '%s' only have a dev version (9999)" % pp.pkgquery(pkg.cp)) ) return None # useful data only for formatted output start_time = datetime.now() output.metadata("datetime", start_time.isoformat(), show=False) output.metadata("cp", pkg.cp, show=False) output.metadata("cpv", pkg.cpv, show=False) curval += 1 if on_progress: on_progress(maxval, curval) if pkg.cp in BLACKLIST_PACKAGES: output.ewarn( pp.warn("Package '%s' is blacklisted" % pp.pkgquery(pkg.cp)) ) return None if not CONFIG['quiet']: if not CONFIG['format']: pp.uprint( " * %s [%s]" % (pp.cpv(pkg.cpv), pp.section(pkg.repo_name())) ) pp.uprint() else: output.metadata("overlay", pp.section(pkg.repo_name())) ebuild_path = pkg.ebuild_path() if ebuild_path: output.metadata( "ebuild", pp.path(os.path.normpath(ebuild_path)) ) output.metadata("repository", pkg.repo_name()) output.metadata("homepage", pkg.environment("HOMEPAGE")) output.metadata("description", pkg.environment("DESCRIPTION")) cpv = pkg.cpv metadata = { "EAPI": portage.settings["EAPI"], "SRC_URI": pkg.environment("SRC_URI", False), } use = frozenset(portage.settings["PORTAGE_USE"].split()) try: alist = porttree._parse_uri_map(cpv, metadata, use=use) aalist = porttree._parse_uri_map(cpv, metadata) except Exception as e: output.ewarn(pp.warn("%s\n" % str(e))) output.ewarn( pp.warn("Invalid SRC_URI for '%s'" % pp.pkgquery(cpv)) ) return None if "mirror" in portage.settings.features: urls = aalist else: urls = alist # output scan time for formatted output scan_time = (datetime.now() - start_time).total_seconds() output.metadata("scan_time", scan_time, show=False) curval += 1 if on_progress: on_progress(maxval, curval) result = scan_upstream_urls(pkg.cpv, urls, on_progress) curval += 1 if on_progress: on_progress(maxval, curval) return result
def scan_upstream(query, on_progress=None): """ Scans the upstream searching new versions for the given query """ matches = [] if query.endswith(".ebuild"): cpv = package_from_ebuild(query) reload_gentoolkit() if cpv: matches = [Package(cpv)] else: matches = Query(query).find( include_masked=True, in_installed=False, ) if not matches: output.ewarn( pp.warn("No package matching '%s'" % pp.pkgquery(query)) ) return None matches = sorted(matches) pkg = matches.pop() while '9999' in pkg.version and len(matches): pkg = matches.pop() if not pkg: output.ewarn( pp.warn("Package '%s' only have a dev version (9999)" % pp.pkgquery(pkg.cp)) ) return None # useful data only for formatted output start_time = datetime.now() output.metadata("datetime", start_time.isoformat(), show=False) output.metadata("cp", pkg.cp, show=False) output.metadata("cpv", pkg.cpv, show=False) if on_progress: on_progress(increment=10) if pkg.cp in BLACKLIST_PACKAGES: output.ewarn( pp.warn("Package '%s' is blacklisted" % pp.pkgquery(pkg.cp)) ) return None if not CONFIG['quiet']: if not CONFIG['format']: pp.uprint( " * %s [%s]" % (pp.cpv(pkg.cpv), pp.section(pkg.repo_name())) ) pp.uprint() else: output.metadata("overlay", pp.section(pkg.repo_name())) ebuild_path = pkg.ebuild_path() if ebuild_path: output.metadata( "ebuild", pp.path(os.path.normpath(ebuild_path)) ) uris, homepage, description = pkg.environment( ('SRC_URI', 'HOMEPAGE', 'DESCRIPTION') ) output.metadata("repository", pkg.repo_name()) output.metadata("homepage", homepage) output.metadata("description", description) else: uris = pkg.environment('SRC_URI') cpv = pkg.cpv uris = parse_src_uri(uris) uris_expanded = [ from_mirror(uri) if 'mirror://' in uri else uri for uri in uris ] pkg._uris = uris pkg._uris_expanded = uris_expanded versions = handlers.scan(pkg, uris, on_progress) cp, ver, rev = portage.pkgsplit(pkg.cpv) result = filter_versions(cp, versions) if on_progress: on_progress(increment=10) # output scan time for formatted output scan_time = (datetime.now() - start_time).total_seconds() output.metadata("scan_time", scan_time, show=False) is_current_version_stable = is_version_stable(ver) if len(result) > 0: if not (CONFIG['format'] or CONFIG['quiet']): print("") for cp, url, version, handler, confidence in result: if CONFIG["ignore-pre-release"]: if not is_version_stable(version): continue if CONFIG["ignore-pre-release-if-stable"]: if is_current_version_stable and \ not is_version_stable(version): continue if CONFIG['progress']: print("", file=sys.stderr) output.result(cp, version, url, handler, confidence) return result