from typing import Optional
from git import RemoteProgress
from tqdm import tqdm
[docs]
class CloneProgress(RemoteProgress):
def __init__(self) -> None:
super().__init__()
self.progress_bar = None
[docs]
def update(
self,
op_code: int,
cur_count: int,
max_count: Optional[int] = None,
message: str = "",
) -> None:
if max_count and not self.progress_bar:
# Initialize tqdm progress bar once max_count is known
self.progress_bar = tqdm(total=max_count, unit="obj", leave=True)
if self.progress_bar:
self.progress_bar.n = cur_count
self.progress_bar.refresh()
if message:
self.progress_bar.set_description(message)
def __del__(self) -> None:
# Close the progress bar when done
if self.progress_bar:
self.progress_bar.close()