upgrades: Hold tt-rss during dist upgrade, if available

Performs this hold separately from the others, and ignore errors only
for tt-rss.

Signed-off-by: James Valleroy <jvalleroy@mailbox.org>
Reviewed-by: Sunil Mohan Adapa <sunil@medhas.org>
This commit is contained in:
James Valleroy 2021-01-10 07:18:02 -05:00 committed by Sunil Mohan Adapa
parent a9914128f3
commit 566a1bd243
No known key found for this signature in database
GPG Key ID: 43EA1CFF0AA7C5F2
2 changed files with 8 additions and 5 deletions

View File

@ -425,8 +425,10 @@ def _perform_dist_upgrade():
'Holding packages with conffile prompts: ' +
', '.join(packages_with_prompts) + '...', flush=True)
with apt_hold(packages_with_prompts):
print('Running apt full-upgrade...', flush=True)
run_apt_command(['full-upgrade'])
print('Holding tt-rss package if available...', flush=True)
with apt_hold(['tt-rss'], ignore_errors=True):
print('Running apt full-upgrade...', flush=True)
run_apt_command(['full-upgrade'])
# If searx is installed, update search engines list.
if pathlib.Path('/etc/searx/settings.yml').exists():

View File

@ -413,7 +413,7 @@ def run_apt_command(arguments):
@contextmanager
def apt_hold(packages=None):
def apt_hold(packages=None, ignore_errors=False):
"""Prevent packages from being removed during apt operations."""
if not packages:
packages = ['freedombox']
@ -421,7 +421,8 @@ def apt_hold(packages=None):
current_hold = subprocess.check_output(['apt-mark', 'showhold'] + packages)
try:
yield current_hold or subprocess.run(['apt-mark', 'hold'] + packages,
check=True)
check=not ignore_errors)
finally:
if not current_hold:
subprocess.run(['apt-mark', 'unhold'] + packages, check=True)
subprocess.run(['apt-mark', 'unhold'] + packages,
check=not ignore_errors)