From: Fabian Groffen Date: Mon, 22 Feb 2010 12:56:52 +0000 (-0000) Subject: Merged from trunk -r15387:15397 X-Git-Url: http://git.tremily.us/gitweb.cgi?a=commitdiff_plain;h=5395024a26158595243c6731de79434b869346e9;p=portage.git Merged from trunk -r15387:15397 | 15388 | Fix deprecated usage of dep_getkey. | | zmedico | | | 15390 | Fix deprecated usage of dep_getkey. | | zmedico | | | 15391 | Fix deprecated usage of dep_getkey. | | zmedico | | | 15392 | Bug #303519 - Call warnings.warn() with stacklevel=2 inside | | zmedico | dep_getkey and dep_getcpv so that the caller is displayed. | | 15393 | Bug #268724 - Show a warning message for --unmerge | | zmedico | operations and suggest --depclean instead. | | 15394 | Bail out when given an invalid mode. | | zmedico | | | 15395 | Fix deprecated usage of dep_getkey. | | zmedico | | | 15396 | Fix deprecated usage of dep_getkey. | | zmedico | | | 15397 | Use isvalidatom to validate PROVIDE entries. | | zmedico | | svn path=/main/branches/prefix/; revision=15430 --- diff --git a/bin/repoman b/bin/repoman index da197b921..a8bcc9d65 100755 --- a/bin/repoman +++ b/bin/repoman @@ -228,11 +228,13 @@ def ParseArgs(args, qahelp): if opts.mode == 'help': parser.print_help(short=False) - for arg in args: + for arg in args[1:]: if arg in modes: if not opts.mode: opts.mode = arg break + else: + parser.error("invalid mode: %s" % arg) if not opts.mode: opts.mode = 'full' diff --git a/pym/_emerge/Package.py b/pym/_emerge/Package.py index df8232feb..168579458 100644 --- a/pym/_emerge/Package.py +++ b/pym/_emerge/Package.py @@ -7,7 +7,7 @@ import sys from itertools import chain import portage from portage.cache.mappings import slot_dict_class -from portage.dep import paren_reduce, use_reduce, \ +from portage.dep import isvalidatom, paren_reduce, use_reduce, \ paren_normalize, paren_enclose, _slot_re from portage.const import EPREFIX from _emerge.Task import Task @@ -303,9 +303,15 @@ class _PackageMetadataWrapper(_PackageMetadataWrapperBase): getattr(self, "_set_" + k.lower())(k, v) elif k in self._use_conditional_keys: try: - use_reduce(paren_reduce(v), matchall=1) + reduced = use_reduce(paren_reduce(v), matchall=1) except portage.exception.InvalidDependString as e: self._pkg._invalid_metadata(k + ".syntax", "%s: %s" % (k, e)) + else: + if reduced and k == 'PROVIDE': + for x in portage.flatten(reduced): + if not isvalidatom(x): + self._pkg._invalid_metadata(k + ".syntax", + "%s: %s" % (k, x)) def _set_inherited(self, k, v): if isinstance(v, basestring): diff --git a/pym/_emerge/actions.py b/pym/_emerge/actions.py index c72c8255b..8eb4cf9aa 100644 --- a/pym/_emerge/actions.py +++ b/pym/_emerge/actions.py @@ -2328,6 +2328,15 @@ def action_uninstall(settings, trees, ldpath_mtimes, if files and not valid_atoms: return 1 + if action == 'unmerge' and '--quiet' not in opts: + msg = "This action can remove important packages! " + \ + "In order to be safer, use " + \ + "`emerge -pv --depclean ` to check for " + \ + "reverse dependencies before removing packages." + out = portage.output.EOutput() + for line in textwrap.wrap(msg, 72): + out.ewarn(line) + if action in ('clean', 'unmerge') or \ (action == 'prune' and "--nodeps" in opts): # When given a list of atoms, unmerge them in the order given. diff --git a/pym/_emerge/depgraph.py b/pym/_emerge/depgraph.py index 89fdbe48c..ceb3062ad 100644 --- a/pym/_emerge/depgraph.py +++ b/pym/_emerge/depgraph.py @@ -1576,7 +1576,7 @@ class depgraph(object): print(colorize("BAD", "\n*** You need to adjust PORTDIR or PORTDIR_OVERLAY to emerge this package.\n")) return 0, myfavorites if mykey not in portdb.xmatch( - "match-visible", portage.dep_getkey(mykey)): + "match-visible", portage.cpv_getkey(mykey)): print(colorize("BAD", "\n*** You are emerging a masked package. It is MUCH better to use")) print(colorize("BAD", "*** /etc/portage/package.* to accomplish this. See portage(5) man")) print(colorize("BAD", "*** page for details.")) diff --git a/pym/_emerge/unmerge.py b/pym/_emerge/unmerge.py index e11c7dd7c..6e62aae05 100644 --- a/pym/_emerge/unmerge.py +++ b/pym/_emerge/unmerge.py @@ -237,7 +237,7 @@ def unmerge(root_config, myopts, unmerge_action, slotmap[myslot][localtree.dbapi.cpv_counter(mypkg)] = mypkg for mypkg in vartree.dbapi.cp_list( - portage.dep_getkey(mymatch[0])): + portage.cpv_getkey(mymatch[0])): myslot = vartree.getslot(mypkg) if myslot not in slotmap: slotmap[myslot] = {} diff --git a/pym/portage/__init__.py b/pym/portage/__init__.py index ceb9eaba8..24bef0146 100644 --- a/pym/portage/__init__.py +++ b/pym/portage/__init__.py @@ -8734,7 +8734,7 @@ def getmaskingstatus(mycpv, settings=None, portdb=None): valid keyword.""" myarch = pgroups[0].lstrip("~") - cp = dep_getkey(mycpv) + cp = cpv_getkey(mycpv) pkgdict = settings.pkeywordsdict.get(cp) matches = False if pkgdict: diff --git a/pym/portage/dbapi/bintree.py b/pym/portage/dbapi/bintree.py index e389c6959..393d59d58 100644 --- a/pym/portage/dbapi/bintree.py +++ b/pym/portage/dbapi/bintree.py @@ -848,7 +848,7 @@ class binarytree(object): (fullpkg, self.settings["PORTAGE_CONFIGROOT"]), noiselevel=-1) continue - mykey = dep_getkey(fullpkg) + mykey = portage.cpv_getkey(fullpkg) try: # invalid tbz2's can hurt things. #print "cpv_inject("+str(fullpkg)+")" diff --git a/pym/portage/dbapi/vartree.py b/pym/portage/dbapi/vartree.py index e054db587..0c79d333c 100644 --- a/pym/portage/dbapi/vartree.py +++ b/pym/portage/dbapi/vartree.py @@ -3122,7 +3122,7 @@ class dblink(object): if others_in_slot is None: slot = self.vartree.dbapi.aux_get(self.mycpv, ["SLOT"])[0] slot_matches = self.vartree.dbapi.match( - "%s:%s" % (dep_getkey(self.mycpv), slot)) + "%s:%s" % (portage.cpv_getkey(self.mycpv), slot)) others_in_slot = [] for cur_cpv in slot_matches: if cur_cpv == self.mycpv: @@ -3394,7 +3394,7 @@ class dblink(object): others_in_slot = [] slot = self.vartree.dbapi.aux_get(self.mycpv, ["SLOT"])[0] slot_matches = self.vartree.dbapi.match( - "%s:%s" % (dep_getkey(self.mycpv), slot)) + "%s:%s" % (portage.cpv_getkey(self.mycpv), slot)) for cur_cpv in slot_matches: if cur_cpv == self.mycpv: continue diff --git a/pym/portage/dep.py b/pym/portage/dep.py index 80b97c763..c0abdcbde 100644 --- a/pym/portage/dep.py +++ b/pym/portage/dep.py @@ -708,7 +708,7 @@ def dep_getcpv(mydep): # Fall back to legacy code for backward compatibility. warnings.warn(_("%s is deprecated, use %s instead") % \ ('portage.dep.dep_getcpv()', 'portage.dep.Atom.cpv'), - DeprecationWarning) + DeprecationWarning, stacklevel=2) mydep_orig = mydep if mydep: mydep = remove_slot(mydep) @@ -943,13 +943,13 @@ def dep_getkey(mydep): else: warnings.warn(_("invalid input to %s: '%s', use %s instead") % \ ('portage.dep.dep_getkey()', mydep, 'portage.cpv_getkey()'), - DeprecationWarning) + DeprecationWarning, stacklevel=2) return atom.cp # Fall back to legacy code for backward compatibility. warnings.warn(_("%s is deprecated, use %s instead") % \ ('portage.dep.dep_getkey()', 'portage.dep.Atom.cp'), - DeprecationWarning) + DeprecationWarning, stacklevel=2) mydep = dep_getcpv(mydep) if mydep and isspecific(mydep): mysplit = catpkgsplit(mydep)