From da3c37a872987d7066e014a42527d73c2d8d5aa2 Mon Sep 17 00:00:00 2001 From: Aleksei Sviridkin <3811295@gmail.com> Date: Thu, 13 Mar 2025 19:34:25 +0300 Subject: [PATCH] feat(git_utils): Support for blolbless clone mode in git_cmd_clone (#640) * feat(git_utils): enhance git_cmd_clone with depth and single-branch options Signed-off-by: Aleksei Sviridkin * fix(git_utils): add a newline for better readability in git_cmd_clone Signed-off-by: Aleksei Sviridkin * feat(git_utils): enhance git_cmd_clone with optional depth and single-branch parameters Signed-off-by: Aleksei Sviridkin * feat(git_utils): update git_cmd_clone to support blolbless cloning option Signed-off-by: Aleksei Sviridkin * revert formatting changes Signed-off-by: Aleksei Sviridkin * fix another formatting changes Signed-off-by: Aleksei Sviridkin * fix(git_utils): correct indentation for improved readability in get_local_tags function Signed-off-by: Aleksei Sviridkin * fix(git_utils): rename blolbless parameter to blobless and update documentation for clarity Signed-off-by: Aleksei Sviridkin * refactor: enable the blobless clone feature for all regular clones skip checkout step if brach is master or main Signed-off-by: Dominik Willner --------- Signed-off-by: Aleksei Sviridkin Signed-off-by: Dominik Willner Co-authored-by: dw-0 --- kiauh/utils/git_utils.py | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/kiauh/utils/git_utils.py b/kiauh/utils/git_utils.py index 6f509ac..b554e27 100644 --- a/kiauh/utils/git_utils.py +++ b/kiauh/utils/git_utils.py @@ -26,9 +26,10 @@ def git_clone_wrapper( ) -> None: """ Clones a repository from the given URL and checks out the specified branch if given. + The clone will be performed with the '--filter=blob:none' flag to perform a blobless clone. :param repo: The URL of the repository to clone. - :param branch: The branch to check out. If None, the default branch will be checked out. + :param branch: The branch to check out. If None, master or main, no checkout will be performed. :param target_dir: The directory where the repository will be cloned. :param force: Force the cloning of the repository even if it already exists. :return: None @@ -43,8 +44,11 @@ def git_clone_wrapper( return shutil.rmtree(target_dir) - git_cmd_clone(repo, target_dir) - git_cmd_checkout(branch, target_dir) + git_cmd_clone(repo, target_dir, blobless=True) + + if branch not in ("master", "main"): + git_cmd_checkout(branch, target_dir) + except CalledProcessError: log = "An unexpected error occured during cloning of the repository." Logger.print_error(log) @@ -255,11 +259,23 @@ def get_remote_commit(repo: Path) -> str | None: return None -def git_cmd_clone(repo: str, target_dir: Path) -> None: - try: - command = ["git", "clone", repo, target_dir.as_posix()] - run(command, check=True) +def git_cmd_clone(repo: str, target_dir: Path, blobless: bool = False) -> None: + """ + Clones a repository with optional blobless clone. + :param repo: URL of the repository to clone. + :param target_dir: Path where the repository will be cloned. + :param blobless: If True, perform a blobless clone by adding the '--filter=blob:none' flag. + """ + try: + command = ["git", "clone"] + + if blobless: + command.append("--filter=blob:none") + + command += [repo, target_dir.as_posix()] + + run(command, check=True) Logger.print_ok("Clone successful!") except CalledProcessError as e: error = e.stderr.decode() if e.stderr else "Unknown error"