From 1743da873c6de64b92c63376feb683f4efc1fcb0 Mon Sep 17 00:00:00 2001 From: Dan Smith Date: Fri, 26 May 2017 07:14:51 -0700 Subject: [PATCH] Log an error when lsb_release cannot be executed Right now, if lsb_release is not on the system, bindep just dumps stack and indicates "No such file or directory". This gives no indication of what the problem is or what to do to resolve it. This change logs an error message about lsb_release being missing in that case. Change-Id: I501647770478fe154d66cdb2c6adff48973dd23c --- bindep/depends.py | 11 ++++++++--- bindep/tests/test_depends.py | 6 ++++++ 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/bindep/depends.py b/bindep/depends.py index 7c840c9..f080e4f 100644 --- a/bindep/depends.py +++ b/bindep/depends.py @@ -226,9 +226,14 @@ class Depends(object): return sorted(profiles) def platform_profiles(self): - output = subprocess.check_output( - ["lsb_release", "-cirs"], - stderr=subprocess.STDOUT).decode(getpreferredencoding(False)) + try: + output = subprocess.check_output( + ["lsb_release", "-cirs"], + stderr=subprocess.STDOUT).decode(getpreferredencoding(False)) + except OSError: + log = logging.getLogger(__name__) + log.error('Unable to execute lsb_release. Is it installed?') + raise lsbinfo = output.lower().split() # NOTE(toabctl): distro can be more than one string (i.e. "SUSE LINUX") codename = lsbinfo[len(lsbinfo) - 1:len(lsbinfo)][0] diff --git a/bindep/tests/test_depends.py b/bindep/tests/test_depends.py index e317909..938179f 100644 --- a/bindep/tests/test_depends.py +++ b/bindep/tests/test_depends.py @@ -207,6 +207,12 @@ class TestDepends(TestCase): depends.platform_profiles(), Contains("platform:pacman")) self.assertIsInstance(depends.platform, Pacman) + def test_missing_lsb_release(self): + with mock.patch('subprocess.check_output') as mock_co: + mock_co.side_effect = OSError + depends = Depends("") + self.assertRaises(OSError, depends.platform_profiles) + def test_finds_profiles(self): depends = Depends(dedent("""\ foo