Merged from trunk -r13949:13956
authorFabian Groffen <grobian@gentoo.org>
Fri, 14 Aug 2009 20:14:21 +0000 (20:14 -0000)
committerFabian Groffen <grobian@gentoo.org>
Fri, 14 Aug 2009 20:14:21 +0000 (20:14 -0000)
   | 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
pym/_emerge/Task.py
pym/_emerge/depgraph.py
pym/_emerge/search.py

index 7d967098c5740f0f76ad45f31f0e8155a3345a56..bdcdb4d68283b05257ba6a040b6b45afaa14c983 100755 (executable)
@@ -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)):
index dbbdcd24fcd17fbe866935ecc0a3bd492e628780..d218ba360d3b682ccb99e717d35b0544e7f295cc 100644 (file)
@@ -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()))
index b3a045db18ef6b2ddbaf97ce1cd6521287aa01d5..cac48b45650a0d31142ecd497c4f1c94b5014b2f 100644 (file)
@@ -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:
index c58a0d51877ed638acee5377342728d0d8acaa85..4db6d9fe88d5ffba72e9bc381bfa63b72cf4d7f1 100644 (file)
@@ -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
        #