From 6450001541d641f1a31a48b984c52090cd04a1c6 Mon Sep 17 00:00:00 2001 From: Mathieu Broillet Date: Sat, 5 Oct 2024 10:55:04 +0200 Subject: [PATCH] keep symlinks after updating --- core/stack.py | 3 ++- core/utils.py | 23 +++++++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/core/stack.py b/core/stack.py index 90360bb..12c192d 100644 --- a/core/stack.py +++ b/core/stack.py @@ -39,7 +39,6 @@ class Stack: self.pid = config.get(f"{self.name}-pid") - def install(self): if self.is_installed(): self.update() @@ -74,8 +73,10 @@ class Stack: self.stop() logger.info(f"Updating {self.name}") + symlinks = utils.find_symlink_in_folder(self.path) self.git_pull(folder) self._update() + utils.create_symlinks(symlinks) if status: self.start() diff --git a/core/utils.py b/core/utils.py index 2dc2903..606aa4f 100644 --- a/core/utils.py +++ b/core/utils.py @@ -1,7 +1,9 @@ import importlib import json import os +import shutil import subprocess +from pathlib import Path from urllib import request, error from core.stack import Stack @@ -79,3 +81,24 @@ def load_service_from_string(service: str) -> Stack: met = getattr(module, service_name) return met() + +def find_symlink_in_folder(folder: str): + symlinks = {} + for file in Path(folder).rglob("webui/**"): + if file.is_symlink(): + symlinks[file] = file.resolve() + + return symlinks + + +def create_symlinks(symlinks: dict[Path, Path]): + for target, link in symlinks.items(): + logger.debug(f"(re)Creating symlink: {link} -> {target}") + + if target.is_symlink(): + target.unlink() + + if target.exists() and target.is_dir(): + shutil.rmtree(target) + + os.symlink(link, target)