@@ -457,3 +457,276 @@ def fetch(
457457 return self .run (
458458 ["fetch" , * local_flags , "--" , * required_flags ], check_returncode = False
459459 )
460+
461+ def pull (
462+ self ,
463+ reftag : Optional [Any ] = None ,
464+ repository : Optional [str ] = None ,
465+ deepen : Optional [str ] = None ,
466+ depth : Optional [str ] = None ,
467+ branch : Optional [str ] = None ,
468+ origin : Optional [str ] = None ,
469+ upload_pack : Optional [str ] = None ,
470+ shallow_since : Optional [str ] = None ,
471+ shallow_exclude : Optional [str ] = None ,
472+ negotiation_tip : Optional [str ] = None ,
473+ jobs : Optional [str ] = None ,
474+ server_option : Optional [str ] = None ,
475+ recurse_submodules : Optional [
476+ Union [bool , Literal ["yes" , "on-demand" , "no" ]]
477+ ] = None ,
478+ recurse_submodules_default : Optional [
479+ Union [bool , Literal ["yes" , "on-demand" ]]
480+ ] = None ,
481+ submodule_prefix : Optional [StrOrBytesPath ] = None ,
482+ #
483+ # Pull specific flags
484+ #
485+ # Options related to git pull
486+ # https://git-scm.com/docs/git-pull#_options_related_to_pull
487+ #
488+ cleanup : Optional [str ] = None ,
489+ rebase : Optional [Union [str , bool ]] = None ,
490+ no_rebase : Optional [bool ] = None ,
491+ strategy : Optional [Union [str , bool ]] = None ,
492+ strategy_option : Optional [str ] = None ,
493+ gpg_sign : Optional [Union [str , bool ]] = None ,
494+ no_gpg_sign : Optional [bool ] = None ,
495+ commit : Optional [bool ] = None ,
496+ no_commit : Optional [bool ] = None ,
497+ edit : Optional [bool ] = None ,
498+ no_edit : Optional [bool ] = None ,
499+ fast_forward_only : Optional [bool ] = None ,
500+ fast_forward : Optional [bool ] = None ,
501+ no_fast_forward : Optional [bool ] = None ,
502+ sign_off : Optional [bool ] = None ,
503+ no_sign_off : Optional [bool ] = None ,
504+ stat : Optional [bool ] = None ,
505+ no_stat : Optional [bool ] = None ,
506+ squash : Optional [bool ] = None ,
507+ no_squash : Optional [bool ] = None ,
508+ verify : Optional [bool ] = None ,
509+ no_verify : Optional [bool ] = None ,
510+ verify_signatures : Optional [bool ] = None ,
511+ no_verify_signatures : Optional [bool ] = None ,
512+ summary : Optional [bool ] = None ,
513+ no_summary : Optional [bool ] = None ,
514+ autostash : Optional [bool ] = None ,
515+ no_autostash : Optional [bool ] = None ,
516+ allow_unrelated_histories : Optional [bool ] = None ,
517+ #
518+ # Options related to git fetch
519+ # https://git-scm.com/docs/git-pull#_options_related_to_fetching
520+ #
521+ fetch : Optional [bool ] = None ,
522+ no_fetch : Optional [bool ] = None ,
523+ all : Optional [bool ] = None ,
524+ force : Optional [bool ] = None ,
525+ keep : Optional [bool ] = None ,
526+ multiple : Optional [bool ] = None ,
527+ dry_run : Optional [bool ] = None ,
528+ append : Optional [bool ] = None ,
529+ atomic : Optional [bool ] = None ,
530+ ipv4 : Optional [bool ] = None ,
531+ ipv6 : Optional [bool ] = None ,
532+ progress : Optional [bool ] = None ,
533+ quiet : Optional [bool ] = None ,
534+ verbose : Optional [bool ] = None ,
535+ unshallow : Optional [bool ] = None ,
536+ update_shallow : Optional [bool ] = None ,
537+ negotiate_tip : Optional [bool ] = None ,
538+ no_write_fetch_head : Optional [bool ] = None ,
539+ write_fetch_head : Optional [bool ] = None ,
540+ no_auto_maintenance : Optional [bool ] = None ,
541+ auto_maintenance : Optional [bool ] = None ,
542+ no_write_commit_graph : Optional [bool ] = None ,
543+ write_commit_graph : Optional [bool ] = None ,
544+ prefetch : Optional [bool ] = None ,
545+ prune : Optional [bool ] = None ,
546+ prune_tags : Optional [bool ] = None ,
547+ no_tags : Optional [bool ] = None ,
548+ tags : Optional [bool ] = None ,
549+ no_recurse_submodules : Optional [bool ] = None ,
550+ set_upstream : Optional [bool ] = None ,
551+ update_head_ok : Optional [bool ] = None ,
552+ show_forced_updates : Optional [bool ] = None ,
553+ no_show_forced_updates : Optional [bool ] = None ,
554+ negotiate_only : Optional [bool ] = None ,
555+ ** kwargs ,
556+ ):
557+ """Download from repo. Wraps `git pull <https://git-scm.com/docs/git-pull>`_.
558+
559+ Examples
560+ --------
561+ >>> git = Git(dir=git_local_clone.dir)
562+ >>> git_remote_repo = create_git_remote_repo()
563+ >>> git.pull()
564+ 'Already up to date.'
565+ >>> git = Git(dir=git_local_clone.dir)
566+ >>> git_remote_repo = create_git_remote_repo()
567+ >>> git.pull(reftag=f'file://{git_remote_repo}')
568+ 'Already up to date.'
569+ >>> git.dir.exists()
570+ True
571+ """
572+ required_flags : list [str ] = []
573+ if repository :
574+ required_flags .insert (0 , repository )
575+ if reftag :
576+ required_flags .insert (0 , reftag )
577+ local_flags : list [str ] = []
578+
579+ #
580+ # Pull-related arguments
581+ #
582+ if rebase is not None :
583+ if isinstance (rebase , str ):
584+ local_flags .append (f"--rebase={ rebase } " )
585+ else :
586+ local_flags .append ("--rebase" )
587+ if no_rebase :
588+ local_flags .append ("--no-rebase" )
589+ if strategy is not None :
590+ if isinstance (strategy , str ):
591+ local_flags .append (f"--strategy={ strategy } " )
592+ else :
593+ local_flags .append ("--strategy" )
594+ if strategy_option is not None :
595+ local_flags .append (f"--strategy-option={ strategy_option } " )
596+ if gpg_sign is not None :
597+ if isinstance (gpg_sign , str ):
598+ local_flags .append (f"--gpg-sign={ gpg_sign } " )
599+ else :
600+ local_flags .append ("--gpg-sign" )
601+ if no_gpg_sign :
602+ local_flags .append ("--no-gpg-sign" )
603+ if cleanup :
604+ local_flags .append ("--cleanup" )
605+ if commit :
606+ local_flags .append ("--commit" )
607+ if no_commit :
608+ local_flags .append ("--no-commit" )
609+ if fast_forward :
610+ local_flags .append ("--fast-forward" )
611+ if fast_forward_only :
612+ local_flags .append ("--fast-forward-only" )
613+ if no_fast_forward :
614+ local_flags .append ("--no-fast-forward" )
615+ if edit :
616+ local_flags .append ("--edit" )
617+ if no_edit :
618+ local_flags .append ("--no-edit" )
619+ if sign_off :
620+ local_flags .append ("--sign_off" )
621+ if no_sign_off :
622+ local_flags .append ("--no-sign_off" )
623+ if stat :
624+ local_flags .append ("--stat" )
625+ if no_stat :
626+ local_flags .append ("--no-stat" )
627+ if squash :
628+ local_flags .append ("--squash" )
629+ if no_squash :
630+ local_flags .append ("--no-squash" )
631+ if verify :
632+ local_flags .append ("--verify" )
633+ if no_verify :
634+ local_flags .append ("--no-verify" )
635+ if verify_signatures :
636+ local_flags .append ("--verify-signatures" )
637+ if no_verify_signatures :
638+ local_flags .append ("--no-verify-signatures" )
639+ if summary :
640+ local_flags .append ("--summary" )
641+ if no_summary :
642+ local_flags .append ("--no-summary" )
643+ if autostash :
644+ local_flags .append ("--autostash" )
645+ if no_autostash :
646+ local_flags .append ("--no-autostash" )
647+ if allow_unrelated_histories :
648+ local_flags .append ("--allow-unrelated-histories" )
649+ #
650+ # Fetch-related arguments
651+ #
652+ if submodule_prefix is not None :
653+ local_flags .append (f"--submodule-prefix={ submodule_prefix } " )
654+ if (filter := kwargs .pop ("filter" , None )) is not None :
655+ local_flags .append (f"--filter={ filter } " )
656+ if depth is not None :
657+ local_flags .append (f"--depth { depth } " )
658+ if branch is not None :
659+ local_flags .append (f"--branch { branch } " )
660+ if origin is not None :
661+ local_flags .append (f"--origin { origin } " )
662+ if upload_pack is not None :
663+ local_flags .append (f"--upload-pack { upload_pack } " )
664+ if shallow_since is not None :
665+ local_flags .append (f"--shallow-since={ shallow_since } " )
666+ if shallow_exclude is not None :
667+ local_flags .append (f"--shallow-exclude={ shallow_exclude } " )
668+ if server_option is not None :
669+ local_flags .append (f"--server-option={ server_option } " )
670+ if jobs is not None :
671+ local_flags .append (f"--jobs { jobs } " )
672+ if keep :
673+ local_flags .append ("--keep" )
674+ if force :
675+ local_flags .append ("--force" )
676+ if multiple :
677+ local_flags .append ("--multiple" )
678+ if quiet :
679+ local_flags .append ("--quiet" )
680+ if progress :
681+ local_flags .append ("--progress" )
682+ if verbose :
683+ local_flags .append ("--verbose" )
684+ if all :
685+ local_flags .append ("--all" )
686+ if atomic :
687+ local_flags .append ("--atomic" )
688+ if unshallow :
689+ local_flags .append ("--unshallow" )
690+ if append :
691+ local_flags .append ("--append" )
692+ if update_shallow :
693+ local_flags .append ("--update-shallow" )
694+ if dry_run :
695+ local_flags .append ("--dry-run" )
696+ if no_write_fetch_head :
697+ local_flags .append ("--no-write-fetch-head" )
698+ if write_fetch_head :
699+ local_flags .append ("--write-fetch-head" )
700+ if auto_maintenance :
701+ local_flags .append ("--auto-maintenance" )
702+ if no_auto_maintenance :
703+ local_flags .append ("--no-auto-maintenance" )
704+ if write_commit_graph :
705+ local_flags .append ("--write-commit-graph" )
706+ if no_write_commit_graph :
707+ local_flags .append ("--no-write-commit-graph" )
708+ if prefetch :
709+ local_flags .append ("--prefetch" )
710+ if prune :
711+ local_flags .append ("--prune" )
712+ if prune_tags :
713+ local_flags .append ("--prune-tags" )
714+ if tags :
715+ local_flags .append ("--tags" )
716+ if no_tags :
717+ local_flags .append ("--no-tags" )
718+ if no_recurse_submodules :
719+ local_flags .append ("--no-recurse-submodules" )
720+ if set_upstream :
721+ local_flags .append ("--set-upstream" )
722+ if update_head_ok :
723+ local_flags .append ("--update-head-ok" )
724+ if show_forced_updates :
725+ local_flags .append ("--show-forced-updates" )
726+ if no_show_forced_updates :
727+ local_flags .append ("--no-show-forced-updates" )
728+ if negotiate_only :
729+ local_flags .append ("--negotiate-only" )
730+ return self .run (
731+ ["pull" , * local_flags , "--" , * required_flags ], check_returncode = False
732+ )
0 commit comments