From: Fabian Groffen Date: Wed, 10 Feb 2010 18:49:31 +0000 (-0000) Subject: Merged from trunk -r15320:15333 X-Git-Url: http://git.tremily.us/gitweb.cgi?a=commitdiff_plain;h=f4e175f6ce062b57c283b1732096ab24a831212a;p=portage.git Merged from trunk -r15320:15333 | 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 --- diff --git a/bin/egencache b/bin/egencache index ac45d714f..1385044e4 100755 --- a/bin/egencache +++ b/bin/egencache @@ -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: diff --git a/bin/emaint b/bin/emaint index 73c6924bd..21d258115 100755 --- a/bin/emaint +++ b/bin/emaint @@ -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: diff --git a/bin/glsa-check b/bin/glsa-check index 14258823c..dcc635b47 100755 --- a/bin/glsa-check +++ b/bin/glsa-check @@ -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") diff --git a/bin/repoman b/bin/repoman index c522bb850..da197b921 100755 --- a/bin/repoman +++ b/bin/repoman @@ -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" % \ diff --git a/pym/_emerge/create_world_atom.py b/pym/_emerge/create_world_atom.py index 1618905c9..2bc1ec542 100644 --- a/pym/_emerge/create_world_atom.py +++ b/pym/_emerge/create_world_atom.py @@ -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 diff --git a/pym/_emerge/emergelog.py b/pym/_emerge/emergelog.py index e7b1f49d7..cf4e21c41 100644 --- a/pym/_emerge/emergelog.py +++ b/pym/_emerge/emergelog.py @@ -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: diff --git a/pym/_emerge/main.py b/pym/_emerge/main.py index e3d085a9d..b5f97a81a 100644 --- a/pym/_emerge/main.py +++ b/pym/_emerge/main.py @@ -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: diff --git a/pym/portage/__init__.py b/pym/portage/__init__.py index 8ef9ebb2e..9a55f90e2 100644 --- a/pym/portage/__init__.py +++ b/pym/portage/__init__.py @@ -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() diff --git a/pym/portage/dbapi/bintree.py b/pym/portage/dbapi/bintree.py index 9fc2973e6..41936d813 100644 --- a/pym/portage/dbapi/bintree.py +++ b/pym/portage/dbapi/bintree.py @@ -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: diff --git a/pym/portage/dbapi/porttree.py b/pym/portage/dbapi/porttree.py index 4cf7d410d..5a845118d 100644 --- a/pym/portage/dbapi/porttree.py +++ b/pym/portage/dbapi/porttree.py @@ -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 \ diff --git a/pym/portage/glsa.py b/pym/portage/glsa.py index 4684ea420..98602e4cc 100644 --- a/pym/portage/glsa.py +++ b/pym/portage/glsa.py @@ -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 = {}