From 06adc05db489c3d0c8339d990f8bdaa7f6f7b3fb Mon Sep 17 00:00:00 2001 From: Christoph Reiter Date: Sun, 14 Jan 2024 13:50:19 +0100 Subject: [PATCH] repo-prune: group packages with signatures Ever since the download scripts copies over the original mtime from CI to the package, the mtimes of the package file and the signature files diverge. Since the prune script only goes by mtime this means packages get removed before signatures and which leads to some stray signature files on the server from time to time. Only delete a file if all existing related files should also be deleted. Fixes #8 --- msys2-repo-prune | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/msys2-repo-prune b/msys2-repo-prune index 9f448d0..dd9bfc3 100755 --- a/msys2-repo-prune +++ b/msys2-repo-prune @@ -166,6 +166,24 @@ def get_files_to_prune(target_dir, time_delta): for group in group_by_package_name_and_ext(entries): paths_to_delete.update(group_get_paths_too_old(group, not_to_delete)) + def get_related_files(path: str) -> list[str]: + """Returns a list of related files which should be deleted together with the given file""" + + if not path.endswith(".sig"): + return [path + ".sig"] + else: + return [path[:-4]] + + def related_also_to_delete(path: str) -> bool: + """Returns True if all related files are also to be deleted, or don't exist""" + + for related in get_related_files(path): + if related not in paths_to_delete and os.path.exists(related): + return False + return True + + paths_to_delete = set(p for p in paths_to_delete if related_also_to_delete(p)) + return paths_to_delete