Merged from trunk -r15320:15333
authorFabian Groffen <grobian@gentoo.org>
Wed, 10 Feb 2010 18:49:31 +0000 (18:49 -0000)
committerFabian Groffen <grobian@gentoo.org>
Wed, 10 Feb 2010 18:49:31 +0000 (18:49 -0000)
   | 15321   | Bug #303445 - Fix getmaskingreason() to reset comment state  |
   | zmedico | when looping to the next package.mask file.                  |

   | 15322   | Bug #303401 - Fix emerge.log disabling code that's been      |
   | zmedico | broken since portage-2.1.7 when the _emerge module got split |
   |         | up.                                                          |

   | 15323   | Add an optional 'categories' parameter to                    |
   | zmedico | portdbapi.cp_all(), for listing a subset of categories.      |
   |         | Thanks to dol-sen for the suggestion.                        |

   | 15324   | Fix deprecated reference to portdbapi.mysettings.            |
   | zmedico |                                                              |

   | 15325   | Add a portdbapi.getRepositoryName() method which is the      |
   | zmedico | inverse of getRepositoryPath().                              |

   | 15326   | Import portage.StringIO for ImportError handling.            |
   | zmedico |                                                              |

   | 15327   | Skip atom validation in WorldHandler since WorldSelectedSet  |
   | zmedico | handles this already, and use Atom.cp instead of             |
   |         | dep_getkey().                                                |

   | 15328   | Make Glsa constructor raise GlsaFormatException when a       |
   | zmedico | package name attribute is invalid.                           |

   | 15329   | Use cpv_getkey() instead of dep_getkey() where appropriate.  |
   | zmedico |                                                              |

   | 15330   | Use Atom.cp instead of dep_getkey(), and use cpv_getkey()    |
   | zmedico | instead of dep_getkey() where appropriate.                   |

   | 15331   | Use Atom.cp instead of dep_getkey().                         |
   | zmedico |                                                              |

   | 15332   | Bug #298479 - Filter $USER from the ebuild environment since |
   | zmedico | it's inaccurate with FEATURES=userpriv.                      |

   | 15333   | Bug #303211 - Discard invalid SIZE metadata when using the   |
   | zmedico | old binhost protocol.                                        |

svn path=/main/branches/prefix/; revision=15335

bin/egencache
bin/emaint
bin/glsa-check
bin/repoman
pym/_emerge/create_world_atom.py
pym/_emerge/emergelog.py
pym/_emerge/main.py
pym/portage/__init__.py
pym/portage/dbapi/bintree.py
pym/portage/dbapi/porttree.py
pym/portage/glsa.py

index ac45d714f6b7b7651fd0e5d924ec4d430707aef3..1385044e4ec1d2f2d8bafba65172be37e0022a39 100755 (executable)
@@ -144,7 +144,7 @@ class GenCache(object):
                        consumer=self._metadata_callback,
                        max_jobs=max_jobs, max_load=max_load)
                self.returncode = os.EX_OK
-               metadbmodule = portdb.mysettings.load_best_module("portdbapi.metadbmodule")
+               metadbmodule = portdb.settings.load_best_module("portdbapi.metadbmodule")
                self._trg_cache = metadbmodule(portdb.porttrees[0],
                        "metadata/cache", portage.auxdbkeys[:])
                if rsync:
index 73c6924bde44811ff823be82b893d780c9d3c4b4..21d258115d5ae66c55f3e9218d3027dc242cd1b7 100755 (executable)
@@ -53,7 +53,7 @@ class WorldHandler(object):
                if onProgress:
                        onProgress(maxval, 0)
                for i, atom in enumerate(world_atoms):
-                       if not portage.isvalidatom(atom):
+                       if not isinstance(atom, portage.dep.Atom):
                                if atom.startswith(SETPREFIX):
                                        s = atom[len(SETPREFIX):]
                                        if s in sets:
@@ -65,12 +65,11 @@ class WorldHandler(object):
                                if onProgress:
                                        onProgress(maxval, i+1)
                                continue
-                       cp = portage.dep_getkey(atom)
                        okay = True
                        if not vardb.match(atom):
                                self.not_installed.append(atom)
                                okay = False
-                       if portage.catsplit(cp)[0] not in categories:
+                       if portage.catsplit(atom.cp)[0] not in categories:
                                self.invalid_category.append(atom)
                                okay = False
                        if okay:
index 14258823c278e7bbcf71d115c0e5f50850d7e057..dcc635b47079526b890f0dee4c471df82f7da1c9 100755 (executable)
@@ -180,7 +180,7 @@ def summarylist(myglsalist, fd1=sys.stdout, fd2=sys.stderr):
                                fd1.write("... ")
                else:
                        for pkg in myglsa.packages:
-                               mylist = vardb.match(portage.dep_getkey(str(pkg)))
+                               mylist = vardb.match(pkg)
                                if len(mylist) > 0:
                                        pkg = color(" ".join(mylist))
                                fd1.write(" " + pkg + " ")
@@ -230,12 +230,12 @@ if mode in ["dump", "fix", "inject", "pretend"]:
                                sys.stdout.write("The following updates will be performed for this GLSA:\n")
                                for pkg in mergelist:
                                        oldver = None
-                                       for x in vardb.match(portage.dep_getkey(pkg)):
+                                       for x in vardb.match(portage.cpv_getkey(pkg)):
                                                if vardb.aux_get(x, ["SLOT"]) == portdb.aux_get(pkg, ["SLOT"]):
                                                        oldver = x
                                        if oldver == None:
                                                raise ValueError("could not find old version for package %s" % pkg)
-                                       oldver = oldver[len(portage.dep_getkey(oldver))+1:]
+                                       oldver = oldver[len(portage.cpv_getkey(oldver))+1:]
                                        sys.stdout.write("     " + pkg + " (" + oldver + ")\n")
                        else:
                                sys.stdout.write("Nothing to do for this GLSA\n")
index c522bb8506d4ffc3df8134a6d573ea3171bd7167..da197b921c245fcd87ccf4a0a2cc1b2e048a3873 100755 (executable)
@@ -32,7 +32,6 @@ try:
 except ImportError:
        from urllib import urlopen as urllib_request_urlopen
 
-from io import StringIO
 from itertools import chain
 from stat import S_ISDIR, ST_CTIME
 
@@ -53,6 +52,7 @@ portage._disable_legacy_globals()
 from portage import os
 from portage import _encodings
 from portage import _unicode_encode
+from portage import StringIO
 
 from repoman.checks import run_checks
 from repoman import utilities
@@ -677,7 +677,7 @@ repoman_settings.backup_changes('PORTAGE_ARCHLIST')
 global_pmasklines = portage.util.stack_lists(global_pmasklines, incremental=1)
 global_pmaskdict = {}
 for x in global_pmasklines:
-       global_pmaskdict.setdefault(portage.dep_getkey(x), []).append(x)
+       global_pmaskdict.setdefault(x.cp, []).append(x)
 del global_pmasklines
 
 def has_global_mask(pkg):
@@ -1396,14 +1396,25 @@ for x in scanlist:
                                        "%s: '%s' found in thirdpartymirrors" % \
                                        (relative_path, mirror))
 
+               provide = portage.flatten(portage.dep.use_reduce(
+                       portage.dep.paren_reduce(pkg.metadata['PROVIDE']), matchall=1))
+               provide_cps = []
+
                # The Package class automatically evaluates USE conditionals.
-               for myprovide in portage.flatten(portage.dep.use_reduce(
-                       portage.dep.paren_reduce(pkg.metadata['PROVIDE']), matchall=1)):
-                       prov_cp = portage.dep_getkey(myprovide)
+               for myprovide in provide:
+                       try:
+                               myprovide = portage.dep.Atom(myprovide)
+                       except portage.exception.InvalidAtom:
+                               stats["PROVIDE.syntax"] = stats["PROVIDE.syntax"] + 1
+                               fails["PROVIDE.syntax"].append("%s: %s" % \
+                                       (relative_path, myprovide))
+                               continue
+                       prov_cp = myprovide.cp
+                       provide_cps.append(prov_cp)
                        if prov_cp != myprovide:
                                stats["virtual.versioned"]+=1
                                fails["virtual.versioned"].append(x+"/"+y+".ebuild: "+myprovide)
-                       prov_pkg = portage.dep_getkey(
+                       prov_pkg = portage.cpv_getkey(
                                portage.best(portdb.xmatch("match-all", prov_cp)))
                        if prov_cp == prov_pkg:
                                stats["virtual.exists"]+=1
@@ -1584,12 +1595,12 @@ for x in scanlist:
                                                if mytype == "DEPEND" and \
                                                        not is_blocker and \
                                                        not inherited_java_eclass and \
-                                                       portage.dep_getkey(atom) == "virtual/jdk":
+                                                       atom.cp == "virtual/jdk":
                                                        stats['java.eclassesnotused'] += 1
                                                        fails['java.eclassesnotused'].append(relative_path)
                                                elif mytype in ("PDEPEND", "RDEPEND"):
                                                        if not is_blocker and \
-                                                               portage.dep_getkey(atom) in suspect_rdepend:
+                                                               atom.cp in suspect_rdepend:
                                                                stats[mytype + '.suspect'] += 1
                                                                fails[mytype + '.suspect'].append(
                                                                        relative_path + ": '%s'" % atom)
@@ -1781,8 +1792,7 @@ for x in scanlist:
                                # just in case, prevent config.reset() from nuking these.
                                dep_settings.backup_changes("ACCEPT_KEYWORDS")
 
-                               for myprovide in myaux["PROVIDE"].split():
-                                       prov_cp = portage.dep_getkey(myprovide)
+                               for prov_cp in provide_cps:
                                        if prov_cp not in dep_settings.getvirtuals():
                                                stats["virtual.unavailable"]+=1
                                                fails["virtual.unavailable"].append("%s: %s(%s) %s" % \
index 1618905c92100382c6e95a59fa2fad81e5680033..2bc1ec542fade450721c582a976fedba71bbd39d 100644 (file)
@@ -15,7 +15,7 @@ def create_world_atom(pkg, args_set, root_config):
        arg_atom = args_set.findAtomForPackage(pkg)
        if not arg_atom:
                return None
-       cp = portage.dep_getkey(arg_atom)
+       cp = arg_atom.cp
        new_world_atom = cp
        sets = root_config.sets
        portdb = root_config.trees["porttree"].dbapi
@@ -76,15 +76,14 @@ def create_world_atom(pkg, args_set, root_config):
                # can't be safely excluded from world if they are slotted.
                system_atom = sets["system"].findAtomForPackage(pkg)
                if system_atom:
-                       if not portage.dep_getkey(system_atom).startswith("virtual/"):
+                       if not system_atom.cp.startswith("virtual/"):
                                return None
                        # System virtuals aren't safe to exclude from world since they can
                        # match multiple old-style virtuals but only one of them will be
                        # pulled in by update or depclean.
-                       providers = portdb.settings.getvirtuals().get(
-                               portage.dep_getkey(system_atom))
+                       providers = portdb.settings.getvirtuals().get(system_atom.cp)
                        if providers and len(providers) == 1 and \
-                               portage.dep_getkey(providers[0]) == cp:
+                               providers[0].cp == arg_atom.cp:
                                return None
        return new_world_atom
 
index e7b1f49d792e6234967f02741e98006b7bbaff3a..cf4e21c416daf9712a6d8ebff05e2e7fae236f05 100644 (file)
@@ -16,9 +16,13 @@ from portage.output import xtermTitle
 from portage.const import EPREFIX
 
 _emerge_log_dir = EPREFIX + '/var/log'
+_disable = False
 
 def emergelog(xterm_titles, mystr, short_msg=None):
 
+       if _disable:
+               return
+
        mystr = portage._unicode_decode(mystr)
 
        if short_msg is not None:
index e3d085a9db3d004a1bb085c2b1f0f77c9cb222a7..b5f97a81a23b4ecb03435dd31e0c3dbb77c215cc 100644 (file)
@@ -41,6 +41,7 @@ from _emerge.actions import action_config, action_sync, action_metadata, \
        action_regen, action_search, action_uninstall, action_info, action_build, \
        adjust_configs, chk_updated_cfg_files, display_missing_pkg_set, \
        display_news_notification, getportageversion, load_emerge_config
+import _emerge
 from _emerge.emergelog import emergelog
 from _emerge._flush_elog_mod_echo import _flush_elog_mod_echo
 from _emerge.is_valid_package_atom import is_valid_package_atom
@@ -1396,9 +1397,7 @@ def emerge_main():
                operations.  This helps minimize parallel emerge.log entries that can
                confuse log parsers.  We especially want it disabled during
                parallel-fetch, which uses --resume --fetchonly."""
-               global emergelog
-               def emergelog(*pargs, **kargs):
-                       pass
+               _emerge.emergelog._disable = True
 
        else:
                if 'EMERGE_LOG_DIR' in settings:
index 8ef9ebb2ee476ad2bcfe2d48c4e1d80fd4acbb3b..9a55f90e265ca92f1700c6016d857cedfca67a09 100644 (file)
@@ -1488,7 +1488,7 @@ class config(object):
 
        # misc variables inherited from the calling environment
        _environ_filter += [
-               "INFOPATH", "MANPATH",
+               "INFOPATH", "MANPATH", "USER",
                "HOST", "GROUP", "LOGNAME", "MAIL", "REMOTEHOST",
                "SECURITYSESSIONID",
                "TERMINFO", "TERM_PROGRAM", "TERM_PROGRAM_VERSION",
@@ -8593,10 +8593,9 @@ def getmaskingreason(mycpv, metadata=None, settings=None, portdb=None, return_lo
        if mycp in settings.pmaskdict:
                for x in settings.pmaskdict[mycp]:
                        if match_from_list(x, cpv_slot_list):
-                               comment = ""
-                               l = "\n"
-                               comment_valid = -1
                                for pmask in pmasklists:
+                                       comment = ""
+                                       comment_valid = -1
                                        pmask_filename = os.path.join(pmask[0], "package.mask")
                                        for i in range(len(pmask[1])):
                                                l = pmask[1][i].strip()
index 9fc2973e6b29f6ecb54a3a81ed9aae210684c4ba..41936d813ec3ebc9fc682b69ea9678bec5d3b7fd 100644 (file)
@@ -841,6 +841,17 @@ class binarytree(object):
                                        remote_metadata = self.remotepkgs[mypkg]
                                        for k, v in remote_metadata.items():
                                                remote_metadata[k] = v.strip()
+
+                                       # Eliminate metadata values with names that digestCheck
+                                       # uses, since they are not valid when using the old
+                                       # protocol. Typically this is needed for SIZE metadata
+                                       # which corresponds to the size of the unpacked files
+                                       # rather than the binpkg file size, triggering digest
+                                       # verification failures as reported in bug #303211.
+                                       remote_metadata.pop('SIZE', None)
+                                       for k in portage.checksum.hashfunc_map:
+                                               remote_metadata.pop(k, None)
+
                                        self._remotepkgs[fullpkg] = remote_metadata
                                        #print "  -- Injected"
                                except SystemExit as e:
index 4cf7d410d1e02beacd7fee91254983c075ed1e9a..5a845118daad863353dbfe744e05699a325f33ce 100644 (file)
@@ -452,6 +452,18 @@ class portdbapi(dbapi):
                        return self.treemap[repository_id]
                return None
 
+       def getRepositoryName(self, canonical_repo_path):
+               """
+               This is the inverse of getRepositoryPath().
+               @param canonical_repo_path: the canonical path of a repository, as
+                       resolved by os.path.realpath()
+               @type canonical_repo_path: String
+               @returns: The repo_name for the corresponding repository, or None
+                       if the path does not correspond a known repository
+               @rtype: String or None
+               """
+               return self._repository_map.get(canonical_repo_path)
+
        def getRepositories(self):
                """
                This function is required for GLEP 42 compliance; it will return a list of
@@ -889,10 +901,12 @@ class portdbapi(dbapi):
                else:
                        return 0
 
-       def cp_all(self):
+       def cp_all(self, categories=None):
                "returns a list of all keys in our tree"
                d = {}
-               for x in self.settings.categories:
+               if categories is None:
+                       categories = self.settings.categories
+               for x in categories:
                        for oroot in self.porttrees:
                                for y in listdir(oroot+"/"+x, EmptyOnError=1, ignorecvs=1, dirsonly=1):
                                        if not self._pkg_dir_name_re.match(y) or \
index 4684ea420a77a887f7dbf66813d0f2f2707cc1bd..98602e4cc081d46f7389815f5601b5ce4a749a19 100644 (file)
@@ -11,6 +11,7 @@ except ImportError:
 import re
 import xml.dom.minidom
 
+import portage
 from portage import os
 from portage import _encodings
 from portage import _unicode_decode
@@ -551,6 +552,13 @@ class Glsa:
                self.packages = {}
                for p in self.affected.getElementsByTagName("package"):
                        name = p.getAttribute("name")
+                       try:
+                               name = portage.dep.Atom(name)
+                       except portage.exception.InvalidAtom:
+                               raise GlsaFormatException(_("invalid package name: %s") % name)
+                       if name != name.cp:
+                               raise GlsaFormatException(_("invalid package name: %s") % name)
+                       name = name.cp
                        if name not in self.packages:
                                self.packages[name] = []
                        tmp = {}