Ë
    ùmxik  ã                   óö   — d Z g d¢ZddlmZ ddlmZ ddlmZ ddlm	Z	m
Z
 ddlmZmZmZmZmZmZ dd	lmZ erdd
lmZ eZdZdZdZdZdZdZdZ G d„ d«      Z G d„ de«      Z  G d„ de «      Z! G d„ de!«      Z"y)z#Additional types used by the index.)Ú
BlobFilterÚBaseIndexEntryÚ
IndexEntryÚ	StageTypeé    )Úb2a_hex)ÚPath)ÚBlobé   )ÚpackÚunpack)Ú
NamedTupleÚSequenceÚTYPE_CHECKINGÚTupleÚUnionÚcast)ÚPathLike)ÚRepoiÿ  i 0  i @  i €  é   i    c                   óD   — e Zd ZdZdZdee   ddfd„Zdee	e
f   defd„Zy)	r   zûPredicate to be used by
    :meth:`IndexFile.iter_blobs <git.index.base.IndexFile.iter_blobs>` allowing to
    filter only return blobs which match the given list of directories or files.

    The given paths are given relative to the repository.
    ©Úpathsr   ÚreturnNc                 ó   — || _         y)z§
        :param paths:
            Tuple or list of paths which are either pointing to directories or to files
            relative to the current repository.
        Nr   )Úselfr   s     úD/home/htdocs/ttos/venv/lib/python3.12/site-packages/git/index/typ.pyÚ__init__zBlobFilter.__init__3   s   € ð ˆ�
ó    Ú
stage_blobc                 óT  — |d   j                   }t        |t        «      r|n
t        |«      }| j                  D ]m  }t        |t        «      r|n
t        |«      }|j                  }|j                  }t        |«      t        |«      kD  rŒPt        d„ t        ||«      D «       «      sŒm y y)Nr
   c              3   ó,   K  — | ]  \  }}||k(  –— Œ y ­w)N© )Ú.0ÚiÚjs      r   ú	<genexpr>z&BlobFilter.__call__.<locals>.<genexpr>F   s   è ø€ ÒD™d˜a �1˜•6ÑDùs   ‚TF)ÚpathÚ
isinstancer   r   ÚpartsÚlenÚallÚzip)r   r   Úblob_pathlikeÚ	blob_pathÚpathliker'   Úfilter_partsÚ
blob_partss           r   Ú__call__zBlobFilter.__call__;   s”   € Ø",¨Q¡-×"4Ñ"4ˆÜ+5°mÄTÔ+J™-ÔPTÐUbÓPcˆ	ØŸ
™
ò 		ˆHÜ%/°¼$Ô%?™ÄTÈ(Ã^ˆDð  Ÿ:™:ˆLØ"Ÿ™ˆJÜ�<Ó ¤3 z£?Ò2ØÜÑD¤c¨,¸
Ó&CÔDÕDÙð		ð r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú	__slots__r   r   r   r   r   r	   Úboolr2   r"   r   r   r   r   )   sB   „ ñð €Ið˜h xÑ0ð °Tó ð 5¨°D¨Ñ#9ð ¸dô r   r   c                   óÊ   — e Zd ZU dZeed<   eed<   eed<   eed<    eddd«      Z	eed<    eddd«      Z
eed	<   dZeed
<   dZeed<   dZeed<   dZeed<   dZeed<   dZeed<   y)ÚBaseIndexEntryHelperzÁTyped named tuple to provide named attribute access for :class:`BaseIndexEntry`.

    This is needed to allow overriding ``__new__`` in child class to preserve backwards
    compatibility.
    ÚmodeÚbinshaÚflagsr'   ú>LLr   Úctime_bytesÚmtime_bytesÚdevÚinodeÚuidÚgidÚsizeÚextended_flagsN)r3   r4   r5   r6   ÚintÚ__annotations__Úbytesr   r   r?   r@   rA   rB   rC   rD   rE   rF   r"   r   r   r:   r:   K   sz   … ñð ƒIØƒMØƒJØ
ƒNÙ˜e Q¨Ó*€K�Ó*Ù˜e Q¨Ó*€K�Ó*Ø€CˆƒLØ€Eˆ3ƒNØ€CˆƒLØ€CˆƒLØ€Dˆ#ƒMà€N�CÔr   r:   c                   ó  ‡ — e Zd ZdZdeeeeeef   eeeeeeeeeeeeef   f   dd fˆ fd„Z	de
fd„Zde
fd„Zede
fd„«       Zedefd„«       Zedefd	„«       Zedefd
„«       Zeddededd fd„«       Zdddefd„Zˆ xZS )r   aŒ  Small brother of an index entry which can be created to describe changes
    done to the index in which case plenty of additional information is not required.

    As the first 4 data members match exactly to the :class:`IndexEntry` type, methods
    expecting a :class:`BaseIndexEntry` can also handle full :class:`IndexEntry`\s even
    if they use numeric indices for performance reasons.
    Ú	inp_tupler   c                 ó$   •— t        ‰| �  | g|¢­Ž S )z\Override ``__new__`` to allow construction from a tuple for backwards
        compatibility.)ÚsuperÚ__new__)ÚclsrK   Ú	__class__s     €r   rN   zBaseIndexEntry.__new__j   s   ø€ ô ‰w‰˜sÐ/ YÒ/Ð/r   c                 ód   — d| j                   | j                  | j                  | j                  fz  S )Nz%o %s %i	%s©r;   ÚhexshaÚstager'   ©r   s    r   Ú__str__zBaseIndexEntry.__str__u   s&   € Ø §¡¨D¯K©K¸¿¹ÀTÇYÁYÐ OÑOÐOr   c                 ód   — d| j                   | j                  | j                  | j                  fz  S )Nz(%o, %s, %i, %s)rR   rU   s    r   Ú__repr__zBaseIndexEntry.__repr__x   s&   € Ø! T§Y¡Y°·±¸T¿Z¹ZÈÏÉÐ$SÑSÐSr   c                 óJ   — t        | j                  «      j                  d«      S )zhex version of our shaÚascii)r   r<   ÚdecoderU   s    r   rS   zBaseIndexEntry.hexsha{   s   € ô �t—{‘{Ó#×*Ñ*¨7Ó3Ð3r   c                 ó6   — | j                   t        z  t        z	  S )a|  Stage of the entry, either:

            * 0 = default stage
            * 1 = stage before a merge or common ancestor entry in case of a 3 way merge
            * 2 = stage of entries from the 'left' side of the merge
            * 3 = stage of entries from the 'right' side of the merge

        :note:
            For more information, see :manpage:`git-read-tree(1)`.
        )r=   ÚCE_STAGEMASKÚCE_STAGESHIFTrU   s    r   rT   zBaseIndexEntry.stage€   s   € ð —
‘
œ\Ñ)¬mÑ;Ð;r   c                 ó.   — | j                   t        z  dkD  S ©Nr   )rF   ÚCE_EXT_SKIP_WORKTREErU   s    r   Úskip_worktreezBaseIndexEntry.skip_worktreeŽ   ó   € à×#Ñ#Ô&:Ñ:¸aÑ?Ð?r   c                 ó.   — | j                   t        z  dkD  S r`   )rF   ÚCE_EXT_INTENT_TO_ADDrU   s    r   Úintent_to_addzBaseIndexEntry.intent_to_add’   rc   r   ÚblobrT   c                 ód   —  | |j                   |j                  |t        z  |j                  f«      S )z9:return: Fully equipped BaseIndexEntry at the given stage)r;   r<   r^   r'   )rO   rg   rT   s      r   Ú	from_blobzBaseIndexEntry.from_blob–   s)   € ñ �D—I‘I˜tŸ{™{¨E´]Ñ,BÀDÇIÁIÐNÓOÐOr   Úrepor   c                 óZ   — t        || j                  | j                  | j                  «      S )z7:return: Blob using the information of this index entry)r	   r<   r;   r'   )r   rj   s     r   Úto_blobzBaseIndexEntry.to_blob›   s   € ä�D˜$Ÿ+™+ t§y¡y°$·)±)Ó<Ð<r   ©r   )r3   r4   r5   r6   r   r   rG   rI   r   rN   ÚstrrV   rX   ÚpropertyrS   rT   r8   rb   rf   Úclassmethodr	   ri   rl   Ú__classcell__)rP   s   @r   r   r   a   s-  ø„ ñð	0àØ�#�u˜c 8Ð+Ñ,Ø�#�u˜c 8¨U°E¸3ÀÀSÈ#ÈsÐTWÐWÑXðZñ
ð	0ð 
õ	0ðP˜ó PðT˜#ó Tð ð4˜ò 4ó ð4ð ð<�sò <ó ð<ð ð@˜tò @ó ð@ð ð@˜tò @ó ð@ð ñP˜Tð P¨#ð PÐ6Fò Pó ðPð=˜Fð = t÷ =r   r   c                   ó‚   — e Zd ZdZedeeef   fd„«       Zedeeef   fd„«       Ze	d
d„«       Z
e	ddededd fd„«       Zy	)r   a-  Allows convenient access to index entry data as defined in
    :class:`BaseIndexEntry` without completely unpacking it.

    Attributes usually accessed often are cached in the tuple whereas others are
    unpacked on demand.

    See the properties for a mapping between names and tuple indices.
    r   c                 ód   — t        t        t        t        f   t        d| j                  «      «      S )z„
        :return:
            Tuple(int_time_seconds_since_epoch, int_nano_seconds) of the
            file's creation time
        r>   )r   r   rG   r   r?   rU   s    r   ÚctimezIndexEntry.ctimeª   s&   € ô ”Eœ#œs˜(‘O¤V¨E°4×3CÑ3CÓ%DÓEÐEr   c                 ód   — t        t        t        t        f   t        d| j                  «      «      S )z:See :attr:`ctime` property, but returns modification time.r>   )r   r   rG   r   r@   rU   s    r   ÚmtimezIndexEntry.mtime³   s&   € ô ”Eœ#œs˜(‘O¤V¨E°4×3CÑ3CÓ%DÓEÐEr   c                 ó˜   — t        ddd«      }t        |j                  |j                  |j                  |j
                  ||dddddf«      S )zø
        :return:
            Minimal entry as created from the given :class:`BaseIndexEntry` instance.
            Missing values will be set to null-like values.

        :param base:
            Instance of type :class:`BaseIndexEntry`.
        r>   r   )r   r   r;   r<   r=   r'   )rO   ÚbaseÚtimes      r   Ú	from_basezIndexEntry.from_base¸   sJ   € ô �E˜1˜aÓ ˆÜ˜4Ÿ9™9 d§k¡k°4·:±:¸t¿y¹yÈ$ÐPTÐVWÐYZÐ\]Ð_`ÐbcÐdÓeÐer   rg   rT   c                 ó¦   — t        ddd«      }t        |j                  |j                  |t        z  |j
                  ||dddd|j                  f«      S )z7:return: Minimal entry resembling the given blob objectr>   r   )r   r   r;   r<   r^   r'   rE   )rO   rg   rT   ry   s       r   ri   zIndexEntry.from_blobÅ   sZ   € ô �E˜1˜aÓ ˆÜà—	‘	Ø—‘ØœÑ&Ø—	‘	ØØØØØØØ—	‘	ðó
ð 	
r   N)rx   r   r   r   rm   )r3   r4   r5   r6   ro   r   rG   rt   rv   rp   rz   r	   ri   r"   r   r   r   r       s’   „ ñð ðF�u˜S #˜X‘ò Fó ðFð ðF�u˜S #˜X‘ò Fó ðFð ò
fó ð
fð ñ
˜Tð 
¨#ð 
°lò 
ó ñ
r   r   N)#r6   Ú__all__Úbinasciir   Úpathlibr   Úgit.objectsr	   Úutilr   r   Útypingr   r   r   r   r   r   Ú	git.typesr   Úgit.repor   rG   r   ÚCE_NAMEMASKr]   ÚCE_EXTENDEDÚCE_VALIDr^   ra   re   r   r:   r   r   r"   r   r   ú<module>r‡      sŠ   ðñ *â
E€å Ý å ç ÷ K× Jå áÝà€	ð
 €Ø€Ø€Ø€Ø€àÐ ØÐ ÷
ñ ôD˜:ô ô,<=Ð)ô <=ô~7
�õ 7
r   