From 7aed0e057ede213ec0fc31f255b9afa7f9e8353c Mon Sep 17 00:00:00 2001 From: MaXFeeD Date: Fri, 31 Jul 2026 18:55:45 +0300 Subject: [PATCH] --force clearOutput removes output directory, improved logging it --- src/icmtoolchain/builtin_tasks.py | 8 +++++--- src/icmtoolchain/java_build.py | 2 ++ src/icmtoolchain/package.py | 5 +++-- src/icmtoolchain/utils.py | 13 +++++++++---- 4 files changed, 19 insertions(+), 9 deletions(-) diff --git a/src/icmtoolchain/builtin_tasks.py b/src/icmtoolchain/builtin_tasks.py index c07e2ec..11d446d 100644 --- a/src/icmtoolchain/builtin_tasks.py +++ b/src/icmtoolchain/builtin_tasks.py @@ -108,11 +108,13 @@ def task_resources() -> int: description="Optionally deletes the output folder; has no effect by default." ) def task_clear_output(force: bool = False) -> int: - if GLOBALS.MAKE_CONFIG.get_value("development.clearOutput", False) or force: - GLOBALS.PROJECT_STRUCTURE.cleanup(clear_output=True) + from .package import pretty_cleanup_directory if PROPERTIES.get_value("release"): - from .package import pretty_cleanup_directory pretty_cleanup_directory(GLOBALS.MAKE_CONFIG.get_build_path()) + if force or GLOBALS.MAKE_CONFIG.get_value("development.clearOutput", False): + GLOBALS.PROJECT_STRUCTURE.cleanup(clear_output=True) + if force or PROPERTIES.get_value("release"): + pretty_cleanup_directory(GLOBALS.PROJECT_STRUCTURE.directory) return 0 @task( diff --git a/src/icmtoolchain/java_build.py b/src/icmtoolchain/java_build.py index 4bf8b06..0daa2f1 100644 --- a/src/icmtoolchain/java_build.py +++ b/src/icmtoolchain/java_build.py @@ -44,6 +44,7 @@ def collect_classpath_files(directories: Collection[str]) -> List[str]: continue libraries = get_all_files(classpath_directory, (".jar")) classpath.extend(libraries) + global TOOLCHAIN_CLASSPATH if not TOOLCHAIN_CLASSPATH: from .output_directory import get_config_directory @@ -56,6 +57,7 @@ def collect_classpath_files(directories: Collection[str]) -> List[str]: TOOLCHAIN_CLASSPATH.remove(innercore_test) except ValueError: attention("Failed to exclude 'innercore-test.jar' from classpath for package build, contact developer and tell them they are a arsehole.") + if TOOLCHAIN_CLASSPATH: classpath.extend(TOOLCHAIN_CLASSPATH) return classpath diff --git a/src/icmtoolchain/package.py b/src/icmtoolchain/package.py index c2714be..daff709 100644 --- a/src/icmtoolchain/package.py +++ b/src/icmtoolchain/package.py @@ -31,8 +31,9 @@ def get_path_set(locations: List[str], error_sensitive: bool = False) -> Optiona def pretty_cleanup_directory(path: str) -> None: start_time = time.time() - remove_tree(GLOBALS.TOOLCHAIN_CONFIG.get_path(path)) - success(f"Completed {basename(path)} cleanup in {int((time.time() - start_time) * 100) / 100}s") + absolute_path = GLOBALS.TOOLCHAIN_CONFIG.get_path(path) + if remove_tree(absolute_path): + success(f"Completed {basename(path)} cleanup in {int((time.time() - start_time) * 100) / 100}s") def collect_project_templates() -> List[str]: templates = [] diff --git a/src/icmtoolchain/utils.py b/src/icmtoolchain/utils.py index bcb2e67..61e8127 100644 --- a/src/icmtoolchain/utils.py +++ b/src/icmtoolchain/utils.py @@ -48,16 +48,20 @@ def ensure_file(path: str) -> None: if isdir(path) or islink(path): move_to_backup(path) -def remove_tree(directory: str) -> None: +def remove_tree(directory: str) -> bool: """ Removes existing files, directories and links recursive. """ if not exists(directory): - return + return False if isfile(directory) or islink(directory): os.remove(directory) - return - shutil.rmtree(directory, ignore_errors=True) + return True + try: + shutil.rmtree(directory, ignore_errors=False) + except Exception: + return False + return True def copy_file(source: str, destination: str) -> None: """ @@ -66,6 +70,7 @@ def copy_file(source: str, destination: str) -> None: """ source = abspath(source) destination = abspath(destination) + ensure_file_directory(destination) try: shutil.copy(source, destination)