From 4cff548641f7def378407f8af3f4c798b52d6b5f Mon Sep 17 00:00:00 2001 From: MaXFeeD Date: Fri, 9 May 2025 17:06:03 +0300 Subject: [PATCH] Using FileConfig instead of ToolchainConfig, unique_folder_name separation --- src/icmtoolchain/make_config.py | 12 ++---------- src/icmtoolchain/native_build.py | 9 ++++----- src/icmtoolchain/output_directory.py | 9 +++++++++ src/icmtoolchain/task.py | 4 ++-- 4 files changed, 17 insertions(+), 17 deletions(-) create mode 100644 src/icmtoolchain/output_directory.py diff --git a/src/icmtoolchain/make_config.py b/src/icmtoolchain/make_config.py index 29556b5..d46f983 100644 --- a/src/icmtoolchain/make_config.py +++ b/src/icmtoolchain/make_config.py @@ -5,11 +5,6 @@ from typing import Callable, Final, List, Optional from .config import Config, FileConfig from .shell import abort -try: - from hashlib import blake2s as encode -except ImportError: - from hashlib import md5 as encode - class ToolchainConfig(FileConfig): def __init__(self, path: str, defaults: Optional[Config] = None) -> None: @@ -72,11 +67,8 @@ class MakeConfig(ToolchainConfig): abort(f"Not found {basename(path)!r}, are you sure that selected project exists?") self.current_project = defaults.get_value("currentProject") super().__init__(path, defaults=defaults) - self.project_unique_name = self.unique_folder_name(self.directory) + from .output_directory import unique_folder_name + self.project_unique_name = unique_folder_name(self.directory) def get_build_path(self, relative_path: str) -> str: return self.defaults.get_relative_path(join("build", self.project_unique_name, relative_path)) - - @staticmethod - def unique_folder_name(path: str) -> str: - return basename(path) + "-" + encode(bytes(path, "utf-8")).hexdigest()[-5:] diff --git a/src/icmtoolchain/native_build.py b/src/icmtoolchain/native_build.py index 3257447..6fe1ee4 100644 --- a/src/icmtoolchain/native_build.py +++ b/src/icmtoolchain/native_build.py @@ -6,9 +6,8 @@ from os.path import abspath, basename, exists, isdir, isfile, join, relpath from typing import Collection, Dict, List, Optional from . import GLOBALS, PROPERTIES -from .config import Config +from .config import Config, FileConfig from .language import get_language_directories -from .make_config import ToolchainConfig from .native_setup import arch_to_abi, prepare_compiler_executable from .shell import abort, debug, error, info, pretty_print, warn from .utils import (RuntimeCodeError, copy_directory, copy_file, @@ -46,12 +45,12 @@ def collect_stdincludes_directories(directories: Optional[Collection[str]]) -> L warn(f"* Header {filename} should be inside any of stdincludes directory, otherwise it will be ignored.") return stdincludes -def get_manifest(directory: str) -> ToolchainConfig: - return ToolchainConfig(join(directory, "manifest")) +def get_manifest(directory: str) -> FileConfig: + return FileConfig(join(directory, "manifest")) def get_name_from_manifest(directory: str) -> Optional[str]: try: - return get_manifest(directory).get_value("shared.name", basename(directory)) + return get_manifest(directory).get_value("shared.name", lambda: basename(directory)) except: return None diff --git a/src/icmtoolchain/output_directory.py b/src/icmtoolchain/output_directory.py new file mode 100644 index 0000000..5f7ce31 --- /dev/null +++ b/src/icmtoolchain/output_directory.py @@ -0,0 +1,9 @@ +from os.path import basename + +try: + from hashlib import blake2s as encode +except ImportError: + from hashlib import md5 as encode + +def unique_folder_name(path: str) -> str: + return basename(path) + "-" + encode(bytes(path, "utf-8")).hexdigest()[-5:] diff --git a/src/icmtoolchain/task.py b/src/icmtoolchain/task.py index 410b50f..2d6c74e 100644 --- a/src/icmtoolchain/task.py +++ b/src/icmtoolchain/task.py @@ -423,9 +423,9 @@ def task_remove_project() -> int: try: location = GLOBALS.TOOLCHAIN_CONFIG.get_path(who) GLOBALS.PROJECT_MANAGER.remove_project(folder=who) - from .make_config import MakeConfig + from .output_directory import unique_folder_name from .package import cleanup_relative_directory - cleanup_relative_directory("build/" + MakeConfig.unique_folder_name(location)) + cleanup_relative_directory("build/" + unique_folder_name(location)) except ValueError: abort(f"Folder {who!r} not found!")