get_pkg_version: Fix py3 bytes/str errors
On Python3, this fails with a TypeError because endswith()/startswith() is being called on bytes, and only accepts a bytes argument. Turning on universal_newlines mode makes check_output return a string rather than bytes. This is easily hit on platforms where "tox" now runs by default under Python 3, such as Fedora 25. Change-Id: Ie3157e847c345e9f65a0db56ead45baa97d6bc81
This commit is contained in:
parent
62f97ca6f3
commit
37e08b1795
|
@ -232,7 +232,9 @@ class Dpkg(Platform):
|
|||
try:
|
||||
output = subprocess.check_output(
|
||||
["dpkg-query", "-W", "-f", "${Package} ${Status} ${Version}\n",
|
||||
pkg_name], stderr=subprocess.STDOUT).decode('utf-8')
|
||||
pkg_name],
|
||||
stderr=subprocess.STDOUT,
|
||||
universal_newlines=True).decode('utf-8')
|
||||
except subprocess.CalledProcessError as e:
|
||||
if (e.returncode == 1 and
|
||||
(e.output.startswith('dpkg-query: no packages found') or
|
||||
|
@ -260,7 +262,9 @@ class Rpm(Platform):
|
|||
output = subprocess.check_output(
|
||||
["rpm", "--qf",
|
||||
"%{NAME} %|EPOCH?{%{EPOCH}:}|%{VERSION}-%{RELEASE}\n", "-q",
|
||||
pkg_name], stderr=subprocess.STDOUT).decode('utf-8')
|
||||
pkg_name],
|
||||
stderr=subprocess.STDOUT,
|
||||
universal_newlines=True).decode('utf-8')
|
||||
except subprocess.CalledProcessError as e:
|
||||
if (e.returncode == 1 and
|
||||
e.output.strip().endswith('is not installed')):
|
||||
|
@ -285,7 +289,8 @@ class Emerge(Platform):
|
|||
try:
|
||||
output = subprocess.check_output(
|
||||
['equery', 'l', '--format=\'$version\'', pkg_name],
|
||||
stderr=subprocess.STDOUT).decode('utf-8')
|
||||
stderr=subprocess.STDOUT,
|
||||
universal_newlines=True).decode('utf-8')
|
||||
except subprocess.CalledProcessError as e:
|
||||
if e.returncode == 3:
|
||||
return None
|
||||
|
@ -307,7 +312,8 @@ class Pacman(Platform):
|
|||
try:
|
||||
output = subprocess.check_output(
|
||||
['pacman', '-Q', pkg_name],
|
||||
stderr=subprocess.STDOUT)
|
||||
stderr=subprocess.STDOUT,
|
||||
universal_newlines=True)
|
||||
except subprocess.CalledProcessError as e:
|
||||
if e.returncode == 1 and e.output.endswith('was not found'):
|
||||
return None
|
||||
|
|
|
@ -343,7 +343,8 @@ class TestDpkg(TestCase):
|
|||
mock_checkoutput.assert_called_once_with(
|
||||
["dpkg-query", "-W", "-f",
|
||||
"${Package} ${Status} ${Version}\n", "foo"],
|
||||
stderr=subprocess.STDOUT)
|
||||
stderr=subprocess.STDOUT,
|
||||
universal_newlines=True)
|
||||
|
||||
def test_unknown_package(self):
|
||||
platform = Dpkg()
|
||||
|
@ -359,7 +360,8 @@ class TestDpkg(TestCase):
|
|||
mock_checkoutput.assert_called_once_with(
|
||||
["dpkg-query", "-W", "-f",
|
||||
"${Package} ${Status} ${Version}\n", "foo"],
|
||||
stderr=subprocess.STDOUT)
|
||||
stderr=subprocess.STDOUT,
|
||||
universal_newlines=True)
|
||||
|
||||
def test_installed_version(self):
|
||||
platform = Dpkg()
|
||||
|
@ -373,7 +375,8 @@ class TestDpkg(TestCase):
|
|||
mocked_checkoutput.assert_called_once_with(
|
||||
["dpkg-query", "-W", "-f",
|
||||
"${Package} ${Status} ${Version}\n", "foo"],
|
||||
stderr=subprocess.STDOUT)
|
||||
stderr=subprocess.STDOUT,
|
||||
universal_newlines=True)
|
||||
|
||||
|
||||
class TestEmerge(TestCase):
|
||||
|
@ -391,7 +394,8 @@ class TestEmerge(TestCase):
|
|||
self.assertEqual(None, platform.get_pkg_version("foo"))
|
||||
mocked_checkoutput.assert_called_once_with(
|
||||
['equery', 'l', '--format=\'$version\'', 'foo'],
|
||||
stderr=subprocess.STDOUT)
|
||||
stderr=subprocess.STDOUT,
|
||||
universal_newlines=True)
|
||||
|
||||
def test_unknown_package(self):
|
||||
platform = Emerge()
|
||||
|
@ -406,7 +410,8 @@ class TestEmerge(TestCase):
|
|||
self.assertEqual(None, platform.get_pkg_version("foo"))
|
||||
mocked_checkoutput.assert_called_once_with(
|
||||
['equery', 'l', '--format=\'$version\'', 'foo'],
|
||||
stderr=subprocess.STDOUT)
|
||||
stderr=subprocess.STDOUT,
|
||||
universal_newlines=True)
|
||||
|
||||
def test_installed_version(self):
|
||||
platform = Emerge()
|
||||
|
@ -416,7 +421,8 @@ class TestEmerge(TestCase):
|
|||
self.assertEqual("4.0.0", platform.get_pkg_version("foo"))
|
||||
mock_checkoutput.assert_called_once_with(
|
||||
['equery', 'l', '--format=\'$version\'', 'foo'],
|
||||
stderr=subprocess.STDOUT)
|
||||
stderr=subprocess.STDOUT,
|
||||
universal_newlines=True)
|
||||
|
||||
|
||||
class TestPacman(TestCase):
|
||||
|
@ -435,7 +441,8 @@ class TestPacman(TestCase):
|
|||
self.assertEqual(None, platform.get_pkg_version("foo"))
|
||||
mock_checkoutput.assert_called_once_with(
|
||||
['pacman', '-Q', 'foo'],
|
||||
stderr=subprocess.STDOUT)
|
||||
stderr=subprocess.STDOUT,
|
||||
universal_newlines=True)
|
||||
self.assertEqual(None, platform.get_pkg_version("foo"))
|
||||
|
||||
def test_installed_version(self):
|
||||
|
@ -446,7 +453,8 @@ class TestPacman(TestCase):
|
|||
self.assertEqual("4.0.0-2", platform.get_pkg_version("foo"))
|
||||
mock_checkoutput.assert_called_once_with(
|
||||
['pacman', '-Q', 'foo'],
|
||||
stderr=subprocess.STDOUT)
|
||||
stderr=subprocess.STDOUT,
|
||||
universal_newlines=True)
|
||||
|
||||
|
||||
class TestRpm(TestCase):
|
||||
|
@ -469,7 +477,8 @@ class TestRpm(TestCase):
|
|||
["rpm", "--qf",
|
||||
"%{NAME} %|EPOCH?{%{EPOCH}:}|%{VERSION}-%{RELEASE}\n", "-q",
|
||||
"foo"],
|
||||
stderr=subprocess.STDOUT)
|
||||
stderr=subprocess.STDOUT,
|
||||
universal_newlines=True)
|
||||
self.assertEqual(None, platform.get_pkg_version("foo"))
|
||||
|
||||
def test_installed_version(self):
|
||||
|
@ -482,7 +491,8 @@ class TestRpm(TestCase):
|
|||
["rpm", "--qf",
|
||||
"%{NAME} %|EPOCH?{%{EPOCH}:}|%{VERSION}-%{RELEASE}\n", "-q",
|
||||
"foo"],
|
||||
stderr=subprocess.STDOUT)
|
||||
stderr=subprocess.STDOUT,
|
||||
universal_newlines=True)
|
||||
|
||||
|
||||
class TestEval(TestCase):
|
||||
|
|
Loading…
Reference in New Issue