From a8f1c08a5897c7d7c9c2a0e063d3845429cb59a7 Mon Sep 17 00:00:00 2001 From: Fabian Groffen Date: Fri, 14 Aug 2009 20:14:21 +0000 Subject: [PATCH] Merged from trunk -r13949:13956 | 13950 | In Task.__str__(), emulate tuple.__str__, but don't show | | zmedico | 'foo' as u'foo' for unicode strings. | | 13951 | Simplify command introspection inside usage(). | | zmedico | | | 13952 | Move global portage import to the top and add writemsg and | | zmedico | writemsg_stdout imports for safe unicode output. | | 13953 | Use writemsg_stdout() for safe unicode output. | | zmedico | | | 13954 | Add missing noiselevel argument in writemsg_stdout() calls. | | zmedico | | | 13955 | Use writemsg_stdout() for safe unicode output. | | zmedico | | | 13956 | Use writemsg_stdout() for safe display of unicode overlay | | zmedico | paths. | svn path=/main/branches/prefix/; revision=14033 --- bin/portageq | 82 +++++++++++++++++++++-------------------- pym/_emerge/Task.py | 7 +++- pym/_emerge/depgraph.py | 10 +++-- pym/_emerge/search.py | 26 +++++++++---- 4 files changed, 72 insertions(+), 53 deletions(-) diff --git a/bin/portageq b/bin/portageq index 7d967098c..bdcdb4d68 100755 --- a/bin/portageq +++ b/bin/portageq @@ -23,6 +23,30 @@ import os import types +# for an explanation on this logic, see pym/_emerge/__init__.py +if os.environ.__contains__("PORTAGE_PYTHONPATH"): + pym_path = os.environ["PORTAGE_PYTHONPATH"] +else: + pym_path = os.path.join(os.path.dirname( + os.path.dirname(os.path.realpath(__file__))), "pym") +# Avoid sandbox violations after python upgrade. +if os.environ.get("SANDBOX_ON") == "1": + sandbox_write = os.environ.get("SANDBOX_WRITE", "").split(":") + if pym_path not in sandbox_write: + sandbox_write.append(pym_path) + os.environ["SANDBOX_WRITE"] = \ + ":".join(filter(None, sandbox_write)) + del sandbox_write + +try: + import portage +except ImportError: + sys.path.insert(0, pym_path) + import portage +del pym_path + +from portage.util import writemsg, writemsg_stdout + #----------------------------------------------------------------------------- # # To add functionality to this tool, add a function below. @@ -123,8 +147,7 @@ def metadata(argv): try: values = trees[root][type_map[pkgtype]].dbapi.aux_get( pkgspec, metakeys) - for value in values: - print value + writemsg_stdout(''.join('%s\n' % x for x in values), noiselevel=-1) except KeyError: print >> sys.stderr, "Package not found: '%s'" % pkgspec sys.exit(1) @@ -149,11 +172,8 @@ def contents(argv): cat, pkg = portage.catsplit(cpv) db = portage.dblink(cat, pkg, root, vartree.settings, treetype="vartree", vartree=vartree) - file_list = db.getcontents().keys() - file_list.sort() - for f in file_list: - sys.stdout.write("%s\n" % f) - sys.stdout.flush() + writemsg_stdout(''.join('%s\n' % x for x in sorted(db.getcontents())), + noiselevel=-1) contents.uses_root = True def owners(argv): @@ -202,14 +222,17 @@ def owners(argv): owners = vardb._owners.get_owners(files) + msg = [] for pkg, owned_files in owners.iteritems(): cpv = pkg.mycpv - sys.stdout.write("%s\n" % cpv) + msg.append("%s\n" % cpv) for f in sorted(owned_files): - sys.stdout.write("\t%s\n" % \ + msg.append("\t%s\n" % \ os.path.join(root, f.lstrip(os.path.sep))) + + writemsg_stdout(''.join(msg), noiselevel=-1) + if owners: - sys.stdout.flush() return 0 sys.stderr.write("None of the installed packages claim the file(s).\n") @@ -509,12 +532,14 @@ def list_preserved_libs(argv): sys.exit(2) mylibs = portage.db[argv[0]]["vartree"].dbapi.plib_registry.getPreservedLibs() rValue = 0 - for cpv in mylibs: - print cpv, + msg = [] + for cpv in sorted(mylibs): + msg.append(cpv) for path in mylibs[cpv]: - print path, + msg.append(' ' + path) rValue = 1 - print + msg.append('\n') + writemsg_stdout(''.join(msg), noiselevel=-1) return rValue list_preserved_libs.uses_root = True @@ -534,16 +559,14 @@ def usage(argv): # Show our commands -- we do this by scanning the functions in this # file, and formatting each functions documentation. # - commands = [x for x in globals() if x not in \ - ("usage", "__doc__", "__name__", "main", "os", "portage", \ - "sys", "__builtins__", "types", "string","exithandler")] - commands.sort() + non_commands = frozenset(['exithandler', 'main', + 'usage', 'writemsg', 'writemsg_stdout']) + commands = sorted(k for k, v in globals().iteritems() \ + if type(v) is types.FunctionType and k not in non_commands) for name in commands: # Drop non-functions obj = globals()[name] - if (type(obj) != types.FunctionType): - continue doc = obj.__doc__ if (doc == None): @@ -587,25 +610,6 @@ def main(): sys.exit(os.EX_USAGE) os.environ["ROOT"] = sys.argv[2] - # Avoid sandbox violations after python upgrade. - from os import path as osp - # for an explanation on this logic, see pym/_emerge/__init__.py - if os.environ.__contains__("PORTAGE_PYTHONPATH"): - pym_path = os.environ["PORTAGE_PYTHONPATH"] - else: - pym_path = osp.join(osp.dirname( - osp.dirname(osp.realpath(__file__))), "pym") - if os.environ.get("SANDBOX_ON") == "1": - sandbox_write = os.environ.get("SANDBOX_WRITE", "").split(":") - if pym_path not in sandbox_write: - sandbox_write.append(pym_path) - os.environ["SANDBOX_WRITE"] = \ - ":".join(filter(None, sandbox_write)) - - global portage - sys.path.insert(0, pym_path) - import portage - args = sys.argv[2:] if args and not isinstance(args[0], unicode): for i in xrange(len(args)): diff --git a/pym/_emerge/Task.py b/pym/_emerge/Task.py index dbbdcd24f..d218ba360 100644 --- a/pym/_emerge/Task.py +++ b/pym/_emerge/Task.py @@ -37,5 +37,8 @@ class Task(SlotObject): return key in self._get_hash_key() def __str__(self): - return str(self._get_hash_key()) - + """ + Emulate tuple.__repr__, but don't show 'foo' as u'foo' for unicode + strings. + """ + return "(%s)" % ", ".join(("'%s'" % x for x in self._get_hash_key())) diff --git a/pym/_emerge/depgraph.py b/pym/_emerge/depgraph.py index b3a045db1..cac48b456 100644 --- a/pym/_emerge/depgraph.py +++ b/pym/_emerge/depgraph.py @@ -4351,12 +4351,13 @@ class depgraph(object): print print counters if show_repos: - sys.stdout.write(str(repo_display)) + writemsg_stdout(str(repo_display), noiselevel=-1) if "--changelog" in self._frozen_config.myopts: - print + writemsg_stdout('\n', noiselevel=-1) for revision,text in changelogs: - writemsg_stdout(bold('*'+revision) + '\n' + text) + writemsg_stdout(bold('*'+revision) + '\n' + text, + noiselevel=-1) sys.stdout.flush() return os.EX_OK @@ -5114,7 +5115,8 @@ def show_masked_packages(masked_packages): print "- "+cpv+" (masked by: "+", ".join(mreasons)+")" if comment and comment not in shown_comments: - writemsg_stdout(filename + ":\n" + comment + "\n") + writemsg_stdout(filename + ":\n" + comment + "\n", + noiselevel=-1) shown_comments.add(comment) portdb = root_config.trees["porttree"].dbapi for l in missing_licenses: diff --git a/pym/_emerge/search.py b/pym/_emerge/search.py index c58a0d518..4db6d9fe8 100644 --- a/pym/_emerge/search.py +++ b/pym/_emerge/search.py @@ -15,7 +15,8 @@ else: sys.path.insert(0, os.path.join(os.path.dirname(os.path.dirname(os.path.realpath(__file__))), "pym")) import portage -from portage.output import bold as white, darkgreen, green, red +from portage.output import bold, bold as white, darkgreen, green, red +from portage.util import writemsg_stdout from _emerge.Package import Package from _emerge.visible import visible @@ -289,9 +290,14 @@ class search(object): full_package = match match = portage.cpv_getkey(match) elif mtype == "set": - print green("*")+" "+white(match) - print " ", darkgreen("Description:")+" ", self.sdict[match].getMetadata("DESCRIPTION") - print + msg = [] + msg.append(green("*") + " " + bold(match) + "\n") + if self.verbose: + msg.append(" " + darkgreen("Description:") + \ + " " + \ + self.sdict[match].getMetadata("DESCRIPTION") \ + + "\n\n") + writemsg_stdout(''.join(msg), noiselevel=-1) if full_package: try: desc, homepage, license = self.portdb.aux_get( @@ -351,16 +357,20 @@ class search(object): file_size_str = mystr + " kB" if self.verbose: + msg = [] if available: print " ", darkgreen("Latest version available:"),myversion print " ", self.getInstallationStatus(mycat+'/'+mypkg) if myebuild: print " %s %s" % \ (darkgreen("Size of files:"), file_size_str) - print " ", darkgreen("Homepage:")+" ",homepage - print " ", darkgreen("Description:")+" ",desc - print " ", darkgreen("License:")+" ",license - print + msg.append(" " + darkgreen("Homepage:") + \ + " " + homepage + "\n") + msg.append(" " + darkgreen("Description:") \ + + " " + desc + "\n") + msg.append(" " + darkgreen("License:") + \ + " " + license + "\n\n") + writemsg_stdout(''.join(msg), noiselevel=-1) # # private interface # -- 2.26.2