Skip to content

Commit 08a0ff2

Browse files
committed
feat(cmd): git.fetch
1 parent f57bc06 commit 08a0ff2

File tree

1 file changed

+159
-1
lines changed

1 file changed

+159
-1
lines changed

libvcs/cmd/git.py

Lines changed: 159 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import pathlib
2-
from typing import Optional, Sequence, Union
2+
from typing import Any, Literal, Optional, Sequence, Union
33

44
from ..types import StrOrBytesPath, StrOrPath
55
from .core import run
@@ -191,6 +191,7 @@ def clone(
191191
jobs: Optional[str] = None,
192192
force: Optional[bool] = None,
193193
local: Optional[bool] = None,
194+
all: Optional[bool] = None,
194195
no_hardlinks: Optional[bool] = None,
195196
hardlinks: Optional[bool] = None,
196197
shared: Optional[bool] = None,
@@ -291,3 +292,160 @@ def clone(
291292
return self.run(
292293
["clone", *local_flags, "--", *required_flags], check_returncode=False
293294
)
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

Comments
 (0)