43 lines
1.6 KiB
Python
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
|
|
|