ņr ddlZddlZddlmZmZddlmZmZddlm Z ddl m Z m Z m Z mZmZddl mZddlmZmZmZddlmZmZmZmZmZdd lmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(dd l)m*Z*m+Z+m,Z,e$r dd l-m.Z.dd l/m0Z0e+d Z1ej2dZ3e34ej5dZ6dedede&ededefdfdefdZ7e(dddefdZ8e(dedefdefdZ8e(dedefdZ8de&edefedfde&eeffdZ8Gdde e9Z:Gdde e:Z;Gdd e e9Z<Gd!d"e e Z=dS)#N)handle_process_outputGit)defenc force_text)GitCommandError) LazyMixin IterableObj IterableListRemoteProgressCallableRemoteProgress) join_path)GitConfigParserSectionConstraintcp)Head ReferenceRemoteReferenceSymbolicReference TagReference) AnyCallableDictIteratorListNoReturnOptionalSequence TYPE_CHECKINGTypeUnioncastoverload)PathLikeLiteral Commit_ish)Repo)UpdateProgress) !+-*=t?z git.remote)r PushInfo FetchInfoRemotekwargsgitprogressr'.returnc>||jdd}|dkrd|d<|S)zAdd the --progress flag to the given kwargs dict if supported by the git command. If the actual progress in the given progress instance is not given, we do not request any progress :return: possibly altered kwargsN)Tr5) version_info)r3r4r5vs /srv/buildsys-work-dir/castor/build_node/builder-2/WGSG1/unpkd_srcs/cloudlinux-venv-1.0.6/venv/lib/python3.11/site-packages/git/remote.py add_progressr>Ms5  RaR  ;;!%F:  McdSNr5s r=to_progress_instancerDbCr?cdSrArBrCs r=rDrDgrEr?cdSrArBrCs r=rDrDlrEr?cbt|rt|S|tS|S)zUGiven the 'progress' return a suitable object derived from RemoteProgress(). )callabler r rCs r=rDrDqs= %h///   Or?c^eZdZdZdZdZdedD\ ZZZ Z Z Z Z ZZZZe e deeeedZ dd ed eedfd ed ddeededdfdZedeeeedffdZedeeeffdZed ddeddfdZ eddde!de!de"fdZ#dS)r0ah Carries information about the result of a push operation of a single head:: info = remote.push()[0] info.flags # bitflags providing more information about the result info.local_ref # Reference pointing to the local reference that was pushed # It is None if the ref was deleted. info.remote_ref_string # path to the remote reference located on the remote side info.remote_ref # Remote Reference on the local side corresponding to # the remote_ref_string. It can be a TagReference as well. info.old_commit # commit at which the remote_ref was standing before we pushed # it to local_ref.commit. Will be None if an error was indicated info.summary # summary line providing human readable english text about the push ) local_refremote_ref_stringflags_old_commit_sha_remotesummarypushinfocg|]}d|zSr9rB.0xs r= zPushInfo.s###Aa###r? r)Xr+r,r*r(r-r)NrMrKrLremoter2 old_commitrPr6cZ||_||_||_||_||_||_dS)zInitialize a new instance local_ref: HEAD | Head | RemoteReference | TagReference | Reference | SymbolicReference | NoneN)rMrKrLrOrNrP)selfrMrKrLr[r\rPs r=__init__zPushInfo.__init__s4 "!2 ) r?c\|jr$|jj|jpdSrA)rNrOrepocommitr^s r=r\zPushInfo.old_commits,#V (9(@(@AU(V(V^Z^^r?c|jdrt|jj|jS|jdrVt |jj|j}t |jjdt|jd|jStd|jz)z :return: Remote Reference or TagReference in the local repository corresponding to the remote_ref_string kept in this instance.z refs/tagsz refs/headsz refs/remotes//zCould not handle remote ref: %r) rL startswithrrOrarrstrname ValueError)r^ remote_refs r=rjzPushInfo.remote_refs  ! , ,[ 9 9 Y 143IJJ J  # . .| < < Y"4<#4d6LMMJ" !!(+DL(9(9(9(9:??K  >AWWXX Xr?linec|dd\}}}d} ||j|z}n(#t$r}td|d||d}~wwxYw|d\}} ||jzrd} n#|dkrd} nt j|j|} d} |d rZd |vr ||j z}nd |vr ||j z}nyd |vr ||j z}njd |vr ||j z}n[d|vr ||j z}nLd|vr ||jz}n=d} |dkrd} |dd| \} }| } t|| | || |S)zCreate a new PushInfo instance as parsed from line which is expected to be like refs/heads/master:refs/heads/master 05d2687..1d0568e as bytes rControl character  unknown as parsed from line N:z(delete)[z [rejected]z[remote rejected]z[remote failure]z [no match]z [new tag]z [new branch]...r(..)split _flag_mapKeyErrorriDELETEDr from_pathrarfREJECTEDREMOTE_REJECTEDREMOTE_FAILUREERRORNEW_TAGNEW_HEADr0)clsr[rkcontrol_characterfrom_torPrMefrom_ref_string to_ref_stringfrom_refr\ split_tokenold_sha_new_shas r= _from_linezPushInfo._from_lines/3jjq.A.A+7G w S]#45 5EE w w w*VgVgVgimimnoouv v w *1s););& 3;  M7;HH*,,$.v{OLL%)   c " " !w&&%$//,,#w..++(("''$7**%  K C''" ' c 2 21 5 ; ;K H H GX Jx GTTTs/ AAArar&argsr3ctrANotImplementedErrorrrarr3s r= iter_itemszPushInfo.iter_items!!r?)NrZ)$__name__ __module__ __qualname____doc__ __slots___id_attribute_ranger~rNO_MATCHrzr{r|rx FORCED_UPDATE FAST_FORWARD UP_TO_DATEr}rvintr rrgrr_propertyr%r\rrrj classmethodrrrrrBr?r=r0r0s  I N $#r###        I %)*D01    SM  $_E#'8*d"JK___X_YE/<"?@YYYXY$2U2U2U 2U2U2U[2Uh"f"S"C"H"""["""r?r0c4eZdZdZddZdfd ZddZxZS) PushInfoListz+ IterableList of PushInfo objects. r6cRtttj|dSN push_infos)r!rr __new__rs r=rzPushInfoList.__new__sL,"6sL"I"IJJJr?NcXtdd|_dSr)superr_error)r^ __class__s r=r_zPushInfoList.__init__ s& &&&*. r?c"|jr|jdS)z? Raise an exception if any ref failed to push. N)rrcs r=raise_if_errorzPushInfoList.raise_if_error$s  : *   r?)r6rr6N)rrrrrr_r __classcell__rs@r=rrssKKKK//////r?rc eZdZUdZdZdZdedD\ZZZ Z Z Z Z ZejdZee de e e dZeeefed <ed ed fd Z d dedededeedfdeed df dZ d efdZ!e"d efdZ#e"d efdZ$edddeded dfdZ%eddde&de&d e'fdZ(dS)!r1a* Carries information about the results of a fetch operation of a single head:: info = remote.fetch()[0] info.ref # Symbolic Reference or RemoteReference to the changed # remote head or FETCH_HEAD info.flags # additional flags to be & with enumeration members, # i.e. info.flags & info.REJECTED # is 0 if ref is SymbolicReference info.note # additional notes given by git-fetch intended for the user info.old_commit # if info.flags & info.FORCED_UPDATE|info.FAST_FORWARD, # field is set to the previous location of ref, otherwise None info.remote_ref_path # The path from which we fetched on the remote. It's the remote's version of our info.ref )refr\rMnoteremote_ref_path fetchinfocg|]}d|zSrSrBrTs r=rWzFetchInfo.Is"""Aa"""r?zE^\s*(.) (\[[\w\s\.$@]+\]|[\w\.$@]+)\s+(.+) -> ([^\s]+)( \(.*\)?$)?r)r)r*r,r-r(r+rvr6Tc |jd=n#t$rYnwxYw |jd=n#t$rYnwxYwtjdddkr|j|jd<n|j|jd<dS)zWThis gets called by the refresh function (see the top level __init__). r.r+Nr8)r8 T)rvrwrr; TAG_UPDATErs r=refreshzFetchInfo.refreshVs   c""    D   c""    D  55 bqb !W , ,!$CM#  !$CM# ts % 22rZNrrMrr\rcL||_||_||_||_||_dS)z+ Initialize a new instance N)rrMrr\r)r^rrMrr\rs r=r_zFetchInfo.__init__ns.  $.r?c|jSrArhrcs r=__str__zFetchInfo.__str__ yr?c|jjS)z:return: Name of our remote ref)rrhrcs r=rhzFetchInfo.namesx}r?c|jjS)z!:return: Commit of our remote ref)rrbrcs r=rbzFetchInfo.commitsxr?rar&rk fetch_linect|j|}|td|z|\}}}}} t t |} |d\} } } | dd\} } n%#t$r}td|z|d}~wwxYwd} ||j|z}n(#t$r}td|d ||d}~wwxYwd}d }d |vr ||j z}d |vr ||j z}d }d|vr ||j z}d }d|vr ||j z}d|vsd|vr@d}|dkr |dd}| ||d}d}|dkrt}n:| dks|rt}n*| dvrt }nd| vrt"}nt%d| z|tur ||d}nd}|}|t*jdzr5|}|tur)|t jdzst*}n=|turd|vrt/t j|}nt/|j|}|||d }| r| pd} |||| ||S)aParse information from the given line as returned by git-fetch -v and return a new FetchInfo object representing this information. We can handle a line as follows: "%c %-\*s %-\*s -> %s%s" Where c is either ' ', !, +, -, \*, or = ! means error + means success forcing update - means a tag was updated * means birth of new branch or tag = means the head was up to date ( and not moved ) ' ' means a fast-forward fetch line is the corresponding line from FETCH_HEAD, like acb0fa8b94ef421ad60c8507b634759a472cd56c not-for-merge branch '0.1.7RC' of /tmp/tmpya0vairemote_repoNzFailed to parse line: %rrmr(r9z#Failed to parse FETCH_HEAD line: %rrrorpFrejectedznew tagTz tag updatez new branchrsrt FETCH_HEADtag)zremote-trackingbranchrez Cannot handle reference type: %rztags/) check_pathrZ)_re_fetch_resultmatchrigroupsr!flagKeyLiteralrurvrwrzr~rr rev_parserrrr TypeErrorstriprfr_common_path_defaultr )rrarkrrr operationlocal_remote_refremote_local_ref_strr _new_hex_sha_fetch_operation fetch_note ref_type_namerrMr\is_tag_operationrref_typeremote_local_refref_paths r=rzFetchInfo._from_lines$$**400 =7$>?? ? LLNN     !1BCC X9C9I9I$9O9O 6L*J(2(8(8a(@(@ %M:: X X XBZOPPVW W X w S]#45 5EE w w w*VgVgVgimimnoouv v w /3    " " S\ !E  ! ! S[ E#  9 $ $ S^ #E#  9 $ $ S\ !E I  !2!2K C'')#2#.   (D(DQ(GHHJ7; < / /(HH e # #'7 #$HH ; ; ;'HH M ! !HH>NOO O ( ( ('xl;;  ,0H#7#=#=#?#? #..y/MPS/STT Z0<//8L8W8W#83>99/ )H\))g9M.M.M$_%IK_``$X%BDXYY (xh5III %,"s#UD*>NOOOs02B B4B//B4:C C0C++C0rr3ctrArrs r=rzFetchInfo.iter_items rr?)rZNN))rrrrrrrr~r HEAD_UPTODATErrzrrr}recompilerrvrrr__annotations__rr$rrrgr r%rr#r_rrrhrbrrrrrBr?r=r1r1,s?  JI N #"q"""  "rz"jkk      ,,ItNC'( [6.2.2 // // / *d*+ / "(+ / ////"cX X}Pf}PC}PS}P[}P}P}P[}P~"f"S"C"H"""["""r?r1ceZdZdZdZdZdgZdgZddgZddde d d fd Z d e d e ffd Z d e fdZ d e d d ffd Zd e fdZd e fdZded efdZded efdZd efdZd efdZeddde de d edfdZ d?de dee dede d df dZd@de dede d dfd Zde de d dfd!Zed ee fd"Z ed e!e"fd#Z#ed e!e$fd$Z%ed@ddde de dede d df d%Z&eddde de de d df d&Z'eddde d e fd'Z(e(Z)d(e d dfd)Z*de d dfd*Z+ dAd+d,d-e,e-d.e fe.d fd/e,d e/fd e!d0fd1Z0 dAd+d,d-e,e-d.e fe.d fd/e,d e/fd e1fd2Z2dBd3Z3 dCd5e,e e4e d fd-e,e.d d6fd7ed/e,d e/fded8ede d e!e5fd9Z6 dDd5e,e e4e d fd-e,e.d6d fd/e,d e/fded8ede d e!e5fd:Z7 dDd5e,e e4e d fd-e,e.d6e-d.e.fd fd/e,d e/fded8ede d e1fd;Z8ed e9e:fd<Z;dBd=ZZ=xZ>S)Er2aHProvides easy read and write access to a git remote. Everything not part of this interface is considered an option for the current remote, allowing constructs like remote.pushurl to query the pushurl. NOTE: When querying configuration, the configuration accessor will be cached to speed up subsequent accesses.)rarh_config_readerrhz --upload-packz--receive-packz--execrar&r6Nc&||_||_|dS)zInitialize a remote instance :param repo: The repository we are a remote of :param name: the name of the remote, i.e. 'origin'N)rarh)r^rarhs r=r_zRemote.__init__/s    r?attrc|dkr(tt||S |j|S#t j$r+tt||cYSwxYw)zrAllows to call this instance like remote.special( \*args, \*\*kwargs) to call git-remote special self.namer)rr2 __getattr__rgetr NoOptionErrorr^rrs r=rzRemote.__getattr__8s # # #&&22488 8 9&**400 0 9 9 9&&22488 8 8 8 9sA 7BBcd|jzS)Nz remote "%s"rrcs r=_config_section_namezRemote._config_section_nameFsty((r?c|dkrAt|jd||_dSt t ||dS)Nr repository)rra config_readerrrrr2 _set_cache_rs r=rzRemote._set_cache_Isj # # ##4DI4K4KL4Y4Y[_[t[t[v[v"w"wD    &$   + +D 1 1 1 1 1r?c|jSrArrcs r=rzRemote.__str__Qrr?c2d|jjd|jdS)Nz)rrrhrcs r=__repr__zRemote.__repr__Ts "&."9"9"94999EEr?otherc\t|t|o|j|jkSrA) isinstancetyperhr^rs r=__eq__z Remote.__eq__Ws&%d,,Hej1HHr?c||k SrArBrs r=__ne__z Remote.__ne__ZsEM""r?c*t|jSrA)hashrhrcs r=__hash__zRemote.__hash__]sDIr?c |jddS#tj$rYdStj$rYdSwxYw)z :return: True if this is a valid, existing remote. Valid remotes have an entry in the repository's configurationurlTF)rrrrNoSectionErrorrcs r=existsz Remote.exists`sd    " "5 ) ) )4   44    55 sAAArr3c/TK|dD]}}|ds|d}|d}|dks|dkrt d|zt |||dz|V~dS)zA:return: Iterator yielding Remote objects of the given repositoryrzremote "rz%Remote-Section has invalid format: %rr9N)rsectionsrffindrfindrir2)rrarr3sectionlboundrbounds r=rzRemote.iter_itemsns)),77@@BB = =G%%i00 \\#&&F]]3''F||v|| !H7!RSSSwvzF':;<< < < < < = =r?Fnew_urlold_urlallow_unsafe_protocolsc |stj|d}||d<|r"|jjj|d|j||fi|n |jjj|d|j|fi||S)aConfigure URLs on current remote (cf command git remote set_url) This command manages URLs on the remote. :param new_url: string being the URL to add as an extra remote URL :param old_url: when set, replaces this URL with new_url for the remote :param allow_unsafe_protocols: Allow unsafe protocols to be used, like ext :return: self zset-urlinsert_kwargs_after--)rcheck_unsafe_protocolsrar4r[rh)r^r r r r3scmds r=set_urlzRemote.set_url{s& 0  &w / / /(,$%  K DIM tTY S SF S S S S DIM tTY J J6 J J J r?rc 2||d|S)a|Adds a new url on current remote (special case of git remote set_url) This command adds new URLs to a given remote, making it possible to have multiple URLs for a single remote. :param url: string being the URL to add as an extra remote URL :param allow_unsafe_protocols: Allow unsafe protocols to be used, like ext :return: self T)addr r)r^rr r3s r=add_urlzRemote.add_urls||CTBX|YYYr?c 0||dS)a+Deletes a new url on current remote (special case of git remote set_url) This command deletes new URLs to a given remote, making it possible to have multiple URLs for a single remote. :param url: string being the URL to delete from the remote :return: self T)deleter)r^rr3s r= delete_urlzRemote.delete_urls||C|---r?c#4K |jjdd|j}t |t sJ|dD]}|Vd S#t$r,}dt |vr |jjd|j}t |t sJ|dD]#}d|vr|ddV$n#t$rtfd d Dr\|jj d d |jz}t |t sJ|dD]}|VnYd nd wwxYw|Yd }~d SYd }~d Sd }~wwxYw)zL:return: Iterator yielding all configured URL targets on a remote as stringszget-urlz--all zUnknown subcommand: get-urlshowz Push URL:z: rc3:K|]}|tvVdSrA)rg)rUmsg_exs r= zRemote.urls..s-bbs3#c((?bbbbbbr?)zcorrect access rightszcannot run sshz --get-allz remote.%s.urlN) rar4r[rhrrgruranyconfig)r^remote_detailsrkexr s @r=urlsz Remote.urlss3 !Y]11)WdiPPNnc22 2 22&,,T22         -B77"%)Y]%9%9&$)%L%LN%nc::::: . 4 4T : :77)T11"&**T"2"22"66667'"""bbbb6abbbbb")-)=)=k?]a]fKf)g)g).#>>>>>$2$8$8$>$>''D"&JJJJ'" ''''' "777777''''''% sDAA F+F>A5C43F4 F>A9E<7F<FFFcttjd|jz}|tj|j|j|S)z :return: IterableList of RemoteReference objects. It is prefixed, allowing you to omit the remote path portion, i.e.:: remote.refs.master # yields RemoteReference('/refs/remotes/origin/master')%s/)r[)r rrrhextend list_itemsra)r^out_refss r=refsz Remote.refssK3??]_dgkgp_p2q2q249TYOOOPPPr?c4ttjd|jz}|jjdd|ddD]}d}||s| |d}|tj dzr.| tj |j|tj d|}| t|j||S) a :return: IterableList RemoteReference objects that do not have a corresponding head in the remote reference anymore as they have been deleted on the remote side, but are still available locally. The IterableList is prefixed, hence the 'origin' must be omitted. See 'refs' property for an example. To make things more complicated, it can be possible for the list to include other kinds of references, for example, tag references, if these are stale as well. This is a fix for the issue described here: https://github.com/gitpython-developers/GitPython/issues/260 r(prunez --dry-runr8Nz * [would prune] rZre)r rrrhrar4r[ splitlinesrfreplacerrappendry)r^r+rktokenref_namefqhns r= stale_refszRemote.stale_refss -99WY^aeajYj,k,kIM((+tDDOOQQRSRTRTU B BD(E??5)) ||E2..H""9#AC#GHH B 3DIx H HIIII"1"F"F"FQ 4 @ @AAAAr?c d}||d<tj|}|stj||jj|d||fi||||S)aCreate a new remote to the given repository :param repo: Repository instance that is to receive the new remote :param name: Desired name of the remote :param url: URL which corresponds to the remote's name :param allow_unsafe_protocols: Allow unsafe protocols to be used, like ext :param kwargs: Additional arguments to be passed to the git-remote add command :return: New Remote instance :raise GitCommandError: in case an origin with that name already existsrrr)r polish_urlrr4r[)rrarhrr r3rs r=createz Remote.createsn(,$%nS!!% ,  &s + + +dD#88888s4r?c "|j|||fi|SrA)r8)rrarhrr3s r=rz Remote.add s sz$c44V444r?c|jd|t||r||S)zaRemove the remote with the given name :return: the passed remote name to remove rm)r4r[r _clear_cache)rrarhs r=removez Remote.removesC d### dC        r?new_namec|j|kr|S|jjd|j|||_||S)z8Rename self to the given new_name :return: selfrename)rhrar4r[r<)r^r>s r=r@z Remote.renamesR 9 K Xty(;;;   r?c Pd}||d<|jjj||jfi||S)a(Fetch all changes for this remote, including new branches which will be forced in ( in case your local remote branch is not part the new remote branches ancestry anymore ). :param kwargs: Additional arguments passed to git-remote update :return: selfupdater)rar4r[rh)r^r3rs r=rBz Remote.update)s<(,$% T4977777 r?proczGit.AutoInterruptr5.kill_after_timeoutr1c8t|}td}g}ttj}|}t|d|dd||jrd |jpd}| ||rt d||j D]W} t| } |D]C} t| dkr.| d d kr"| d| kr|| CDXt#|jd } t'| jd 5} d | D} dddn #1swxYwYt|}t| }||krd}|dz }|dz }|||fz}t|tdt/|dztdt/| dz||kr | d|} n |d|}t3|| D]\}} |t|j||;#t6$rR}td|t d|Yd}~d}~wwxYw|S)NrhF finalizerdecode_streamsrDrrZstderr'Error lines received while fetching: %sr9rr(rrbcBg|]}|tSrB)decoder)rUrks r=rWz6Remote._get_fetch_info_from_stderr..ds$NNNtt{{622NNNr?zFFetch head lines do not match lines provided via progress information zKlength of progress lines %i should be equal to lines in FETCH_HEAD file %i z5Will ignore extra progress lines or fetch head lines.s info lines: zUTF-8s head info: z#Caught error while parsing line: %szGit informed while fetching: %s)rDr setr1rvkeysnew_message_handlerr error_linesjoinwaitlogwarning other_linesrlenr1rraopenabspath readlinesdebugrgencodeziprrir)r^rCr5rDoutputfetch_info_linescmdsprogress_handler stderr_textrkcmd fetch_headfpfetch_head_infol_fill_fhirerr_linerexcs r=_get_fetch_info_from_stderrz"Remote._get_fetch_info_from_stderr7s(11-9,@,@ 9&++--..#7799    1     *Ntyy9M/N/NTRT   %%%  P KKA; O O O(  Dd##D  t99q==T!W^^Q3$++D111  'ty,?? *$d + + OrNNr||~~NNNO O O O O O O O O O O O O O O O$%%O$$ E>>[C a aC J JC E5> !C IIcNNN IIo,<(=(=(D(DW(M(MM N N N IIns?';';'B'B7'K'KK L L Lu}}"1&5&"9#3FUF#; %((8/$J$J Q Q Hj Q i2249h SSTTTT Q Q Q ?EEE =x~~?O?OPPPPPPPP Q s+E??FF4J;; LALLct|}|}tdtddffd }t |||dd||jrd|jpd} ||n>#t$r1}s|r"t d ||_ Yd}~nd}~wwxYwS) Nrkr6c t|dS#t$rYdSwxYwrA)r1r0rri)rkr_r^s r=stdout_handlerz-Remote._get_push_info..stdout_handlersR  h11$==>>>>>    s.3 AAFrFrrZrIrK) rDrQrrgrrRrSrT ExceptionrUrVr) r^rCr5rDrbrorcrr_s ` @r=_get_push_infozRemote._get_push_infos( (11 $7799+~~              1     *Ntyy9M/N/NTRT  ! II[I ) ) ) ) ! ! ! ! ! E{SSS   ! s=B C'C  Cc|j}d} |d||ur*d}|dz }|dz }t||j|jfz |dS#|wxYw)z>Turns out we can't deal with remotes if the refspec is missing placeholderfetch)defaultz Remote '%s' has no refspec set. zYou can set it as follows:zA 'git config --add "remote.%s.fetch +refs/heads/*:refs/heads/*"'.N)r get_valueAssertionErrorrhrelease)r^r#unsetrs r=_assert_refspeczRemote._assert_refspecs# 775@@933\\$SDIty+A%ABBB A NN     FNN    s AA%%A;Trefspecr'verboseallow_unsafe_optionsc 2||t||jj|}t |t r|}n|g}|s|D]} | rt j| |s:t jt | |j |jjj d|g|Rddd|d|} | | ||} t|jjdr|jj| S) aFetch the latest changes for this remote :param refspec: A "refspec" is used by fetch and push to describe the mapping between remote ref and local ref. They are combined with a colon in the format :, preceded by an optional plus sign, +. For example: git fetch $URL refs/heads/master:refs/heads/origin means "grab the master branch head from the $URL and store it as my origin branch head". And git push $URL refs/heads/master:refs/heads/to-upstream means "publish my master branch head as to-upstream branch at $URL". See also git-push(1). Taken from the git manual Fetch supports multiple refspecs (as the underlying git-fetch does) - supplying a list rather than a string for 'refspec' will make use of this facility. :param progress: See 'push' method :param verbose: Boolean for verbose output :param kill_after_timeout: To specify a timeout in seconds for the git command, after which the process should be killed. It is set to None by default. :param allow_unsafe_protocols: Allow unsafe protocols to be used, like ext :param allow_unsafe_options: Allow unsafe options to be used, like --upload-pack :param kwargs: Additional arguments to be passed to git-fetch :return: IterableList(FetchInfo, ...) list of FetchInfo instances providing detailed information about the fetch results :note: As fetch does not provide progress information to non-ttys, we cannot make it available here unfortunately as in the 'push' method.Noptionsunsafe_optionsrTF) as_process with_stdoutuniversal_newlinesr<rD update_cache)rzr>rar4rlistrrcheck_unsafe_optionsrPunsafe_git_fetch_optionsrtrlhasattrodbr) r^r{r5r|rDr r}r3rrrCress r=rtz Remote.fetchsJT ?  " " "fdimX>> gt $ $ ,3DD9D% 4 4 44.s333# p  $T&++---@-@QUQn o o o o"ty}" $   *.EVZ^e  io  ..tXRd.ee 49=. 1 1 ) IM & & ( ( ( r?c ||t||jj|}t j|pg}|s|D]}t j||s:t jt| |j |jjj d||fddddd|}| |||} t|jjdr|jj| S) a<Pull changes from the given branch, being the same as a fetch followed by a merge of branch with your local branch. :param refspec: see :meth:`fetch` method :param progress: see :meth:`push` method :param kill_after_timeout: see :meth:`fetch` method :param allow_unsafe_protocols: Allow unsafe protocols to be used, like ext :param allow_unsafe_options: Allow unsafe options to be used, like --upload-pack :param kwargs: Additional arguments to be passed to git-pull :return: Please see :meth:`fetch` methodNrrFT)rrrr<rr)rzr>rar4r _unpack_argsrrrrPunsafe_git_pull_optionspullrlrrr) r^r{r5rDr r}r3rrCrs r=rz Remote.pulls,& ?  " " "fdimX>>"7=b11% 0 0 0*3////# o  $T&++---@-@QUQm n n n n!ty}! $ -2tX\`d  hn  ..tXRd.ee 49=. 1 1 ) IM & & ( ( ( r?c t||jj|}tj|pg}|s|D]}tj||s:tjt||j |jjj d||fddd|d|}| |||S)aoPush changes from source branch in refspec to target branch in refspec. :param refspec: see 'fetch' method :param progress: Can take one of many value types: * None to discard progress information * A function (callable) that is called with the progress information. Signature: ``progress(op_code, cur_count, max_count=None, message='')``. `Click here `__ for a description of all arguments given to the function. * An instance of a class derived from ``git.RemoteProgress`` that overrides the ``update()`` function. :note: No further progress information is returned after push returns. :param kill_after_timeout: To specify a timeout in seconds for the git command, after which the process should be killed. It is set to None by default. :param allow_unsafe_protocols: Allow unsafe protocols to be used, like ext :param allow_unsafe_options: Allow unsafe options to be used, like --receive-pack :param kwargs: Additional arguments to be passed to git-push :return: A ``PushInfoList`` object, where each list member represents an individual head which had been updated on the remote side. If the push contains rejected heads, these will have the PushInfo.ERROR bit set in their flags. If the operation fails completely, the length of the returned PushInfoList will be 0. Call ``.raise_if_error()`` on the returned object to raise on any failure.rrT) porcelainrrrDr) r>rar4rrrrrrPunsafe_git_push_optionspushrq) r^r{r5rDr r}r3rrCs r=rz Remote.push$sLfdimX>>"7=b11% 0 0 0*3////# o  $T&++---@-@QUQm n n n n!ty}!     #1      ""4FX"YYYr?c|jS)z :return: GitConfigParser compatible object able to read options for only our remote. Hence you may simple type config.get("pushurl") to obtain the information)rrcs r=rzRemote.config_reader`s ""r?c. |`dS#t$rYdSwxYwrA)rAttributeErrorrcs r=r<zRemote._clear_cachehs5 ###    DD s  c|j}|t||S)a :return: GitConfigParser compatible object able to write options for this remote. :note: You can only own one writer at a time - delete it to release the configuration file and make it usable by others. To assure consistent results, you should only query options through the writer. Once you are done writing, you are free to use the config reader once again.)ra config_writerr<rr)r^writers r=rzRemote.config_writerosG((**  )B)B)D)DEEEr?)NF)FrAr)NNTNFF)NNNFF)?rrrrrrrrrrgr_rrrrrrobjectboolrrrrrrrrrrrrrr&r rr,rr5r8rr=r;r@rBr rr floatrlrrqrzrr1rtrrrrrr<rrrs@r=r2r2s((3IN     V34 9 9 9 9 9 9 9 9)c))))22222222F#FFFFIFItIIII#F#t#####      =f =S =C =HXDV = = =[ =[`%-c]SWkn , Z Z3 Z ZPS ZX` Z Z Z Z .c .S .X . . . .hsmX@l?3XL3XB&#tgjow[&5v5S5s5c5h555[5&[ B s x     s x    $26 FF!Fc*ND@AF"$+. F k " FFFFX26 **!*c*ND@A*"$+. *  ****X    04BF15',%*BBsDIt+,B.>>?B B "$+. B !% B#BB i BBBBL04BF15',%* &&sDIt+,&(8$>?&"$+. & !% & # && i &&&&T04ae15',%* :Z:ZsDIt+,:Z(8(3CV:WY]]^:Z"$+. :Z !% :Z # :Z:Z :Z:Z:Z:Zx#0A###X#F0FFFXFFFFFr?r2)>loggingrgit.cmdrr git.compatrrgit.excrgit.utilrr r r r r git.configrrrgit.refsrrrrrtypingrrrrrrrrrrr r!r" git.typesr#r$r% git.repo.baser&git.objects.submodule.baser'r getLoggerrU addHandler NullHandler__all__r>rDrr0rr1r2rBr?r=rsT ........))))))))###### WVVVVVVVVVVVVV 4333333333:""""""999999 ?@g %%"w"$$%%% @   N$4hsN?R6SUYYZ * 4N  8CH#5:P  >n HS#X&<= >1 12$R"R"R"R"R"{FR"R"R"j<)(b"b"b"b"b" Vb"b"b"Jm Fm Fm Fm Fm FY m Fm Fm Fm Fm Fr?