--- /usr/bin/emerge 2004-08-06 00:47:04.000000000 +0100 +++ emerge 2004-08-09 01:57:07.385343240 +0100 @@ -574,27 +574,45 @@ for mtype in self.matches.keys(): for match,masked in self.matches[mtype]: if mtype=="pkg": - catpack=match full_package = portage.portdb.xmatch("bestmatch-visible",match) - if not full_package: - #no match found; we don't want to query description - masked=1 - full_package=portage.best(portage.portdb.xmatch("match-all",match)) + pkg_versions = portage.portdb.xmatch("match-all",match) + stable_pkg = "~" + # Get the stable version of the package + for pv in pkg_versions: + pkg_keywords = portage.portdb.aux_get(pv,["KEYWORDS"])[0].split() + for pk in pkg_keywords: + if pk == portage.settings["ARCH"]: + stable_pkg = pv + break + if stable_pkg != "~": + break + # Get the unstable version of the package + unstable_pkg = portage.best(portage.portdb.xmatch("match-all",match)) + if stable_pkg != "~" and unstable_pkg == stable_pkg: + unstable_pkg = "~" + if stable_pkg == "~": + full_package = unstable_pkg + if unstable_pkg == "~": + full_package = stable_pkg else: full_package = match match = portage.pkgsplit(match)[0] if full_package: try: - desc, homepage, license = portage.portdb.aux_get(full_package,["DESCRIPTION","HOMEPAGE","LICENSE"]) + if stable_pkg != "~": + keywords_stable = portage.portdb.aux_get(stable_pkg,["KEYWORDS"])[0] + if unstable_pkg != "~": + keywords_unstable = portage.portdb.aux_get(unstable_pkg,["KEYWORDS"])[0] + + desc, homepage, license = portage.portdb.aux_get(full_package,["DESCRIPTION","HOMEPAGE","LICENSE"]) except KeyError: print "emerge: search: aux_get() failed, skipping" continue - if masked: - print green("*")+" "+white(match)+" "+red("[ Masked ]") - else: - print green("*")+" "+white(match) + print green("*")+" "+white(match) myversion = self.getVersion(full_package, search.VERSION_RELEASE) + myversion_stable = self.getVersion(stable_pkg, search.VERSION_RELEASE) + myversion_unstable = self.getVersion(unstable_pkg, search.VERSION_RELEASE) mysum = [0,0] mycat = match.split("/")[0] @@ -617,16 +635,80 @@ if edebug: print "!!! Exception:",e mysum[0]=" [no/bad digest]" - + if "--quiet" not in myopts: - print " ", darkgreen("Latest version available:"),myversion + if stable_pkg != "~": + if myversion != myversion_unstable: + print " ", darkgreen("Latest stable version available:"),myversion_stable, yellow("*") + else: + print " ", darkgreen("Latest stable version available:"),myversion_stable + print " ", darkgreen("Stable Accepted Keywords: "),keywords_stable + # iuse verbose + if "--verbose" in myopts: + try: + iuse_split = string.split(portage.portdb.aux_get(stable_pkg,["IUSE"])[0], " ") + except: + portage.writemsg("!!! Error getting IUSE (report this to bugs.gentoo.org)\n") + portage.writemsg("!!! %s\n" % x) + iuse_split = [] + iuse_split.sort() + iuse="" + for ebuild_iuse in iuse_split: + if not ebuild_iuse: + continue + if ebuild_iuse in portage.settings["USE"]: + iuse=iuse+red("+"+ebuild_iuse)+" " + elif ebuild_iuse in portage.settings.usemask: + iuse=iuse+blue("-("+ebuild_iuse+")")+" " + else: + iuse=iuse+blue("-"+ebuild_iuse)+" " + if len(iuse) > 0: + print " ", darkgreen("Stable USE flags: "), iuse + else: + print " ", darkgreen("Stable USE flags: "), "N/A" + else: + print " ", darkgreen("Latest stable version available:"),"N/A" + print " ", darkgreen("Stable Accepted Keywords: "),"N/A" + if unstable_pkg != "~": + if myversion == myversion_unstable: + print " ", darkgreen("Latest unstable version available:"),myversion_unstable, yellow("*") + else: + print " ", darkgreen("Latest unstable version available:"),myversion_unstable + print " ", darkgreen("Unstable Accepted Keywords: "),keywords_unstable + # iuse verbose + if "--verbose" in myopts: + try: + iuse_split = string.split(portage.portdb.aux_get(unstable_pkg,["IUSE"])[0], " ") + except: + portage.writemsg("!!! Error getting IUSE (report this to bugs.gentoo.org)\n") + portage.writemsg("!!! %s\n" % x) + iuse_split = [] + iuse_split.sort() + iuse="" + for ebuild_iuse in iuse_split: + if not ebuild_iuse: + continue + if ebuild_iuse in portage.settings["USE"]: + iuse=iuse+red("+"+ebuild_iuse)+" " + elif ebuild_iuse in portage.settings.usemask: + iuse=iuse+blue("-("+ebuild_iuse+")")+" " + else: + iuse=iuse+blue("-"+ebuild_iuse)+" " + if len(iuse) > 0: + print " ", darkgreen("Unstable USE flags: "), iuse + else: + print " ", darkgreen("Unstable USE flags: "), "N/A" + + else: + print " ", darkgreen("Latest unstable version available:"),"N/A" + print " ", darkgreen("Unstable Accepted Keywords: "),"N/A" print " ", self.getInstallationStatus(mycat+'/'+mypkg) print " ", darkgreen("Size of downloaded files:"),mysum[0] print " ", darkgreen("Homepage:")+" ",homepage print " ", darkgreen("Description:"),desc print " ", darkgreen("License:")+" ",license print - print + print # # private interface #