From aa4569b55b384a47ed0d4fd24f0f0e795e4d79e8 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Mon, 24 May 2021 23:07:11 +0200 Subject: [PATCH] [packages] Convert command-failures into readable error messages If the pakcage manager fails in some way, convert to a readable error message instead of leaking the exception to the caller (which produces a traceback, which is harder to read and less informative) --- src/modules/packages/main.py | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/src/modules/packages/main.py b/src/modules/packages/main.py index c3cc2ad7d..9be079dac 100644 --- a/src/modules/packages/main.py +++ b/src/modules/packages/main.py @@ -579,11 +579,27 @@ def run(): update_db = libcalamares.job.configuration.get("update_db", False) if update_db and libcalamares.globalstorage.value("hasInternet"): - pkgman.update_db() + try: + pkgman.update_db() + except subprocess.CalledProcessError as e: + libcalamares.utils.warning(str(e)) + libcalamares.utils.debug("stdout:" + str(e.stdout)) + libcalamares.utils.debug("stderr:" + str(e.stderr)) + return (_("Package Manager error"), + _("The package manager could not prepare updates. The command
{!s}
returned error code {!s}.") + .format(e.cmd, e.returncode)) update_system = libcalamares.job.configuration.get("update_system", False) if update_system and libcalamares.globalstorage.value("hasInternet"): - pkgman.update_system() + try: + pkgman.update_system() + except subprocess.CalledProcessError as e: + libcalamares.utils.warning(str(e)) + libcalamares.utils.debug("stdout:" + str(e.stdout)) + libcalamares.utils.debug("stderr:" + str(e.stderr)) + return (_("Package Manager error"), + _("The package manager could not update the system. The command
{!s}
returned error code {!s}.") + .format(e.cmd, e.returncode)) operations = libcalamares.job.configuration.get("operations", []) if libcalamares.globalstorage.contains("packageOperations"): @@ -603,11 +619,18 @@ def run(): for entry in operations: group_packages = 0 libcalamares.utils.debug(pretty_name()) - run_operations(pkgman, entry) + try: + run_operations(pkgman, entry) + except subprocess.CalledProcessError as e: + libcalamares.utils.warning(str(e)) + libcalamares.utils.debug("stdout:" + str(e.stdout)) + libcalamares.utils.debug("stderr:" + str(e.stderr)) + return (_("Package Manager error"), + _("The package manager could make changes to the installed system. The command
{!s}
returned error code {!s}.") + .format(e.cmd, e.returncode)) mode_packages = None libcalamares.job.setprogress(1.0) - libcalamares.utils.debug(pretty_name()) return None