@@ -457,3 +457,276 @@ def fetch(
457
457
return self .run (
458
458
["fetch" , * local_flags , "--" , * required_flags ], check_returncode = False
459
459
)
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