From 0b807a8ce1c4528f16ab7d2dc28a353ede0b417d Mon Sep 17 00:00:00 2001 From: Sunil Mohan Adapa Date: Tue, 4 Mar 2025 07:46:17 -0800 Subject: [PATCH] upgrades: Refactor code for disabling Quassel during dist-upgrade Signed-off-by: Sunil Mohan Adapa Reviewed-by: James Valleroy --- plinth/modules/upgrades/distupgrade.py | 30 +++++++++++++------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/plinth/modules/upgrades/distupgrade.py b/plinth/modules/upgrades/distupgrade.py index 4d189482e..c9cd85f90 100644 --- a/plinth/modules/upgrades/distupgrade.py +++ b/plinth/modules/upgrades/distupgrade.py @@ -8,10 +8,10 @@ import subprocess import time from typing import Generator +from plinth import action_utils from plinth.action_utils import (apt_hold, apt_hold_freedombox, debconf_set_selections, run_apt_command, - service_daemon_reload, service_is_running, - service_restart, service_start, service_stop) + service_daemon_reload, service_restart) from plinth.modules import snapshot as snapshot_module from . import utils @@ -170,20 +170,25 @@ def _snapshot_run_and_disable() -> Generator[None, None, None]: 'before dist upgrade.') -def perform(): - """Perform upgrade to next release of Debian.""" +@contextlib.contextmanager +def _services_disable(): + """Disable services that are seriously impacted by the upgrade.""" # If quassel is running during dist upgrade, it may be restarted # several times. This causes IRC users to rapidly leave/join # channels. Stop quassel for the duration of the dist upgrade. - quassel_service = 'quasselcore' - quassel_was_running = service_is_running(quassel_service) - if quassel_was_running: - print('Stopping quassel service before dist upgrade...', flush=True) - service_stop(quassel_service) + print('Stopping quassel service during dist upgrade...', flush=True) + with action_utils.service_ensure_stopped('quasselcore'): + yield + print('Re-enabling quassel service if previously enabled...', + flush=True) + +def perform(): + """Perform upgrade to next release of Debian.""" # Hold freedombox package during entire dist upgrade. print('Holding freedombox package...', flush=True) - with apt_hold_freedombox(), _snapshot_run_and_disable(): + with (apt_hold_freedombox(), _snapshot_run_and_disable(), + _services_disable()): print('Updating Apt cache...', flush=True) run_apt_command(['update']) @@ -217,11 +222,6 @@ def perform(): 'Apt full-upgrade was not successful. Distribution upgrade ' 'will be retried at a later time.') - if quassel_was_running: - print('Re-starting quassel service after dist upgrade...', - flush=True) - service_start(quassel_service) - print('Running apt autoremove...', flush=True) run_apt_command(['autoremove'])