Remove the support for PROVIDE metadata. The aux entry that used to
be assigned to this variable is now reused in the PMS, so we finally
need to clean up.
---
 bin/ebuild.sh                                      |  2 +-
 bin/phase-functions.sh                             |  2 +-
 man/ebuild.5                                       | 10 -----
 pym/_emerge/Package.py                             | 27 ++----------
 pym/portage/__init__.py                            |  2 +-
 pym/portage/_sets/base.py                          | 17 +-------
 pym/portage/cache/metadata.py                      |  4 +-
 pym/portage/dbapi/__init__.py                      |  4 +-
 pym/portage/dbapi/bintree.py                       |  9 ++--
 pym/portage/dbapi/dep_expand.py                    |  2 +-
 pym/portage/dbapi/porttree.py                      |  4 +-
 pym/portage/dbapi/vartree.py                       | 38 ++--------------
 pym/portage/dep/__init__.py                        | 20 +--------
 pym/portage/emaint/modules/move/move.py            |  4 +-
 pym/portage/package/ebuild/_config/MaskManager.py  | 10 ++---
 .../package/ebuild/_config/special_env_vars.py     |  4 +-
 pym/portage/package/ebuild/config.py               | 43 +++---------------
 pym/portage/package/ebuild/doebuild.py             |  2 +-
 pym/portage/repository/config.py                   |  5 +--
 .../tests/resolver/test_virtual_transition.py      | 51 ----------------------
 repoman/man/repoman.1                              |  7 ---
 .../repoman/modules/scan/depend/_depend_checks.py  |  2 +-
 .../modules/scan/metadata/ebuild_metadata.py       |  8 +---
 repoman/pym/repoman/qa_data.py                     |  2 -
 repoman/pym/repoman/repos.py                       |  3 --
 25 files changed, 43 insertions(+), 239 deletions(-)
 delete mode 100644 pym/portage/tests/resolver/test_virtual_transition.py

diff --git a/bin/ebuild.sh b/bin/ebuild.sh
index 67d255f78..9995a2f99 100755
--- a/bin/ebuild.sh
+++ b/bin/ebuild.sh
@@ -728,7 +728,7 @@ if [[ $EBUILD_PHASE = depend ]] ; then
        fi
 
        auxdbkeys="DEPEND RDEPEND SLOT SRC_URI RESTRICT HOMEPAGE LICENSE
-               DESCRIPTION KEYWORDS INHERITED IUSE REQUIRED_USE PDEPEND 
PROVIDE EAPI
+               DESCRIPTION KEYWORDS INHERITED IUSE REQUIRED_USE PDEPEND 
UNUSED_05 EAPI
                PROPERTIES DEFINED_PHASES HDEPEND UNUSED_04
                UNUSED_03 UNUSED_02 UNUSED_01"
 
diff --git a/bin/phase-functions.sh b/bin/phase-functions.sh
index 017dc132b..0ceddb451 100644
--- a/bin/phase-functions.sh
+++ b/bin/phase-functions.sh
@@ -9,7 +9,7 @@
 
 PORTAGE_READONLY_METADATA="DEFINED_PHASES DEPEND DESCRIPTION
        EAPI HDEPEND HOMEPAGE INHERITED IUSE REQUIRED_USE KEYWORDS LICENSE
-       PDEPEND PROVIDE RDEPEND REPOSITORY RESTRICT SLOT SRC_URI"
+       PDEPEND RDEPEND REPOSITORY RESTRICT SLOT SRC_URI"
 
 PORTAGE_READONLY_VARS="D EBUILD EBUILD_PHASE EBUILD_PHASE_FUNC \
        EBUILD_SH_ARGS EMERGE_FROM FILESDIR MERGE_TYPE \
diff --git a/man/ebuild.5 b/man/ebuild.5
index 71e754d48..eb27d43bb 100644
--- a/man/ebuild.5
+++ b/man/ebuild.5
@@ -726,16 +726,6 @@ A space delimited list of properties, with conditional 
syntax support.
 One or more ebuild phases will produce a prompt that requires user interaction.
 .RE
 .PD 1
-.TP
-.B PROVIDE\fR = \fI"virtual/TARGET"
-This variable should only be used when a package provides a virtual target.
-For example, blackdown\-jdk and sun\-jdk provide \fIvirtual/jdk\fR.  This
-allows for packages to depend on \fIvirtual/jdk\fR rather than on blackdown
-or sun specifically.
-
-The \fBPROVIDE\fR variable has been deprecated. See
-\fIhttps://www.gentoo.org/glep/glep-0037.html\fR for details.
-
 .TP
 .B DOCS
 Beginning with \fBEAPI 4\fR, an array or space\-delimited list of documentation
diff --git a/pym/_emerge/Package.py b/pym/_emerge/Package.py
index cebfd8281..b7911c5f4 100644
--- a/pym/_emerge/Package.py
+++ b/pym/_emerge/Package.py
@@ -1,4 +1,4 @@
-# Copyright 1999-2014 Gentoo Foundation
+# Copyright 1999-2018 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
 from __future__ import unicode_literals
@@ -44,7 +44,7 @@ class Package(Task):
        metadata_keys = [
                "BUILD_ID", "BUILD_TIME", "CHOST", "COUNTER", "DEFINED_PHASES",
                "DEPEND", "EAPI", "HDEPEND", "INHERITED", "IUSE", "KEYWORDS",
-               "LICENSE", "MD5", "PDEPEND", "PROVIDE", "PROVIDES",
+               "LICENSE", "MD5", "PDEPEND", "PROVIDES",
                "RDEPEND", "repository", "REQUIRED_USE",
                "PROPERTIES", "REQUIRES", "RESTRICT", "SIZE",
                "SLOT", "USE", "_mtime_"]
@@ -165,17 +165,7 @@ class Package(Task):
 
        @property
        def provided_cps(self):
-
-               if self._provided_cps is None:
-                       provided_cps = [self.cp]
-                       for atom in self._metadata["PROVIDE"].split():
-                               try:
-                                       provided_cps.append(Atom(atom).cp)
-                               except InvalidAtom:
-                                       pass
-                       self._provided_cps = tuple(provided_cps)
-
-               return self._provided_cps
+               return (self.cp,)
 
        @property
        def restrict(self):
@@ -324,15 +314,6 @@ class Package(Task):
                self._validated_atoms = tuple(set(atom for atom in
                        validated_atoms if isinstance(atom, Atom)))
 
-               k = 'PROVIDE'
-               v = self._metadata.get(k)
-               if v:
-                       try:
-                               use_reduce(v, eapi=dep_eapi, matchall=True,
-                                       is_valid_flag=dep_valid_flag, 
token_class=Atom)
-                       except InvalidDependString as e:
-                               self._invalid_metadata("PROVIDE.syntax", "%s: 
%s" % (k, e))
-
                for k in self._use_conditional_misc_keys:
                        v = self._metadata.get(k)
                        if not v:
@@ -873,7 +854,7 @@ class _PackageMetadataWrapper(_PackageMetadataWrapperBase):
        _wrapped_keys = frozenset(
                ["COUNTER", "INHERITED", "USE", "_mtime_"])
        _use_conditional_keys = frozenset(
-               ['LICENSE', 'PROPERTIES', 'PROVIDE', 'RESTRICT',])
+               ['LICENSE', 'PROPERTIES', 'RESTRICT',])
 
        def __init__(self, pkg, metadata):
                _PackageMetadataWrapperBase.__init__(self)
diff --git a/pym/portage/__init__.py b/pym/portage/__init__.py
index 69658b432..8596b89b1 100644
--- a/pym/portage/__init__.py
+++ b/pym/portage/__init__.py
@@ -508,7 +508,7 @@ auxdbkeys = (
   'DEPEND',    'RDEPEND',   'SLOT',      'SRC_URI',
        'RESTRICT',  'HOMEPAGE',  'LICENSE',   'DESCRIPTION',
        'KEYWORDS',  'INHERITED', 'IUSE', 'REQUIRED_USE',
-       'PDEPEND',   'PROVIDE', 'EAPI',
+       'PDEPEND',   'UNUSED_05', 'EAPI',
        'PROPERTIES', 'DEFINED_PHASES', 'HDEPEND', 'UNUSED_04',
        'UNUSED_03', 'UNUSED_02', 'UNUSED_01',
 )
diff --git a/pym/portage/_sets/base.py b/pym/portage/_sets/base.py
index ee20d3671..aba295602 100644
--- a/pym/portage/_sets/base.py
+++ b/pym/portage/_sets/base.py
@@ -1,4 +1,4 @@
-# Copyright 2007-2014 Gentoo Foundation
+# Copyright 2007-2018 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
 import sys
@@ -157,21 +157,6 @@ class PackageSet(object):
                        for atom in atoms:
                                if match_from_list(atom, cpv_slot_list):
                                        yield atom
-               provides = pkg._metadata['PROVIDE']
-               if not provides:
-                       return
-               provides = provides.split()
-               for provide in provides:
-                       try:
-                               provided_cp = Atom(provide).cp
-                       except InvalidAtom:
-                               continue
-                       atoms = self._atommap.get(provided_cp)
-                       if atoms:
-                               for atom in atoms:
-                                       if 
match_from_list(atom.replace(provided_cp, cp),
-                                               cpv_slot_list):
-                                               yield atom
 
 class EditablePackageSet(PackageSet):
 
diff --git a/pym/portage/cache/metadata.py b/pym/portage/cache/metadata.py
index 0c588bde9..12639c6a1 100644
--- a/pym/portage/cache/metadata.py
+++ b/pym/portage/cache/metadata.py
@@ -1,4 +1,4 @@
-# Copyright 2005-2014 Gentoo Foundation
+# Copyright 2005-2018 Gentoo Foundation
 # Author(s): Brian Harring (ferri...@gentoo.org)
 # License: GPL2
 
@@ -29,7 +29,7 @@ class database(flat_hash.database):
        auxdbkey_order=('DEPEND', 'RDEPEND', 'SLOT', 'SRC_URI',
                'RESTRICT',  'HOMEPAGE',  'LICENSE', 'DESCRIPTION',
                'KEYWORDS',  'INHERITED', 'IUSE', 'REQUIRED_USE',
-               'PDEPEND',   'PROVIDE', 'EAPI', 'PROPERTIES',
+               'PDEPEND',   'UNUSED', 'EAPI', 'PROPERTIES',
                'DEFINED_PHASES', 'HDEPEND')
 
        autocommits = True
diff --git a/pym/portage/dbapi/__init__.py b/pym/portage/dbapi/__init__.py
index 2574b63df..c1b5d967d 100644
--- a/pym/portage/dbapi/__init__.py
+++ b/pym/portage/dbapi/__init__.py
@@ -1,4 +1,4 @@
-# Copyright 1998-2014 Gentoo Foundation
+# Copyright 1998-2018 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
 from __future__ import unicode_literals
@@ -316,7 +316,7 @@ class dbapi(object):
                maxval = len(cpv_all)
                aux_get = self.aux_get
                aux_update = self.aux_update
-               update_keys = Package._dep_keys + ("PROVIDE",)
+               update_keys = Package._dep_keys
                meta_keys = update_keys + self._pkg_str_aux_keys
                repo_dict = None
                if isinstance(updates, dict):
diff --git a/pym/portage/dbapi/bintree.py b/pym/portage/dbapi/bintree.py
index 201666c41..839897a41 100644
--- a/pym/portage/dbapi/bintree.py
+++ b/pym/portage/dbapi/bintree.py
@@ -1,4 +1,4 @@
-# Copyright 1998-2016 Gentoo Foundation
+# Copyright 1998-2018 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
 from __future__ import unicode_literals
@@ -87,7 +87,7 @@ class bindbapi(fakedbapi):
                self._aux_cache_keys = set(
                        ["BUILD_ID", "BUILD_TIME", "CHOST", "DEFINED_PHASES",
                        "DEPEND", "EAPI", "HDEPEND", "IUSE", "KEYWORDS",
-                       "LICENSE", "MD5", "PDEPEND", "PROPERTIES", "PROVIDE",
+                       "LICENSE", "MD5", "PDEPEND", "PROPERTIES",
                        "PROVIDES", "RDEPEND", "repository", "REQUIRES", 
"RESTRICT",
                        "SIZE", "SLOT", "USE", "_mtime_"
                        ])
@@ -315,13 +315,13 @@ class binarytree(object):
                                ["BASE_URI", "BUILD_ID", "BUILD_TIME", "CHOST",
                                "DEFINED_PHASES", "DEPEND", "DESCRIPTION", 
"EAPI",
                                "HDEPEND", "IUSE", "KEYWORDS", "LICENSE", 
"PDEPEND",
-                               "PKGINDEX_URI", "PROPERTIES", "PROVIDE", 
"PROVIDES",
+                               "PKGINDEX_URI", "PROPERTIES", "PROVIDES",
                                "RDEPEND", "repository", "REQUIRES", "RESTRICT",
                                "SIZE", "SLOT", "USE"]
                        self._pkgindex_aux_keys = list(self._pkgindex_aux_keys)
                        self._pkgindex_use_evaluated_keys = \
                                ("DEPEND", "HDEPEND", "LICENSE", "RDEPEND",
-                               "PDEPEND", "PROPERTIES", "PROVIDE", "RESTRICT")
+                               "PDEPEND", "PROPERTIES", "RESTRICT")
                        self._pkgindex_header_keys = set([
                                "ACCEPT_KEYWORDS", "ACCEPT_LICENSE",
                                "ACCEPT_PROPERTIES", "ACCEPT_RESTRICT", 
"CBUILD",
@@ -342,7 +342,6 @@ class binarytree(object):
                                "PATH"    : "",
                                "PDEPEND" : "",
                                "PROPERTIES" : "",
-                               "PROVIDE" : "",
                                "PROVIDES": "",
                                "RDEPEND" : "",
                                "REQUIRES": "",
diff --git a/pym/portage/dbapi/dep_expand.py b/pym/portage/dbapi/dep_expand.py
index 3de5d8fc3..9515b7dec 100644
--- a/pym/portage/dbapi/dep_expand.py
+++ b/pym/portage/dbapi/dep_expand.py
@@ -1,4 +1,4 @@
-# Copyright 2010-2013 Gentoo Foundation
+# Copyright 2010-2018 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
 from __future__ import unicode_literals
diff --git a/pym/portage/dbapi/porttree.py b/pym/portage/dbapi/porttree.py
index f8ff4833b..1353ac666 100644
--- a/pym/portage/dbapi/porttree.py
+++ b/pym/portage/dbapi/porttree.py
@@ -1,4 +1,4 @@
-# Copyright 1998-2015 Gentoo Foundation
+# Copyright 1998-2018 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
 from __future__ import unicode_literals
@@ -314,7 +314,7 @@ class portdbapi(dbapi):
                self._aux_cache_keys = set(
                        ["DEPEND", "EAPI", "HDEPEND",
                        "INHERITED", "IUSE", "KEYWORDS", "LICENSE",
-                       "PDEPEND", "PROPERTIES", "PROVIDE", "RDEPEND", 
"repository",
+                       "PDEPEND", "PROPERTIES", "RDEPEND", "repository",
                        "RESTRICT", "SLOT", "DEFINED_PHASES", "REQUIRED_USE"])
 
                self._aux_cache = {}
diff --git a/pym/portage/dbapi/vartree.py b/pym/portage/dbapi/vartree.py
index b28b1c56c..8b1b77f7d 100644
--- a/pym/portage/dbapi/vartree.py
+++ b/pym/portage/dbapi/vartree.py
@@ -1,4 +1,4 @@
-# Copyright 1998-2017 Gentoo Foundation
+# Copyright 1998-2018 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
 from __future__ import division, unicode_literals
@@ -179,7 +179,7 @@ class vardbapi(dbapi):
                        ["BUILD_TIME", "CHOST", "COUNTER", "DEPEND", 
"DESCRIPTION",
                        "EAPI", "HDEPEND", "HOMEPAGE",
                        "BUILD_ID", "IUSE", "KEYWORDS",
-                       "LICENSE", "PDEPEND", "PROPERTIES", "PROVIDE", 
"RDEPEND",
+                       "LICENSE", "PDEPEND", "PROPERTIES", "RDEPEND",
                        "repository", "RESTRICT" , "SLOT", "USE", 
"DEFINED_PHASES",
                        "PROVIDES", "REQUIRES"
                        ])
@@ -1475,40 +1475,10 @@ class vartree(object):
                return
 
        def get_provide(self, mycpv):
-               myprovides = []
-               mylines = None
-               try:
-                       mylines, myuse = self.dbapi.aux_get(mycpv, ["PROVIDE", 
"USE"])
-                       if mylines:
-                               myuse = myuse.split()
-                               mylines = use_reduce(mylines, uselist=myuse, 
flat=True)
-                               for myprovide in mylines:
-                                       mys = catpkgsplit(myprovide)
-                                       if not mys:
-                                               mys = myprovide.split("/")
-                                       myprovides += [mys[0] + "/" + mys[1]]
-                       return myprovides
-               except SystemExit as e:
-                       raise
-               except Exception as e:
-                       mydir = self.dbapi.getpath(mycpv)
-                       writemsg(_("\nParse Error reading PROVIDE and USE in 
'%s'\n") % mydir,
-                               noiselevel=-1)
-                       if mylines:
-                               writemsg(_("Possibly Invalid: '%s'\n") % 
str(mylines),
-                                       noiselevel=-1)
-                       writemsg(_("Exception: %s\n\n") % str(e), noiselevel=-1)
-                       return []
+               return []
 
        def get_all_provides(self):
-               myprovides = {}
-               for node in self.getallcpv():
-                       for mykey in self.get_provide(node):
-                               if mykey in myprovides:
-                                       myprovides[mykey] += [node]
-                               else:
-                                       myprovides[mykey] = [node]
-               return myprovides
+               return {}
 
        def dep_bestmatch(self, mydep, use_cache=1):
                "compatibility method -- all matches, not just visible ones"
diff --git a/pym/portage/dep/__init__.py b/pym/portage/dep/__init__.py
index 3d4bca08f..26595da47 100644
--- a/pym/portage/dep/__init__.py
+++ b/pym/portage/dep/__init__.py
@@ -1595,30 +1595,14 @@ class Atom(_unicode):
 
        def match(self, pkg):
                """
-               Check if the given package instance matches this atom. This
-               includes support for virtual matches via PROVIDE metadata.
+               Check if the given package instance matches this atom.
 
                @param pkg: a Package instance
                @type pkg: Package
                @return: True if this atom matches pkg, otherwise False
                @rtype: bool
                """
-               if pkg.cp == self.cp:
-                       return bool(match_from_list(self, [pkg]))
-               else:
-                       try:
-                               provided_cps = pkg.provided_cps
-                       except AttributeError:
-                               # Since _pkg_str instances lack PROVIDE 
metadata,
-                               # just ignore this case (PROVIDE has been 
deprecated
-                               # for years).
-                               pass
-                       else:
-                               for provided_cp in provided_cps:
-                                       if provided_cp == self.cp:
-                                               return bool(match_from_list(
-                                                       self.replace(self.cp, 
provided_cp, 1), [pkg]))
-               return False
+               return bool(match_from_list(self, [pkg]))
 
 _extended_cp_re_cache = {}
 
diff --git a/pym/portage/emaint/modules/move/move.py 
b/pym/portage/emaint/modules/move/move.py
index 4e505ceee..e9a6acb6b 100644
--- a/pym/portage/emaint/modules/move/move.py
+++ b/pym/portage/emaint/modules/move/move.py
@@ -1,4 +1,4 @@
-# Copyright 2005-2012 Gentoo Foundation
+# Copyright 2005-2018 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
 import portage
@@ -12,7 +12,7 @@ class MoveHandler(object):
        def __init__(self, tree, porttree):
                self._tree = tree
                self._portdb = porttree.dbapi
-               self._update_keys = Package._dep_keys + ("PROVIDE",)
+               self._update_keys = Package._dep_keys
                self._master_repo = self._portdb.repositories.mainRepo()
                if self._master_repo is not None:
                        self._master_repo = self._master_repo.name
diff --git a/pym/portage/package/ebuild/_config/MaskManager.py 
b/pym/portage/package/ebuild/_config/MaskManager.py
index 44aba23bb..40cc6e0c4 100644
--- a/pym/portage/package/ebuild/_config/MaskManager.py
+++ b/pym/portage/package/ebuild/_config/MaskManager.py
@@ -1,4 +1,4 @@
-# Copyright 2010-2014 Gentoo Foundation
+# Copyright 2010-2018 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
 __all__ = (
@@ -182,8 +182,7 @@ class MaskManager(object):
        def _getMaskAtom(self, cpv, slot, repo, unmask_atoms=None):
                """
                Take a package and return a matching package.mask atom, or None 
if no
-               such atom exists or it has been cancelled by package.unmask. 
PROVIDE
-               is not checked, so atoms will not be found for old-style 
virtuals.
+               such atom exists or it has been cancelled by package.unmask.
 
                @param cpv: The package name
                @type cpv: String
@@ -221,8 +220,7 @@ class MaskManager(object):
        def getMaskAtom(self, cpv, slot, repo):
                """
                Take a package and return a matching package.mask atom, or None 
if no
-               such atom exists or it has been cancelled by package.unmask. 
PROVIDE
-               is not checked, so atoms will not be found for old-style 
virtuals.
+               such atom exists or it has been cancelled by package.unmask.
 
                @param cpv: The package name
                @type cpv: String
@@ -249,8 +247,6 @@ class MaskManager(object):
                """
                Take a package and return a matching package.mask atom, or None 
if no
                such atom exists. It HAS NOT! been cancelled by any 
package.unmask.
-               PROVIDE is not checked, so atoms will not be found for old-style
-               virtuals.
 
                @param cpv: The package name
                @type cpv: String
diff --git a/pym/portage/package/ebuild/_config/special_env_vars.py 
b/pym/portage/package/ebuild/_config/special_env_vars.py
index 1753c8b92..65a009d05 100644
--- a/pym/portage/package/ebuild/_config/special_env_vars.py
+++ b/pym/portage/package/ebuild/_config/special_env_vars.py
@@ -1,4 +1,4 @@
-# Copyright 2010-2014 Gentoo Foundation
+# Copyright 2010-2018 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
 from __future__ import unicode_literals
@@ -26,7 +26,7 @@ env_blacklist = frozenset((
        "PORTAGE_BUILT_USE", "PORTAGE_CONFIGROOT",
        "PORTAGE_INTERNAL_CALLER", "PORTAGE_IUSE",
        "PORTAGE_NONFATAL", "PORTAGE_PIPE_FD", "PORTAGE_REPO_NAME",
-       "PORTAGE_USE", "PROPERTIES", "PROVIDE", "RDEPEND", "REPOSITORY",
+       "PORTAGE_USE", "PROPERTIES", "RDEPEND", "REPOSITORY",
        "REQUIRED_USE", "RESTRICT", "ROOT", "SLOT", "SRC_URI", "_"
 ))
 
diff --git a/pym/portage/package/ebuild/config.py 
b/pym/portage/package/ebuild/config.py
index 10250cf46..6a8605717 100644
--- a/pym/portage/package/ebuild/config.py
+++ b/pym/portage/package/ebuild/config.py
@@ -157,7 +157,7 @@ class config(object):
 
        _setcpv_aux_keys = ('DEFINED_PHASES', 'DEPEND', 'EAPI', 'HDEPEND',
                'INHERITED', 'IUSE', 'REQUIRED_USE', 'KEYWORDS', 'LICENSE', 
'PDEPEND',
-               'PROPERTIES', 'PROVIDE', 'RDEPEND', 'SLOT',
+               'PROPERTIES', 'RDEPEND', 'SLOT',
                'repository', 'RESTRICT', 'LICENSE',)
 
        _module_aliases = {
@@ -1886,8 +1886,7 @@ class config(object):
        def _getMaskAtom(self, cpv, metadata):
                """
                Take a package and return a matching package.mask atom, or None 
if no
-               such atom exists or it has been cancelled by package.unmask. 
PROVIDE
-               is not checked, so atoms will not be found for old-style 
virtuals.
+               such atom exists or it has been cancelled by package.unmask.
 
                @param cpv: The package name
                @type cpv: String
@@ -1901,8 +1900,7 @@ class config(object):
        def _getRawMaskAtom(self, cpv, metadata):
                """
                Take a package and return a matching package.mask atom, or None 
if no
-               such atom exists or it has been cancelled by package.unmask. 
PROVIDE
-               is not checked, so atoms will not be found for old-style 
virtuals.
+               such atom exists or it has been cancelled by package.unmask.
 
                @param cpv: The package name
                @type cpv: String
@@ -1918,8 +1916,7 @@ class config(object):
                """
                Take a package and return a matching profile atom, or None if no
                such atom exists. Note that a profile atom may or may not have 
a "*"
-               prefix. PROVIDE is not checked, so atoms will not be found for
-               old-style virtuals.
+               prefix.
 
                @param cpv: The package name
                @type cpv: String
@@ -2157,35 +2154,9 @@ class config(object):
                        self._accept_chost_re.match(pkg_chost) is not None
 
        def setinst(self, mycpv, mydbapi):
-               """This updates the preferences for old-style virtuals,
-               affecting the behavior of dep_expand() and dep_check()
-               calls. It can change dbapi.match() behavior since that
-               calls dep_expand(). However, dbapi instances have
-               internal match caches that are not invalidated when
-               preferences are updated here. This can potentially
-               lead to some inconsistency (relevant to bug #1343)."""
-               self.modifying()
-
-               # Grab the virtuals this package provides and add them into the 
tree virtuals.
-               if not hasattr(mydbapi, "aux_get"):
-                       provides = mydbapi["PROVIDE"]
-               else:
-                       provides = mydbapi.aux_get(mycpv, ["PROVIDE"])[0]
-               if not provides:
-                       return
-               if isinstance(mydbapi, portdbapi):
-                       self.setcpv(mycpv, mydb=mydbapi)
-                       myuse = self["PORTAGE_USE"]
-               elif not hasattr(mydbapi, "aux_get"):
-                       myuse = mydbapi["USE"]
-               else:
-                       myuse = mydbapi.aux_get(mycpv, ["USE"])[0]
-               virts = use_reduce(provides, uselist=myuse.split(), flat=True)
-
-               # Ensure that we don't trigger the _treeVirtuals
-               # assertion in VirtualsManager._compile_virtuals().
-               self.getvirtuals()
-               self._virtuals_manager.add_depgraph_virtuals(mycpv, virts)
+               """This used to update the preferences for old-style virtuals.
+               It is no-op now."""
+               pass
 
        def reload(self):
                """Reload things like /etc/profile.env that can change during 
runtime."""
diff --git a/pym/portage/package/ebuild/doebuild.py 
b/pym/portage/package/ebuild/doebuild.py
index ca241aefb..8cec8e4da 100644
--- a/pym/portage/package/ebuild/doebuild.py
+++ b/pym/portage/package/ebuild/doebuild.py
@@ -135,7 +135,7 @@ _phase_func_map = {
 }
 
 _vdb_use_conditional_keys = Package._dep_keys + \
-       ('LICENSE', 'PROPERTIES', 'PROVIDE', 'RESTRICT',)
+       ('LICENSE', 'PROPERTIES', 'RESTRICT',)
 
 def _doebuild_spawn(phase, settings, actionmap=None, **kwargs):
        """
diff --git a/pym/portage/repository/config.py b/pym/portage/repository/config.py
index 52f44d526..b5db4855f 100644
--- a/pym/portage/repository/config.py
+++ b/pym/portage/repository/config.py
@@ -264,7 +264,7 @@ class RepoConfig(object):
                                self.missing_repo_name = False
 
                        for value in ('allow-missing-manifest',
-                               'allow-provide-virtual', 'cache-formats',
+                               'cache-formats',
                                'create-manifest', 'disable-manifest', 
'manifest-hashes',
                                'manifest-required-hashes', 'profile-formats',
                                'sign-commit', 'sign-manifest', 
'thin-manifest', 'update-changelog'):
@@ -1012,9 +1012,6 @@ def parse_layout_conf(repo_location, repo_name=None):
        data['masters'] = masters
        data['aliases'] = tuple(layout_data.get('aliases', '').split())
 
-       data['allow-provide-virtual'] = \
-               layout_data.get('allow-provide-virtuals', 'false').lower() == 
'true'
-
        data['eapis-banned'] = tuple(layout_data.get('eapis-banned', 
'').split())
        data['eapis-deprecated'] = tuple(layout_data.get('eapis-deprecated', 
'').split())
 
diff --git a/pym/portage/tests/resolver/test_virtual_transition.py 
b/pym/portage/tests/resolver/test_virtual_transition.py
deleted file mode 100644
index 3f4171eae..000000000
--- a/pym/portage/tests/resolver/test_virtual_transition.py
+++ /dev/null
@@ -1,51 +0,0 @@
-# Copyright 2011 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-
-from portage.tests import TestCase
-from portage.tests.resolver.ResolverPlayground import (ResolverPlayground,
-       ResolverPlaygroundTestCase)
-
-class VirtualTransitionTestCase(TestCase):
-
-       def testVirtualTransition(self):
-               ebuilds = {
-                       "kde-base/kcron-4.7.1" : {"RDEPEND": "virtual/cron" },
-                       "sys-process/vixie-cron-4.1-r11": {},
-                       "virtual/cron-0" : {"RDEPEND": "sys-process/vixie-cron" 
},
-               }
-               installed = {
-                       "kde-base/kcron-4.7.1" : {"RDEPEND": "virtual/cron" },
-                       "sys-process/vixie-cron-4.1-r11" : {"PROVIDE" : 
"virtual/cron"},
-               }
-
-               world = ["kde-base/kcron", "sys-process/vixie-cron"]
-
-               test_cases = (
-
-                       # Pull in a new-style virtual, even though there is an 
installed
-                       # old-style virtual to satisfy the virtual/cron dep. 
This case
-                       # is common, due to PROVIDE being removed (without 
revision bump)
-                       # from lots of ebuilds.
-                       ResolverPlaygroundTestCase(
-                               ["@world"],
-                               options = {"--update": True, "--deep": True},
-                               success = True,
-                               mergelist = ["virtual/cron-0"]),
-
-                       # Make sure that depclean is satisfied with the 
installed
-                       # old-style virutal.
-                       ResolverPlaygroundTestCase(
-                               [],
-                               options = {"--depclean": True},
-                               success = True,
-                               cleanlist = []),
-               )
-
-               playground = ResolverPlayground(ebuilds=ebuilds,
-                       installed=installed, world=world)
-               try:
-                       for test_case in test_cases:
-                               playground.run_TestCase(test_case)
-                               self.assertEqual(test_case.test_success, True, 
test_case.fail_msg)
-               finally:
-                       playground.cleanup()
diff --git a/repoman/man/repoman.1 b/repoman/man/repoman.1
index b2542b0c7..db6526b5e 100644
--- a/repoman/man/repoman.1
+++ b/repoman/man/repoman.1
@@ -250,9 +250,6 @@ and is not masked in the global package.mask.
 .B PDEPEND.suspect
 PDEPEND contains a package that usually only belongs in DEPEND
 .TP
-.B PROVIDE.syntax
-Syntax error in PROVIDE (usually an extra/missing space/parenthesis)
-.TP
 .B RDEPEND.implicit
 RDEPEND is unset in the ebuild which triggers implicit RDEPEND=$DEPEND
 assignment (prior to EAPI 4)
@@ -433,10 +430,6 @@ Assigning a readonly variable
 .B variable.usedwithhelpers
 Ebuild uses D, ROOT, ED, EROOT or EPREFIX with helpers
 .TP
-.B virtual.oldstyle
-The ebuild PROVIDEs an old-style virtual (see GLEP 37). This is an error
-unless "allow\-provide\-virtuals = true" is set in metadata/layout.conf.
-.TP
 .B virtual.suspect
 Ebuild contains a package that usually should be pulled via virtual/,
 not directly.
diff --git a/repoman/pym/repoman/modules/scan/depend/_depend_checks.py 
b/repoman/pym/repoman/modules/scan/depend/_depend_checks.py
index 11435f99e..48d79f188 100644
--- a/repoman/pym/repoman/modules/scan/depend/_depend_checks.py
+++ b/repoman/pym/repoman/modules/scan/depend/_depend_checks.py
@@ -69,7 +69,7 @@ def _depend_checks(ebuild, pkg, portdb, qatracker, 
repo_metadata):
        inherited_wxwidgets_eclass = "wxwidgets" in ebuild.inherited
        # operator_tokens = set(["||", "(", ")"])
        badsyntax = []
-       for mytype in Package._dep_keys + ("LICENSE", "PROPERTIES", "PROVIDE"):
+       for mytype in Package._dep_keys + ("LICENSE", "PROPERTIES"):
                mydepstr = ebuild.metadata[mytype]
 
                buildtime = mytype in Package._buildtime_keys
diff --git a/repoman/pym/repoman/modules/scan/metadata/ebuild_metadata.py 
b/repoman/pym/repoman/modules/scan/metadata/ebuild_metadata.py
index cba8ec5e2..938567d4c 100644
--- a/repoman/pym/repoman/modules/scan/metadata/ebuild_metadata.py
+++ b/repoman/pym/repoman/modules/scan/metadata/ebuild_metadata.py
@@ -49,12 +49,6 @@ class EbuildMetadata(ScanBase):
                                        % (kwargs.get('xpkg'), 
kwargs.get('y_ebuild')))
                return False
 
-       def old_virtual(self, **kwargs):
-               ebuild = kwargs.get('ebuild').get()
-               if ebuild.metadata.get("PROVIDE"):
-                       self.qatracker.add_error("virtual.oldstyle", 
ebuild.relative_path)
-               return False
-
        def virtual(self, **kwargs):
                ebuild = kwargs.get('ebuild').get()
                if kwargs.get('catdir') == "virtual":
@@ -80,5 +74,5 @@ class EbuildMetadata(ScanBase):
 
        @property
        def runInEbuilds(self):
-               return (True, [self.invalidchar, self.missing, self.old_virtual,
+               return (True, [self.invalidchar, self.missing,
                        self.virtual, self.homepage_urischeme])
diff --git a/repoman/pym/repoman/qa_data.py b/repoman/pym/repoman/qa_data.py
index c6abe1760..7be048725 100644
--- a/repoman/pym/repoman/qa_data.py
+++ b/repoman/pym/repoman/qa_data.py
@@ -228,8 +228,6 @@ qahelp = {
        "repo.eapi.deprecated": (
                "The ebuild uses an EAPI which is"
                " deprecated by the repository's metadata/layout.conf 
settings"),
-       "virtual.oldstyle": (
-               "The ebuild PROVIDEs an old-style virtual (see GLEP 37)"),
        "virtual.suspect": (
                "Ebuild contains a package"
                " that usually should be pulled via virtual/, not directly."),
diff --git a/repoman/pym/repoman/repos.py b/repoman/pym/repoman/repos.py
index e942a599e..6bf286002 100644
--- a/repoman/pym/repoman/repos.py
+++ b/repoman/pym/repoman/repos.py
@@ -60,9 +60,6 @@ class RepoSettings(object):
                        if repo.location not in 
self.repo_config.eclass_db.porttrees:
                                del self.repositories[repo.name]
 
-               if self.repo_config.allow_provide_virtual:
-                       qawarnings.add("virtual.oldstyle")
-
                if self.repo_config.sign_commit and options.mode in ("commit", 
"fix", "manifest"):
                        if vcs_settings.vcs:
                                func = getattr(self, '_vcs_gpg_%s' % 
vcs_settings.vcs)
-- 
2.16.2


Reply via email to