|
1 | 1 | import pathlib
|
2 |
| -from typing import Optional, Sequence, Union |
| 2 | +from typing import Any, Literal, Optional, Sequence, Union |
3 | 3 |
|
4 | 4 | from ..types import StrOrBytesPath, StrOrPath
|
5 | 5 | from .core import run
|
@@ -191,6 +191,7 @@ def clone(
|
191 | 191 | jobs: Optional[str] = None,
|
192 | 192 | force: Optional[bool] = None,
|
193 | 193 | local: Optional[bool] = None,
|
| 194 | + all: Optional[bool] = None, |
194 | 195 | no_hardlinks: Optional[bool] = None,
|
195 | 196 | hardlinks: Optional[bool] = None,
|
196 | 197 | shared: Optional[bool] = None,
|
@@ -291,3 +292,160 @@ def clone(
|
291 | 292 | return self.run(
|
292 | 293 | ["clone", *local_flags, "--", *required_flags], check_returncode=False
|
293 | 294 | )
|
| 295 | + |
| 296 | + def fetch( |
| 297 | + self, |
| 298 | + reftag: Optional[Any] = None, |
| 299 | + deepen: Optional[str] = None, |
| 300 | + depth: Optional[str] = None, |
| 301 | + branch: Optional[str] = None, |
| 302 | + origin: Optional[str] = None, |
| 303 | + upload_pack: Optional[str] = None, |
| 304 | + shallow_since: Optional[str] = None, |
| 305 | + shallow_exclude: Optional[str] = None, |
| 306 | + negotiation_tip: Optional[str] = None, |
| 307 | + jobs: Optional[str] = None, |
| 308 | + server_option: Optional[str] = None, |
| 309 | + recurse_submodules: Optional[ |
| 310 | + Union[bool, Literal["yes", "on-demand", "no"]] |
| 311 | + ] = None, |
| 312 | + recurse_submodules_default: Optional[ |
| 313 | + Union[bool, Literal["yes", "on-demand"]] |
| 314 | + ] = None, |
| 315 | + submodule_prefix: Optional[StrOrBytesPath] = None, |
| 316 | + # |
| 317 | + all: Optional[bool] = None, |
| 318 | + force: Optional[bool] = None, |
| 319 | + keep: Optional[bool] = None, |
| 320 | + multiple: Optional[bool] = None, |
| 321 | + dry_run: Optional[bool] = None, |
| 322 | + append: Optional[bool] = None, |
| 323 | + atomic: Optional[bool] = None, |
| 324 | + ipv4: Optional[bool] = None, |
| 325 | + ipv6: Optional[bool] = None, |
| 326 | + progress: Optional[bool] = None, |
| 327 | + quiet: Optional[bool] = None, |
| 328 | + verbose: Optional[bool] = None, |
| 329 | + unshallow: Optional[bool] = None, |
| 330 | + update_shallow: Optional[bool] = None, |
| 331 | + negotiate_tip: Optional[bool] = None, |
| 332 | + no_write_fetch_head: Optional[bool] = None, |
| 333 | + write_fetch_head: Optional[bool] = None, |
| 334 | + no_auto_maintenance: Optional[bool] = None, |
| 335 | + auto_maintenance: Optional[bool] = None, |
| 336 | + no_write_commit_graph: Optional[bool] = None, |
| 337 | + write_commit_graph: Optional[bool] = None, |
| 338 | + prefetch: Optional[bool] = None, |
| 339 | + prune: Optional[bool] = None, |
| 340 | + prune_tags: Optional[bool] = None, |
| 341 | + no_tags: Optional[bool] = None, |
| 342 | + tags: Optional[bool] = None, |
| 343 | + no_recurse_submodules: Optional[bool] = None, |
| 344 | + set_upstream: Optional[bool] = None, |
| 345 | + update_head_ok: Optional[bool] = None, |
| 346 | + show_forced_updates: Optional[bool] = None, |
| 347 | + no_show_forced_updates: Optional[bool] = None, |
| 348 | + negotiate_only: Optional[bool] = None, |
| 349 | + **kwargs, |
| 350 | + ): |
| 351 | + """Download from repo. Wraps `git fetch <https://git-scm.com/docs/git-fetch>`_. |
| 352 | +
|
| 353 | + Examples |
| 354 | + -------- |
| 355 | + >>> git = Git(dir=git_local_clone.dir) |
| 356 | + >>> git_remote_repo = create_git_remote_repo() |
| 357 | + >>> git.fetch() |
| 358 | + '' |
| 359 | + >>> git = Git(dir=git_local_clone.dir) |
| 360 | + >>> git_remote_repo = create_git_remote_repo() |
| 361 | + >>> git.fetch(reftag=f'file://{git_remote_repo}') |
| 362 | + '' |
| 363 | + >>> git.dir.exists() |
| 364 | + True |
| 365 | + """ |
| 366 | + required_flags: list[str] = [] |
| 367 | + if reftag: |
| 368 | + required_flags.insert(0, reftag) |
| 369 | + local_flags: list[str] = [] |
| 370 | + |
| 371 | + if submodule_prefix is not None: |
| 372 | + local_flags.append(f"--submodule-prefix={submodule_prefix}") |
| 373 | + if (filter := kwargs.pop("filter", None)) is not None: |
| 374 | + local_flags.append(f"--filter={filter}") |
| 375 | + if depth is not None: |
| 376 | + local_flags.append(f"--depth {depth}") |
| 377 | + if branch is not None: |
| 378 | + local_flags.append(f"--branch {branch}") |
| 379 | + if origin is not None: |
| 380 | + local_flags.append(f"--origin {origin}") |
| 381 | + if upload_pack is not None: |
| 382 | + local_flags.append(f"--upload-pack {upload_pack}") |
| 383 | + if shallow_since is not None: |
| 384 | + local_flags.append(f"--shallow-since={shallow_since}") |
| 385 | + if shallow_exclude is not None: |
| 386 | + local_flags.append(f"--shallow-exclude={shallow_exclude}") |
| 387 | + if server_option is not None: |
| 388 | + local_flags.append(f"--server-option={server_option}") |
| 389 | + if jobs is not None: |
| 390 | + local_flags.append(f"--jobs {jobs}") |
| 391 | + if keep: |
| 392 | + local_flags.append("--keep") |
| 393 | + if force: |
| 394 | + local_flags.append("--force") |
| 395 | + if multiple: |
| 396 | + local_flags.append("--multiple") |
| 397 | + if quiet: |
| 398 | + local_flags.append("--quiet") |
| 399 | + if progress: |
| 400 | + local_flags.append("--progress") |
| 401 | + if verbose: |
| 402 | + local_flags.append("--verbose") |
| 403 | + if all: |
| 404 | + local_flags.append("--all") |
| 405 | + if atomic: |
| 406 | + local_flags.append("--atomic") |
| 407 | + if unshallow: |
| 408 | + local_flags.append("--unshallow") |
| 409 | + if append: |
| 410 | + local_flags.append("--append") |
| 411 | + if update_shallow: |
| 412 | + local_flags.append("--update-shallow") |
| 413 | + if dry_run: |
| 414 | + local_flags.append("--dry-run") |
| 415 | + if no_write_fetch_head: |
| 416 | + local_flags.append("--no-write-fetch-head") |
| 417 | + if write_fetch_head: |
| 418 | + local_flags.append("--write-fetch-head") |
| 419 | + if auto_maintenance: |
| 420 | + local_flags.append("--auto-maintenance") |
| 421 | + if no_auto_maintenance: |
| 422 | + local_flags.append("--no-auto-maintenance") |
| 423 | + if write_commit_graph: |
| 424 | + local_flags.append("--write-commit-graph") |
| 425 | + if no_write_commit_graph: |
| 426 | + local_flags.append("--no-write-commit-graph") |
| 427 | + if prefetch: |
| 428 | + local_flags.append("--prefetch") |
| 429 | + if prune: |
| 430 | + local_flags.append("--prune") |
| 431 | + if prune_tags: |
| 432 | + local_flags.append("--prune-tags") |
| 433 | + if tags: |
| 434 | + local_flags.append("--tags") |
| 435 | + if no_tags: |
| 436 | + local_flags.append("--no-tags") |
| 437 | + if no_recurse_submodules: |
| 438 | + local_flags.append("--no-recurse-submodules") |
| 439 | + if set_upstream: |
| 440 | + local_flags.append("--set-upstream") |
| 441 | + if update_head_ok: |
| 442 | + local_flags.append("--update-head-ok") |
| 443 | + if show_forced_updates: |
| 444 | + local_flags.append("--show-forced-updates") |
| 445 | + if no_show_forced_updates: |
| 446 | + local_flags.append("--no-show-forced-updates") |
| 447 | + if negotiate_only: |
| 448 | + local_flags.append("--negotiate-only") |
| 449 | + return self.run( |
| 450 | + ["fetch", *local_flags, "--", *required_flags], check_returncode=False |
| 451 | + ) |
0 commit comments