From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <gentoo-commits+bounces-1187221-garchives=archives.gentoo.org@lists.gentoo.org>
Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80])
	(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
	(No client certificate requested)
	by finch.gentoo.org (Postfix) with ESMTPS id 74D2A138359
	for <garchives@archives.gentoo.org>; Mon, 13 Jul 2020 22:33:42 +0000 (UTC)
Received: from pigeon.gentoo.org (localhost [127.0.0.1])
	by pigeon.gentoo.org (Postfix) with SMTP id 8D888E085E;
	Mon, 13 Jul 2020 22:33:41 +0000 (UTC)
Received: from smtp.gentoo.org (mail.gentoo.org [IPv6:2001:470:ea4a:1:5054:ff:fec7:86e4])
	(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
	(No client certificate requested)
	by pigeon.gentoo.org (Postfix) with ESMTPS id 672C3E085E
	for <gentoo-commits@lists.gentoo.org>; Mon, 13 Jul 2020 22:33:41 +0000 (UTC)
Received: from oystercatcher.gentoo.org (oystercatcher.gentoo.org [148.251.78.52])
	(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
	(No client certificate requested)
	by smtp.gentoo.org (Postfix) with ESMTPS id C3BCE34F340
	for <gentoo-commits@lists.gentoo.org>; Mon, 13 Jul 2020 22:33:39 +0000 (UTC)
Received: from localhost.localdomain (localhost [IPv6:::1])
	by oystercatcher.gentoo.org (Postfix) with ESMTP id 177882D8
	for <gentoo-commits@lists.gentoo.org>; Mon, 13 Jul 2020 22:33:37 +0000 (UTC)
From: "Patrick McLean" <chutzpah@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Content-Transfer-Encoding: 8bit
Content-type: text/plain; charset=UTF-8
Reply-To: gentoo-dev@lists.gentoo.org, "Patrick McLean" <chutzpah@gentoo.org>
Message-ID: <1594679609.5dda3e3919e084562927d0179ac448e83f4b9c01.chutzpah@gentoo>
Subject: [gentoo-commits] repo/gentoo:master commit in: app-admin/salt/files/, app-admin/salt/
X-VCS-Repository: repo/gentoo
X-VCS-Files: app-admin/salt/Manifest app-admin/salt/files/salt-2019.2.0-remove-raet-tests.patch app-admin/salt/files/salt-2019.2.0-tests.patch app-admin/salt/files/salt-2019.2.2-newer-deps.patch app-admin/salt/files/salt-2019.2.2-workaround-broken-mock-on-py2.patch app-admin/salt/salt-2019.2.5-r1.ebuild
X-VCS-Directories: app-admin/salt/files/ app-admin/salt/
X-VCS-Committer: chutzpah
X-VCS-Committer-Name: Patrick McLean
X-VCS-Revision: 5dda3e3919e084562927d0179ac448e83f4b9c01
X-VCS-Branch: master
Date: Mon, 13 Jul 2020 22:33:37 +0000 (UTC)
Precedence: bulk
List-Post: <mailto:gentoo-commits@lists.gentoo.org>
List-Help: <mailto:gentoo-commits+help@lists.gentoo.org>
List-Unsubscribe: <mailto:gentoo-commits+unsubscribe@lists.gentoo.org>
List-Subscribe: <mailto:gentoo-commits+subscribe@lists.gentoo.org>
List-Id: Gentoo Linux mail <gentoo-commits.gentoo.org>
X-BeenThere: gentoo-commits@lists.gentoo.org
X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply
X-Archives-Salt: 65d6a39d-9425-4303-ae8b-e7ee61972d54
X-Archives-Hash: 9cba89721c987ff16a25006e4330353b

commit:     5dda3e3919e084562927d0179ac448e83f4b9c01
Author:     Patrick McLean <patrick.mclean <AT> sony <DOT> com>
AuthorDate: Mon Jul 13 22:22:44 2020 +0000
Commit:     Patrick McLean <chutzpah <AT> gentoo <DOT> org>
CommitDate: Mon Jul 13 22:33:29 2020 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=5dda3e39

app-admin/salt: add 2019.2.5-r1 with USE=raet removed

Was dropped because of some python3.6 only dependencies. Disabling
USE=raet makes these dependencies no longer required, the raet protocol
has been depricated upstream anyway.

Copyright: Sony Interactive Entertainment Inc.
Package-Manager: Portage-2.3.103, Repoman-2.3.23
Signed-off-by: Patrick McLean <chutzpah <AT> gentoo.org>

 app-admin/salt/Manifest                            |   1 +
 .../files/salt-2019.2.0-remove-raet-tests.patch    |  43 ++++++
 app-admin/salt/files/salt-2019.2.0-tests.patch     |  73 ++++++++++
 .../salt/files/salt-2019.2.2-newer-deps.patch      | 136 +++++++++++++++++++
 ...lt-2019.2.2-workaround-broken-mock-on-py2.patch |  28 ++++
 app-admin/salt/salt-2019.2.5-r1.ebuild             | 150 +++++++++++++++++++++
 6 files changed, 431 insertions(+)

diff --git a/app-admin/salt/Manifest b/app-admin/salt/Manifest
index 6ceeed26bcc..97d1031e86e 100644
--- a/app-admin/salt/Manifest
+++ b/app-admin/salt/Manifest
@@ -1,3 +1,4 @@
+DIST salt-2019.2.5.tar.gz 14574347 BLAKE2B d456dd493e79640260f3ad3c964fdaaa26dd7bdc8d5676bd70f9dd143647c62b63aba2052e7f223041b7dd6859cd923398ad22f9d2d1302b8f18b4c69fe7aafb SHA512 95445dff498bea2bc8e3f32749131302481166c8591f11a5f76a7786c3286cb608049a743bc4878c8fbd4e4d22d4949f243f57f1e53725e7076d39aea5ceea20
 DIST salt-3000.2-py38-misc.patch.gz 6250 BLAKE2B 68fff80a042e6bf208ea2d9692da7a7b1e29572f1ec3c850c14743bbf2821d231f933ec4e6d6eaad12acee0b7666888a37a72872b2b082c92d8db9de988fbbec SHA512 6d4a66323a423e630f7cc73b566ed96c452c8fc3d72c25a2dd86033c4774c1c8e8b8701e1d4ee92994d4148c398d704f419023e26d8b40c8fdd63f9d79d9d52f
 DIST salt-3000.2.tar.gz 15231513 BLAKE2B 2090d0f52f953a42f1685ad190750e9c76ad6e862a3272444fef063a7605f69a6c542f04165a41fb9cdaa126a878cc133d4857faa70edc5eac4bf49bdde937ab SHA512 88e8876ed8cd18e942c2194686cda68f40fa49e69e317ca488bf58e095bcf6cdf8771d93eba7960038941cc5863e13a4eea4dad5256c12da7cd8288a2c61f59d
 DIST salt-3000.3.tar.gz 15237557 BLAKE2B ab51e07f56f9e02c47da58fad95c9482ea70e0685996a78e34382eadb3a9a3dace63ef65d643a9de284ea00c34785eae631d033f32e00e59eb3639514459af33 SHA512 a4697da9a2f7d484b72145e8b83f6d9032369f87e2e7119a9d51f59b989488285406543f79142fc686c41c144f5878eefba37927137581c892c88f03fc3a8208

diff --git a/app-admin/salt/files/salt-2019.2.0-remove-raet-tests.patch b/app-admin/salt/files/salt-2019.2.0-remove-raet-tests.patch
new file mode 100644
index 00000000000..fab9f38df77
--- /dev/null
+++ b/app-admin/salt/files/salt-2019.2.0-remove-raet-tests.patch
@@ -0,0 +1,43 @@
+diff --git a/tests/unit/modules/test_event.py b/tests/unit/modules/test_event.py
+index e5d2c946ae..e9140670cb 100644
+--- a/tests/unit/modules/test_event.py
++++ b/tests/unit/modules/test_event.py
+@@ -47,12 +47,6 @@ class EventTestCase(TestCase, LoaderModuleMockMixin):
+             preload = {'id': 'id', 'tag': 'tag', 'data': 'data',
+                        'tok': 'salt', 'cmd': '_minion_event'}
+ 
+-            with patch.dict(event.__opts__, {'transport': 'raet',
+-                                             'local': False}):
+-                with patch.object(salt_transport_channel_factory, 'send',
+-                                  return_value=None):
+-                    self.assertTrue(event.fire_master('data', 'tag'))
+-
+             with patch.dict(event.__opts__, {'transport': 'A',
+                                              'master_uri': 'localhost',
+                                              'local': False}):
+diff --git a/tests/unit/utils/test_verify.py b/tests/unit/utils/test_verify.py
+index 63b9ae3181..2c8294ef77 100644
+--- a/tests/unit/utils/test_verify.py
++++ b/tests/unit/utils/test_verify.py
+@@ -326,7 +326,7 @@ class TestVerifyLog(TestCase):
+         verify_log_files([path], getpass.getuser())
+         self.assertTrue(os.path.exists(path))
+ 
+-
++@skipIf(True, "broken under sandbox")
+ class TestCleanPath(TestCase):
+     '''
+     salt.utils.clean_path works as expected
+@@ -396,10 +396,10 @@ class TestCleanPathLink(TestCase):
+         test_path = os.path.join(self.from_path, 'test')
+         expect_path = os.path.join(self.to_path, 'test')
+         ret = clean_path(self.from_path, test_path)
+-        assert ret == expect_path, "{} is not {}".format(ret, expect_path)
++        assert ret == os.path.realpath(expect_path), "{} is not {}".format(ret, expect_path)
+ 
+     def test_clean_path_symlinked_tgt(self):
+         test_path = os.path.join(self.to_path, 'test')
+         expect_path = os.path.join(self.to_path, 'test')
+         ret = clean_path(self.from_path, test_path)
+-        assert ret == expect_path, "{} is not {}".format(ret, expect_path)
++        assert ret == os.path.realpath(expect_path), "{} is not {}".format(ret, expect_path)

diff --git a/app-admin/salt/files/salt-2019.2.0-tests.patch b/app-admin/salt/files/salt-2019.2.0-tests.patch
new file mode 100644
index 00000000000..830fcbffe36
--- /dev/null
+++ b/app-admin/salt/files/salt-2019.2.0-tests.patch
@@ -0,0 +1,73 @@
+diff --git a/tests/unit/fileserver/test_gitfs.py b/tests/unit/fileserver/test_gitfs.py
+index 4e93df4e62..38c13efb6b 100644
+--- a/tests/unit/fileserver/test_gitfs.py
++++ b/tests/unit/fileserver/test_gitfs.py
+@@ -151,6 +151,7 @@ class GitfsConfigTestCase(TestCase, LoaderModuleMockMixin):
+                 if exc.errno != errno.EEXIST:
+                     raise
+ 
++    @skipIf(True, 'currently failing on Gentoo')
+     def test_per_saltenv_config(self):
+         opts_override = textwrap.dedent('''
+             gitfs_root: salt
+diff --git a/tests/unit/grains/test_core.py b/tests/unit/grains/test_core.py
+index 445df0c98a..17ca123172 100644
+--- a/tests/unit/grains/test_core.py
++++ b/tests/unit/grains/test_core.py
+@@ -710,6 +710,7 @@ class CoreGrainsTestCase(TestCase, LoaderModuleMockMixin):
+                             )
+ 
+     @skipIf(not salt.utils.platform.is_linux(), 'System is not Linux')
++    @skipIf(True, 'Test assumes running under Xen')
+     def test_xen_virtual(self):
+         '''
+         Test if OS grains are parsed correctly in Ubuntu Xenial Xerus
+diff --git a/tests/unit/utils/test_asynchronous.py b/tests/unit/utils/test_asynchronous.py
+index 694a7aebfe..704f2d894f 100644
+--- a/tests/unit/utils/test_asynchronous.py
++++ b/tests/unit/utils/test_asynchronous.py
+@@ -3,6 +3,8 @@
+ # Import Python Libs
+ from __future__ import absolute_import, print_function, unicode_literals
+ 
++from unittest import skipIf
++
+ # Import 3rd-party libs
+ import tornado.testing
+ import tornado.gen
+@@ -35,6 +37,7 @@ class HelperB(object):
+ 
+ 
+ class TestSyncWrapper(AsyncTestCase):
++    @skipIf(True, "fails in sandbox")
+     @tornado.testing.gen_test
+     def test_helpers(self):
+         '''
+@@ -56,6 +59,7 @@ class TestSyncWrapper(AsyncTestCase):
+         ret = sync.sleep()
+         self.assertTrue(ret)
+ 
++    @skipIf(True, "fails in sandbox")
+     def test_double(self):
+         '''
+         Test when the asynchronous wrapper object itself creates a wrap of another thing
+@@ -67,6 +71,7 @@ class TestSyncWrapper(AsyncTestCase):
+         ret = sync.sleep()
+         self.assertFalse(ret)
+ 
++    @skipIf(True, "fails in sandbox")
+     def test_double_sameloop(self):
+         '''
+         Test asynchronous wrappers initiated from the same IOLoop, to ensure that
+diff --git a/tests/unit/utils/test_jinja.py b/tests/unit/utils/test_jinja.py
+index da666ef4c7..e3523049b7 100644
+--- a/tests/unit/utils/test_jinja.py
++++ b/tests/unit/utils/test_jinja.py
+@@ -1102,6 +1102,7 @@ class TestCustomExtensions(TestCase):
+                                      dict(opts=self.local_opts, saltenv='test', salt=self.local_salt))
+         self.assertEqual(rendered, '16777216')
+ 
++    @skipIf(True, 'Skipping tests that require internet access')
+     @flaky
+     def test_http_query(self):
+         '''

diff --git a/app-admin/salt/files/salt-2019.2.2-newer-deps.patch b/app-admin/salt/files/salt-2019.2.2-newer-deps.patch
new file mode 100644
index 00000000000..ee3bc060417
--- /dev/null
+++ b/app-admin/salt/files/salt-2019.2.2-newer-deps.patch
@@ -0,0 +1,136 @@
+diff --git a/salt/modules/dockercompose.py b/salt/modules/dockercompose.py
+index 61e937536c..0f37e0d43a 100644
+--- a/salt/modules/dockercompose.py
++++ b/salt/modules/dockercompose.py
+@@ -241,7 +241,7 @@ def __load_docker_compose(path):
+                                     None, None)
+     try:
+         with salt.utils.files.fopen(file_path, 'r') as fl:
+-            loaded = yaml.load(fl)
++            loaded = yaml.safe_load(fl)
+     except EnvironmentError:
+         return None, __standardize_result(False,
+                                     'Could not read {0}'.format(file_path),
+@@ -371,7 +371,7 @@ def __load_compose_definitions(path, definition):
+                                               None, None)
+     else:
+         try:
+-            loaded_definition = yaml.load(definition)
++            loaded_definition = yaml.safe_load(definition)
+         except yaml.YAMLError as yerr:
+             msg = 'Could not parse {0} {1}'.format(definition, yerr)
+             return None, None, __standardize_result(False, msg,
+diff --git a/tests/integration/utils/test_win_runas.py b/tests/integration/utils/test_win_runas.py
+index 3042a77991..d4057a4d03 100644
+--- a/tests/integration/utils/test_win_runas.py
++++ b/tests/integration/utils/test_win_runas.py
+@@ -539,7 +539,7 @@ class RunAsTest(ModuleCase):
+         win32serviceutil.StartService('test service')
+         wait_for_service('test service')
+         with salt.utils.files.fopen(RUNAS_OUT, 'r') as fp:
+-            ret = yaml.load(fp)
++            ret = yaml.safe_load(fp)
+         assert ret['retcode'] == 1, ret
+
+     @with_system_user('test-runas', on_existing='delete', delete=True,
+@@ -560,7 +560,7 @@ class RunAsTest(ModuleCase):
+         win32serviceutil.StartService('test service')
+         wait_for_service('test service')
+         with salt.utils.files.fopen(RUNAS_OUT, 'r') as fp:
+-            ret = yaml.load(fp)
++            ret = yaml.safe_load(fp)
+         assert ret['retcode'] == 1, ret
+
+     @with_system_user('test-runas-admin', on_existing='delete', delete=True,
+@@ -581,7 +581,7 @@ class RunAsTest(ModuleCase):
+         win32serviceutil.StartService('test service')
+         wait_for_service('test service')
+         with salt.utils.files.fopen(RUNAS_OUT, 'r') as fp:
+-            ret = yaml.load(fp)
++            ret = yaml.safe_load(fp)
+         assert ret['retcode'] == 0, ret
+
+     @with_system_user('test-runas-admin', on_existing='delete', delete=True,
+@@ -602,7 +602,7 @@ class RunAsTest(ModuleCase):
+         win32serviceutil.StartService('test service')
+         wait_for_service('test service')
+         with salt.utils.files.fopen(RUNAS_OUT, 'r') as fp:
+-            ret = yaml.load(fp)
++            ret = yaml.safe_load(fp)
+         assert ret['retcode'] == 0, ret
+
+     def test_runas_service_system_user(self):
+@@ -621,5 +621,5 @@ class RunAsTest(ModuleCase):
+         win32serviceutil.StartService('test service')
+         wait_for_service('test service')
+         with salt.utils.files.fopen(RUNAS_OUT, 'r') as fp:
+-            ret = yaml.load(fp)
++            ret = yaml.safe_load(fp)
+         assert ret['retcode'] == 0, ret
+diff --git a/tests/unit/utils/test_schema.py b/tests/unit/utils/test_schema.py
+index a07fcbab6b..79072bb89e 100644
+--- a/tests/unit/utils/test_schema.py
++++ b/tests/unit/utils/test_schema.py
+@@ -5,6 +5,7 @@
+
+ # Import python libs
+ from __future__ import absolute_import, print_function, unicode_literals
++import sys
+ import copy
+
+ # Import Salt Testing Libs
+@@ -506,10 +507,7 @@ class ConfigTestCase(TestCase):
+                 {'personal_access_token': 'foo'},
+                 Requirements.serialize()
+             )
+-        if JSONSCHEMA_VERSION >= _LooseVersion('3.0.0'):
+-            self.assertIn('\'ssh_key_file\' is a required property', excinfo.exception.message)
+-        else:
+-            self.assertIn('is not valid under any of the given schemas', excinfo.exception.message)
++        self.assertIn('\'ssh_key_file\' is a required property', excinfo.exception.message)
+
+     def test_boolean_config(self):
+         item = schema.BooleanItem(title='Hungry', description='Are you hungry?')
+@@ -1733,10 +1731,11 @@ class ConfigTestCase(TestCase):
+
+         with self.assertRaises(jsonschema.exceptions.ValidationError) as excinfo:
+             jsonschema.validate({'item': {'sides': '4', 'color': 'blue'}}, TestConf.serialize())
+-        if JSONSCHEMA_VERSION >= _LooseVersion('3.0.0'):
+-            self.assertIn('\'4\' is not of type \'boolean\'', excinfo.exception.message)
++
++        if sys.hexversion >= 0x03000000:
++            self.assertIn("'4' is not of type 'boolean'", excinfo.exception.message)
+         else:
+-            self.assertIn('is not valid under any of the given schemas', excinfo.exception.message)
++            self.assertIn("u'4' is not of type u'boolean'", excinfo.exception.message)
+
+         class TestConf(schema.Schema):
+             item = schema.DictItem(
+@@ -1839,10 +1838,10 @@ class ConfigTestCase(TestCase):
+
+         with self.assertRaises(jsonschema.exceptions.ValidationError) as excinfo:
+             jsonschema.validate({'item': ['maybe']}, TestConf.serialize())
+-        if JSONSCHEMA_VERSION >= _LooseVersion('3.0.0'):
+-            self.assertIn('\'maybe\' is not one of [\'yes\']', excinfo.exception.message)
++        if sys.hexversion >= 0x03000000:
++            self.assertIn("'maybe' is not one of ['yes']", excinfo.exception.message)
+         else:
+-            self.assertIn('is not valid under any of the given schemas', excinfo.exception.message)
++            self.assertIn("u'maybe' is not one of [u'yes']", excinfo.exception.message)
+
+         with self.assertRaises(jsonschema.exceptions.ValidationError) as excinfo:
+             jsonschema.validate({'item': 2}, TestConf.serialize())
+@@ -1894,10 +1893,10 @@ class ConfigTestCase(TestCase):
+
+         with self.assertRaises(jsonschema.exceptions.ValidationError) as excinfo:
+             jsonschema.validate({'item': ['maybe']}, TestConf.serialize())
+-        if JSONSCHEMA_VERSION >= _LooseVersion('3.0.0'):
+-            self.assertIn('\'maybe\' is not one of [\'yes\']', excinfo.exception.message)
++        if sys.hexversion >= 0x03000000:
++            self.assertIn("'maybe' is not one of ['yes']", excinfo.exception.message)
+         else:
+-            self.assertIn('is not valid under any of the given schemas', excinfo.exception.message)
++            self.assertIn("u'maybe' is not one of [u'yes']", excinfo.exception.message)
+
+         with self.assertRaises(jsonschema.exceptions.ValidationError) as excinfo:
+             jsonschema.validate({'item': 2}, TestConf.serialize())

diff --git a/app-admin/salt/files/salt-2019.2.2-workaround-broken-mock-on-py2.patch b/app-admin/salt/files/salt-2019.2.2-workaround-broken-mock-on-py2.patch
new file mode 100644
index 00000000000..8d28fe7f16a
--- /dev/null
+++ b/app-admin/salt/files/salt-2019.2.2-workaround-broken-mock-on-py2.patch
@@ -0,0 +1,28 @@
+diff --git a/tests/unit/utils/test_network.py b/tests/unit/utils/test_network.py
+index af5cbbab2b..15236c127a 100644
+--- a/tests/unit/utils/test_network.py
++++ b/tests/unit/utils/test_network.py
+@@ -1,6 +1,7 @@
+ # -*- coding: utf-8 -*-
+ # Import Python libs
+ from __future__ import absolute_import, unicode_literals, print_function
++import sys
+ import logging
+ import socket
+ import textwrap
+@@ -249,6 +250,7 @@ class NetworkTestCase(TestCase):
+                 log.error('bad host_port value: "%s" failed to trigger ValueError exception', host_port)
+                 raise _e_
+ 
++    @skipIf(sys.hexversion < 0x03000000, "https://github.com/testing-cabal/mock/issues/323")
+     def test_dns_check(self):
+         hosts = [
+             {'host': '10.10.0.3',
+@@ -302,6 +304,7 @@ class NetworkTestCase(TestCase):
+                                         "Invalid or unresolveable address"):
+                 network.dns_check('foo', '1')
+ 
++    @skipIf(sys.hexversion < 0x03000000, "https://github.com/testing-cabal/mock/issues/323")
+     def test_test_addrs(self):
+         # subset of real data from getaddrinfo against saltstack.com
+         addrinfo = [(30, 2, 17, '', ('2600:9000:21eb:a800:8:1031:abc0:93a1', 0, 0, 0)),

diff --git a/app-admin/salt/salt-2019.2.5-r1.ebuild b/app-admin/salt/salt-2019.2.5-r1.ebuild
new file mode 100644
index 00000000000..e39bedf1898
--- /dev/null
+++ b/app-admin/salt/salt-2019.2.5-r1.ebuild
@@ -0,0 +1,150 @@
+# Copyright 1999-2020 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+PYTHON_COMPAT=( python3_6 )
+DISTUTILS_USE_SETUPTOOLS=bdepend
+inherit systemd distutils-r1
+
+DESCRIPTION="Salt is a remote execution and configuration manager"
+HOMEPAGE="https://www.saltstack.com/resources/community/
+	https://github.com/saltstack"
+
+if [[ ${PV} == 9999* ]]; then
+	inherit git-r3
+	EGIT_REPO_URI="git://github.com/${PN}stack/${PN}.git"
+	EGIT_BRANCH="develop"
+	SRC_URI=""
+else
+	SRC_URI="mirror://pypi/${PN:0:1}/${PN}/${P}.tar.gz"
+	KEYWORDS="~amd64 ~x86"
+fi
+
+LICENSE="Apache-2.0"
+SLOT="0"
+IUSE="cherrypy ldap libcloud libvirt gnupg keyring mako mongodb neutron nova
+	openssl portage profile redis selinux test vim-syntax"
+
+RDEPEND="
+	sys-apps/pciutils
+	dev-python/jinja[${PYTHON_USEDEP}]
+	dev-python/libnacl[${PYTHON_USEDEP}]
+	>=dev-python/msgpack-0.3[${PYTHON_USEDEP}]
+	<dev-python/msgpack-1.0[${PYTHON_USEDEP}]
+	dev-python/pyyaml[${PYTHON_USEDEP}]
+	dev-python/markupsafe[${PYTHON_USEDEP}]
+	dev-python/pycryptodome[${PYTHON_USEDEP}]
+	>=dev-python/pyzmq-2.2.0[${PYTHON_USEDEP}]
+	>=dev-python/requests-1.0.0[${PYTHON_USEDEP}]
+	dev-python/setuptools[${PYTHON_USEDEP}]
+	>=www-servers/tornado-4.2.1[${PYTHON_USEDEP}]
+	<www-servers/tornado-5.0[${PYTHON_USEDEP}]
+	libcloud? ( >=dev-python/libcloud-0.14.0[${PYTHON_USEDEP}] )
+	mako? ( dev-python/mako[${PYTHON_USEDEP}] )
+	ldap? ( dev-python/python-ldap[${PYTHON_USEDEP}] )
+	libvirt? ( dev-python/libvirt-python[${PYTHON_USEDEP}] )
+	openssl? (
+		dev-libs/openssl:0=[-bindist]
+		dev-python/pyopenssl[${PYTHON_USEDEP}]
+	)
+	cherrypy? ( >=dev-python/cherrypy-3.2.2[${PYTHON_USEDEP}] )
+	mongodb? ( dev-python/pymongo[${PYTHON_USEDEP}] )
+	portage? ( sys-apps/portage[${PYTHON_USEDEP}] )
+	keyring? ( dev-python/keyring[${PYTHON_USEDEP}] )
+	redis? ( dev-python/redis-py[${PYTHON_USEDEP}] )
+	selinux? ( sec-policy/selinux-salt )
+	nova? ( >=dev-python/python-novaclient-2.17.0[${PYTHON_USEDEP}] )
+	neutron? ( >=dev-python/python-neutronclient-2.3.6[${PYTHON_USEDEP}] )
+	gnupg? ( dev-python/python-gnupg[${PYTHON_USEDEP}] )
+	profile? ( dev-python/yappi[${PYTHON_USEDEP}] )
+	vim-syntax? ( app-vim/salt-vim )"
+BDEPEND="
+	dev-python/setuptools[${PYTHON_USEDEP}]
+	test? (
+		>=dev-python/boto-2.32.1[${PYTHON_USEDEP}]
+		>=dev-python/jsonschema-3.0[${PYTHON_USEDEP}]
+		>=dev-python/libcloud-0.14.0[${PYTHON_USEDEP}]
+		>=dev-python/mock-2.0.0[${PYTHON_USEDEP}]
+		>=dev-python/moto-0.3.6[${PYTHON_USEDEP}]
+		dev-python/pip[${PYTHON_USEDEP}]
+		dev-python/pytest-helpers-namespace[${PYTHON_USEDEP}]
+		>=dev-python/pytest-salt-2018.12.8[${PYTHON_USEDEP}]
+		<dev-python/pytest-salt-2020.0.0[${PYTHON_USEDEP}]
+		dev-python/psutil[${PYTHON_USEDEP}]
+		dev-python/pytest[${PYTHON_USEDEP}]
+		>=dev-python/SaltTesting-2016.5.11[${PYTHON_USEDEP}]
+		dev-python/virtualenv[${PYTHON_USEDEP}]
+		!x86? ( >=dev-python/boto3-1.2.1[${PYTHON_USEDEP}] )
+		${RDEPEND}
+	)"
+
+DOCS=( README.rst AUTHORS )
+
+RESTRICT="!test? ( test ) x86? ( test )"
+
+PATCHES=(
+	"${FILESDIR}/salt-2017.7.0-dont-realpath-tmpdir.patch"
+	"${FILESDIR}/salt-2019.2.0-tests.patch"
+	"${FILESDIR}/salt-2019.2.0-skip-tests-that-oom-machine.patch"
+	"${FILESDIR}/salt-2019.2.2-newer-deps.patch"
+	"${FILESDIR}/salt-2019.2.2-workaround-broken-mock-on-py2.patch"
+	"${FILESDIR}/salt-2019.2.0-remove-raet-tests.patch"
+)
+
+python_prepare() {
+	# remove tests with external dependencies that may not be available
+	rm tests/unit/{test_zypp_plugins.py,utils/test_extend.py} || die
+	rm tests/unit/modules/test_{file,boto_{vpc,secgroup,elb}}.py || die
+	rm tests/unit/states/test_boto_vpc.py || die
+
+	# breaks with permission errors
+	rm tests/unit/utils/test_cache.py || die
+
+	# remove raet due to deps being dropped
+	rm tests/unit/modules/test_raet_publish.py \
+		salt/transport/raet.py \
+		salt/daemons/test/test_raetkey.py || die
+
+	# allow the use of the renamed msgpack
+	sed -i '/^msgpack/d' requirements/base.txt || die
+}
+
+python_install_all() {
+	local svc
+	USE_SETUPTOOLS=1 distutils-r1_python_install_all
+
+	for svc in minion master syndic api; do
+		newinitd "${FILESDIR}"/${svc}-initd-4 salt-${svc}
+		newconfd "${FILESDIR}"/${svc}-confd-1 salt-${svc}
+		systemd_dounit "${FILESDIR}"/salt-${svc}.service
+	done
+
+	insinto /etc/${PN}
+	doins -r conf/*
+}
+
+python_test() {
+	local tempdir
+	# testsuite likes lots of files
+	ulimit -n 3072 || die
+
+	# ${T} is too long a path for the tests to work
+	tempdir="$(mktemp -du --tmpdir=/tmp salt-XXX)"
+	mkdir "${T}/$(basename "${tempdir}")"
+	mkdir "${BUILD_DIR}"/../{templates,conf/cloud.{providers,profiles,maps}.d} || die
+
+	(
+		cleanup() { rm -f "${tempdir}" || die; }
+
+		trap cleanup EXIT
+
+		addwrite "${tempdir}"
+		ln -s "$(realpath --relative-to=/tmp "${T}/$(basename "${tempdir}")")" "${tempdir}" || die
+
+		USE_SETUPTOOLS=1 SHELL="/bin/bash" \
+			TMPDIR="${tempdir}" \
+			${EPYTHON} tests/runtests.py \
+			--unit-tests --no-report --verbose \
+			|| die "testing failed with ${EPYTHON}"
+	)
+}