# (c) 2025 by Stephan Menzel # Licensed under the Apache License, Version 2.0. # See attached file LICENSE for full details import datetime import shutil from pathlib import Path import logging as log from build_functions.build_utils import run_in_shell import common.settings from common.tags import sanitize_tag from package.package_info import PackageInfo def clone_git_tag(package_info: PackageInfo, backup_existing=False, delete_existing=False, recursive=False) -> Path: """I'm not using gitlib for this as I don't want dependencies that would require a venv or something """ # git_repo_name = Path(package_info.repo).stem common.settings.build_dir.mkdir(parents=True, exist_ok=True) # local_dir = Path("raw") / Path(git_repo_name.lower() + '-' + sanitize_tag(package_info.tag).replace('_', '.')) # local_dir = Path("raw") / Path(git_repo_name.lower() + '-' + sanitize_tag(package_info.tag)) src_dir = package_info.src_dir() recursive_flag = "--recursive --shallow-submodules" if recursive else "" if src_dir.exists(): if delete_existing: shutil.rmtree(src_dir) elif common.settings.rebuild: shutil.rmtree(src_dir / "_build", ignore_errors=True) elif src_dir.exists() and backup_existing: date_str = datetime.datetime.now().strftime("%Y%m%d") src_dir.rename(Path(date_str) / package_info.name) else: log.info(f"Cloning {package_info.repo} ...") run_in_shell( f"git clone -c advice.detachedHead=false {recursive_flag} --depth 1 -b {package_info.tag} {package_info.repo} {src_dir}") return src_dir if src_dir.is_dir() else None