From b2ad4088aafd81c5e4640143cea173014698b860 Mon Sep 17 00:00:00 2001 From: nbenedek Date: Fri, 7 Apr 2023 00:41:30 +0200 Subject: [PATCH] ikiwiki: Completely uninstall app Tests: 1. Create a wiki and a blog 2. Reinstall the app and confirm the sites get deleted Signed-off-by: nbenedek [sunil: Update docstrings, make uninstall fail-safe] Signed-off-by: Sunil Mohan Adapa Reviewed-by: Sunil Mohan Adapa --- plinth/modules/ikiwiki/__init__.py | 5 +++++ plinth/modules/ikiwiki/privileged.py | 19 ++++++++++++------- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/plinth/modules/ikiwiki/__init__.py b/plinth/modules/ikiwiki/__init__.py index 02faed584..fbe490f30 100644 --- a/plinth/modules/ikiwiki/__init__.py +++ b/plinth/modules/ikiwiki/__init__.py @@ -112,6 +112,11 @@ class IkiwikiApp(app_module.App): privileged.setup() self.enable() + def uninstall(self): + """De-configure and uninstall the app.""" + super().uninstall() + privileged.uninstall() + class IkiwikiBackupRestore(BackupRestore): """Component to handle Ikiwiki restore""" diff --git a/plinth/modules/ikiwiki/privileged.py b/plinth/modules/ikiwiki/privileged.py index 8d127d1ef..ffd711889 100644 --- a/plinth/modules/ikiwiki/privileged.py +++ b/plinth/modules/ikiwiki/privileged.py @@ -2,6 +2,7 @@ """Configure ikiwiki.""" import os +import pathlib import re import shutil import subprocess @@ -96,10 +97,14 @@ def delete(name: str): raise ValueError( 'Error: {0} is not a correct wiki/blog name.'.format(name)) - try: - shutil.rmtree(html_folder) - shutil.rmtree(wiki_folder) - shutil.rmtree(wiki_folder + '.git') - os.remove(wiki_folder + '.setup') - except FileNotFoundError: - raise RuntimeError('Unable to delete wiki/blog') + shutil.rmtree(html_folder, ignore_errors=True) + shutil.rmtree(wiki_folder, ignore_errors=True) + shutil.rmtree(wiki_folder + '.git', ignore_errors=True) + pathlib.Path(wiki_folder + '.setup').unlink(missing_ok=True) + + +@privileged +def uninstall(): + """Remove all ikiwiki sites.""" + for site in get_sites(): + delete(site[0])