DepperDan/common/git_helpers.py

43 lines
1.6 KiB
Python

# (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