Ë
    ùmxiÛ5  ã                  óˆ  — d Z ddlmZ g d¢ZddlZddlmZ ddlm	Z	 ddl
Z
ddlmZ ddlmZmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZmZmZ ddlmZmZmZm Z m!Z! ddl"m#Z#m$Z$m%Z% er ddl&m'Z' ddlm(Z(m)Z) ddl*m+Z+ ddl,m-Z- ddl.m/Z/ d d„Z0d!d„Z1d"d„Z2d#d„Z3d$d„Z4e!d%d&d„«       Z5e!d'd„«       Z5d(d)d„Z5d*d„Z6d+d„Z7d,d„Z8y)-z%General repository-related functions.é    )Úannotations)	Ú	rev_parseÚ
is_git_dirÚtouchÚfind_submodule_git_dirÚname_to_objectÚshort_to_longÚ	deref_tagÚ	to_commitÚfind_worktree_git_dirN)ÚPath)Údigits)ÚBadNameÚ	BadObject)ÚGit)ÚWorkTreeRepositoryUnsupported)ÚObject)ÚSymbolicReference)ÚcygpathÚ
bin_to_hexÚ
hex_to_bin)ÚOptionalÚTYPE_CHECKINGÚUnionÚcastÚoverload)ÚAnyGitObjectÚLiteralÚPathLike)ÚGitCmdObjectDB)ÚCommitÚ	TagObject)Ú	Reference)ÚTagé   )ÚRepoc                óL   — t        | d«      5  	 d d d «       | S # 1 sw Y   | S xY w)NÚab)Úopen)Úfilenames    úC/home/htdocs/ttos/venv/lib/python3.12/site-packages/git/repo/fun.pyr   r   3   s)   € Ü	ˆh˜Ó	ñ Ø÷à€O÷à€Oús   �™#c                óÔ  — t        j                  | «      �rRt        j                  t        j                  | d«      «      sdt        j                  v r‘t        j                  t        j                  | d«      «      rht        j                  | d«      }t        j
                  |«      xs; t        j                  |«      xr$ t        j                  |«      j                  d«      S t        j
                  t        j                  | d«      «      r]t        j
                  t        j                  | d«      «      r4t        j
                  t        j                  | d«      «      rt        | «      ‚y)	ax  This is taken from the git setup.c:is_git_directory function.

    :raise git.exc.WorkTreeRepositoryUnsupported:
        If it sees a worktree directory. It's quite hacky to do that here, but at least
        clearly indicates that we don't support it. There is the unlikely danger to
        throw if we see directories which just look like a worktree dir, but are none.
    ÚobjectsÚGIT_OBJECT_DIRECTORYÚrefsÚHEADÚgitdirÚ	commondirÚgitfileF)
ÚospÚisdirÚjoinÚosÚenvironÚisfileÚislinkÚreadlinkÚ
startswithr   )ÚdÚheadrefs     r+   r   r   9   së   € ô ‡y�y�…|Ü�I‰I”c—h‘h˜q )Ó,Ô-Ð1GÌ2Ï:É:Ñ1UÔ[^×[dÑ[dÜ�H‰H�Q˜Óô\
ô —h‘h˜q &Ó)ˆGÜ—:‘:˜gÓ&Òk¬3¯:©:°gÓ+>Ò+jÄ2Ç;Á;ÈwÓCW×CbÑCbÐciÓCjÐkä�J‰J”s—x‘x  8Ó,Ô-Ü—
‘
œ3Ÿ8™8 A {Ó3Ô4Ü—
‘
œ3Ÿ8™8 A yÓ1Ô2ä/°Ó2Ð2Øó    c                ó„  — 	 t        j                  | «      }t        j                  |j                  «      sy	 t        | «      j                  «       j                  «       }|D �cg c]!  }|j                  «       j                  d«      ‘Œ# c}D ]  \  }}|dk(  sŒ|c S  	 y# t        $ r Y yw xY wc c}w # t        $ r Y yw xY w)z&Search for a gitdir for this worktree.Nz: r1   )r7   ÚstatÚOSErrorÚS_ISREGÚst_moder   Ú	read_textÚ
splitlinesÚstripÚsplitÚ
ValueError)ÚdotgitÚstatbufÚlinesÚlineÚkeyÚvalues         r+   r   r   P   s¹   € ðÜ—'‘'˜&“/ˆô �<‰<˜Ÿ™Ô(ØðÜ�V“×&Ñ&Ó(×3Ñ3Ó5ˆØ@EÖF¸˜4Ÿ:™:›<×-Ñ-¨dÕ3ÒFò 	‰JˆC�Ø�h‹Ø’ñ	ð
 øô ò Ùðüò Gøô ò ØØðús@   ‚B ¸+B3 Á#&B.Â	B3 ÂB3 ÂB3 Â	B+Â*B+Â.B3 Â3	B?Â>B?c                óÜ  — t        | «      r| S 	 t        | «      5 }|j                  «       j                  «       }ddd«       j	                  d«      r€|dd }t        j                  «       rt        |«      }t        j                  |«      s<t        j                  t        j                  t        j                  | «      |«      «      }t        |«      S y# 1 sw Y   Œ›xY w# t        $ r Y yw xY w)zSearch for a submodule repo.Nzgitdir: é   )r   r)   ÚreadÚrstripr<   r   Ú	is_cygwinr   r4   ÚisabsÚnormpathr6   Údirnamer   ÚIOError)r=   ÚfpÚcontentÚpaths       r+   r   r   c   sÄ   € ä�!„}Øˆð0Ü�!‹Wð 	)˜Ø—g‘g“i×&Ñ&Ó(ˆG÷	)ð ×Ñ˜jÔ)Ø˜1˜2�;ˆDä�}‰}Œô ˜t“}�Ü—9‘9˜T”?Ü—|‘|¤C§H¡H¬S¯[©[¸«^¸TÓ$BÓC�Ü)¨$Ó/Ð/à÷%	)ð 	)ûäò àð ð!ús'   �C šC¹C ÃCÃC Ã	C+Ã*C+c                óV   — 	 t        | j                  |«      «      S # t        $ r Y yw xY w)zÉ
    :return:
        Long hexadecimal sha1 from the given less than 40 byte hexsha, or ``None`` if no
        candidate could be found.

    :param hexsha:
        hexsha with less than 40 bytes.
    N)r   Úpartial_to_complete_sha_hexr   )ÚodbÚhexshas     r+   r	   r	   ~   s/   € ðÜ˜#×9Ñ9¸&ÓAÓBÐBøÜò Ùðús   ‚ œ	(§(c                 ó   — y ©N© ©ÚrepoÚnameÚ
return_refs      r+   r   r   Ž   s   € Ø_br?   c                 ó   — y ra   rb   rc   s      r+   r   r   ’   s   € Ørur?   c                óŽ  — d}| j                   j                  |«      r't        |«      dk7  rt        | j                  |«      }n|}|€5dD ]0  }	 t        j                  | ||z  «      }|rt        | ||z  «      c S  n |rt        d|z  «      ‚|€t        |«      ‚t        j                  | t        |«      «      S # t        $ r Y Œzw xY w)ah  
    :return:
        Object specified by the given name - hexshas (short and long) as well as
        references are supported.

    :param return_ref:
        If ``True``, and name specifies a reference, we will return the reference
        instead of the object. Otherwise it will raise :exc:`~gitdb.exc.BadObject` or
        :exc:`~gitdb.exc.BadName`.
    Né(   )z%szrefs/%szrefs/tags/%szrefs/heads/%szrefs/remotes/%szrefs/remotes/%s/HEADz Couldn't find reference named %r)Úre_hexsha_shortenedÚmatchÚlenr	   r^   r   Údereference_recursiverI   r   r   r   Únew_from_shar   )rd   re   rf   r_   Úbases        r+   r   r   –   sÞ   € ð '+€Fð ×Ñ×%Ñ% dÔ+Üˆt‹9˜Š?ä" 4§8¡8¨TÓ2‰FàˆFð €~ð
ò 	ˆDðÜ*×@Ñ@ÀÀtÈdÁ{ÓS�ÙÜ,¨T°4¸$±;Ó?Ò?áð	ñ( ÜÐ:¸TÑAÓBÐBð €~Ü�d‹mÐô ×Ñ˜t¤Z°Ó%7Ó8Ð8øô ò Ùðús   Á)B8Â8	CÃCc                ó@   — 	 	 | j                   } Œ# t        $ r Y | S w xY w)z>Recursively dereference a tag and return the resulting object.)ÚobjectÚAttributeError)Útags    r+   r
   r
   Ð   s1   € à
ð	Ø—*‘*ˆCð øô ò 	Øà€Jð	ús   ƒ �	œc                ót   — | j                   dk(  rt        | «      } | j                   dk7  rt        d| z  «      ‚| S )z?Convert the given object to a commit if possible and return it.rs   Úcommitz'Cannot convert object %r to type commit)Útyper
   rI   )Úobjs    r+   r   r   Û   s9   € à
‡x�x�5ÒÜ˜‹nˆà
‡x�x�8ÒÜÐBÀSÑHÓIÐIà€Jr?   c           
     ó†  — |j                  d«      rt        d«      ‚d}d}d}d}d}t        |«      }||k  �rÈ||   dvr|dz  }Œ||   }|€M|dk(  r| j                  j                  }n?|dk(  rt        d	t        | |d| d
¬«      «      }nt        | |d| «      }n|�|j                  }|dz  }||k  �rf||   dk(  �r]|j                  d|«      }	|	dk(  rt        d|z  «      ‚||dz   |	 }|dk(  r*t        d|«      }|r|j                  dk(  rt        |«      }nËnÊ|dk(  r'	 t        t        |«      }t        |«      j                  }nž|dv r*t        d|«      }|r|j                  dk(  rt        |«      }nqnp|dk(  rY|€J d«       ‚d}
	 t!        |«      dz    }
	 |j#                  |
«      }t'        j(                  | t+        |j,                  «      «      }d}nt        d|›d|›d�«      ‚|r,|r*|j                  |k7  rt        d|›d|j                  ›�«      ‚|	dz   }|}�Œæd}|dk7  r9d}||k  r.||   t.        v r|dz  t!        ||   «      z   }|dz  }d
}nn||k  rŒ.|sd}|}	 t        t        |«      }|d k(  r+t        |«      }t1        |«      D ]  }|j2                  d   }Œ n^|d!k(  r t        |«      }|rL|j2                  |dz
     }n9|dk(  r&|j                  dk7  r|j                  }|||d    }|}nt        d"|z  «      ‚||k  r�ŒÈ|€t        | |«      }|}|€t        d&|z  «      ‚||k7  rt        d'|›d(|d| ›�«      ‚|S # t        t        f$ r Y �Œlw xY w# t        $ r}t        d«      |‚d}~ww xY w# t$        $ r}t%        d|
z  «      |‚d}~ww xY w# t$        t        f$ r#}t5        d#|› d$|› t!        |«      › d%�«      |‚d}~ww xY w))aû  Parse a revision string. Like :manpage:`git-rev-parse(1)`.

    :return:
        `~git.objects.base.Object` at the given revision.

        This may be any type of git object:

        * :class:`Commit <git.objects.commit.Commit>`
        * :class:`TagObject <git.objects.tag.TagObject>`
        * :class:`Tree <git.objects.tree.Tree>`
        * :class:`Blob <git.objects.blob.Blob>`

    :param rev:
        :manpage:`git-rev-parse(1)`-compatible revision specification as string.
        Please see :manpage:`git-rev-parse(1)` for details.

    :raise gitdb.exc.BadObject:
        If the given revision could not be found.

    :raise ValueError:
        If `rev` couldn't be parsed.

    :raise IndexError:
        If an invalid reflog index is specified.
    z:/z commit by message search (regex)Nru   r   z^~:@r%   ú@r#   T)rf   ú{ú}éÿÿÿÿz*Missing closing brace to define type in %sr"   rs   Útree)Ú Úblobz"Require Reference to access reflogz3Support for additional @{...} modes not implementedzInvalid revlog index: %ir~   zInvalid output type: z ( in z )z,Could not accommodate requested object type z, got ú:Fé
   ú~ú^zInvalid token: %rzInvalid revision spec 'z(' - not enough parent commits to reach 'ú'z*Revision specifier could not be parsed: %sz!Didn't consume complete rev spec z, consumed part: )r<   ÚNotImplementedErrorrl   ÚheadÚrefr   r   ru   ÚfindrI   rv   r
   r   r   r}   rr   ÚintÚ	log_entryÚ
IndexErrorr   rn   r   Ú	newhexshar   ÚrangeÚparentsr   )rd   Úrevrw   r‡   Úoutput_typeÚstartÚ	parsed_toÚlrÚtokenÚendÚrevlog_indexÚeÚentryÚnumÚfound_digitÚ_s                   r+   r   r   æ   s…  € ð6 ‡~�~�dÔä!Ð"DÓEÐEð #'€CØ
€CØ€KØ€EØ€IÜ	ˆS‹€BØ
�"‹*Øˆu‰:˜VÑ#Ø�Q‰JˆEØð �E‘
ˆàˆ;à˜ŠzØ—i‘i—m‘m‘à˜C’<Ü˜{¬N¸4ÀÀVÀeÀÐY]Ô,^Ó_‘Cä(¨¨s°6°E¨{Ó;‘Cð ˆØ—j‘j�ð 	�‰
ˆð �2‹:˜#˜e™*¨Ó+Ø—(‘(˜3 Ó&ˆCØ�bŠyÜ Ð!MÐPSÑ!SÓTÐTØ˜e a™i¨#Ð.ˆKð ˜hÒ&Ü˜;¨Ó,�Ù˜3Ÿ8™8 uÒ,Ü# C›.‘Cð à Ò&ðÜœ|¨SÓ1�CÜ# C›.×-Ñ-‘Cð  Ñ,Ü˜;¨Ó,�Ù˜3Ÿ8™8 uÒ,Ü# C›.‘Cð à˜#’à�ÐLÐ(LÓL�Ø#�ðlä%(¨Ó%5¸Ñ%9Ð#:�LðWØŸM™M¨,Ó7�Eô
 ×)Ñ)¨$´
¸5¿?¹?Ó0KÓL�ð !‘å ÊÒUXÐ!YÓZÐZñ
 ™s s§x¡x°;Ò'>Ý Ò]hÐjm×jrÒjrÐ!sÓtÐtð ˜!‘GˆEØˆIÙð ˆØ�CŠ<ØˆKØ˜"’*Ø�u‘:¤Ñ'Ø ™(¤S¨¨U©£_Ñ4�CØ˜Q‘J�EØ"&‘Kàð ˜"“*ñ Ø�ð ˆ	ð	Ü”| SÓ)ˆCØ˜Š|Ü “n�Ü˜s›ò )�AØŸ+™+ a™.‘Cñ)ð ˜#’Ü “n�áØŸ+™+ c¨A¡gÑ.‘CØ˜#’Ø—8‘8˜vÒ%ØŸ(™(�Cà˜#˜e˜f˜+Ñ&�Ø‘	ä Ð!4°uÑ!<Ó=Ð=ðQ �"Œ*ðd €{Ü˜T 3Ó'ˆØˆ	ð €{ÜÐEÈÑKÓLÐLà�B‚ÝÒUXÐZ]Ð^hÐ_hÑZiÐjÓkÐkà€Jøô] '¬
Ð3ò Úðûô$ "ò lä-Ð.cÓdÐjkÐkûðlûô "ò WÜ$Ð%?À,Ñ%NÓOÐUVÐVûðWûôD œNÐ+ò 	ÜØ)¨#¨Ð.VÐW\ÐV]Ô^aÐbeÓ^fÐ]gÐghÐióàðûð	ús[   Ä%L; ÆM ÆM. ÉBN Ì;MÍMÍ	M+ÍM&Í&M+Í.	NÍ7NÎNÎO ÎN;Î;O )r*   ÚstrÚreturnrœ   )r=   r   r�   Úbool)rJ   r   r�   zOptional[str])r=   r   r�   zOptional[PathLike])r^   z'GitCmdObjectDB'r_   rœ   r�   zOptional[bytes]).)rd   ú'Repo're   rœ   rf   zLiteral[False]r�   r   )rd   rŸ   re   rœ   rf   zLiteral[True]r�   ú&Union[AnyGitObject, SymbolicReference])F)rd   rŸ   re   rœ   rf   rž   r�   r    )rs   z'Tag'r�   r   )rw   r   r�   z'Commit')rd   rŸ   r�   rœ   r�   r   )9Ú__doc__Ú
__future__r   Ú__all__r7   Úos.pathr[   r4   Úpathlibr   rA   Ústringr   Ú	gitdb.excr   r   Úgit.cmdr   Úgit.excr   Úgit.objectsr   Úgit.refsr   Úgit.utilr   r   r   Útypingr   r   r   r   r   Ú	git.typesr   r   r   Úgit.dbr    r!   r"   Úgit.refs.referencer#   Úgit.refs.tagr$   ro   r&   r   r   r   r   r	   r   r
   r   r   rb   r?   r+   ú<module>r²      sª   ðñ ,å "ò
€ó 
Ý Ý Û Ý ç (å Ý 1Ý Ý &ß 4Ñ 4÷ BÕ Aç 5Ñ 5áÝ%ß-Ý,Ý åó
óó.ó&ó6ð  
Û bó 
Ø bð 
Ú uó 
Ø uô79ótóôCr?   