Merged from trunk -r15387:15397
authorFabian Groffen <grobian@gentoo.org>
Mon, 22 Feb 2010 12:56:52 +0000 (12:56 -0000)
committerFabian Groffen <grobian@gentoo.org>
Mon, 22 Feb 2010 12:56:52 +0000 (12:56 -0000)
   | 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

bin/repoman
pym/_emerge/Package.py
pym/_emerge/actions.py
pym/_emerge/depgraph.py
pym/_emerge/unmerge.py
pym/portage/__init__.py
pym/portage/dbapi/bintree.py
pym/portage/dbapi/vartree.py
pym/portage/dep.py

index da197b921c245fcd87ccf4a0a2cc1b2e048a3873..a8bcc9d65cba21d53e277914faf7158eed2661e1 100755 (executable)
@@ -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'
index df8232feb409991bfb37b8d8267a23e31c39e87b..168579458ea65f337547bc65d48bedf9188dd415 100644 (file)
@@ -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):
index c72c8255b8354655f584387dd74ad6d2c6e126c2..8eb4cf9aa8ce3368b83df0def60da36c94775cbb 100644 (file)
@@ -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 <atom>` 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.
index 89fdbe48c263c6b9b8375940918b894a1ab18fc9..ceb3062ad0b861691c6e2fca11a0aaba96e56ed6 100644 (file)
@@ -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."))
index e11c7dd7c9f0d8dda598ffddc30327539ef00579..6e62aae05540499493325afb81980291311e8b59 100644 (file)
@@ -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] = {}
index ceb9eaba8591d30cbbb3de4b3cb666f3a7259dbe..24bef01468e64f499016aef14b3c9aeafceb45c9 100644 (file)
@@ -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:
index e389c6959d7eae5bc52e3da39a4e38530d933303..393d59d58df2d6f76a9bdfe80bdd3e59c0617ab1 100644 (file)
@@ -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)+")"
index e054db5873c3fc00929a67d26f361bf6341c28d0..0c79d333caf69276e707333131c629a15584807e 100644 (file)
@@ -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
index 80b97c7635c8309c5a0a1b51b0edcf4efa871467..c0abdcbdea3ea0f5d863709183c6fe747bd70931 100644 (file)
@@ -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)