Ë
    ómxi"  ã                   óö   — d dl mZ d dlmZmZmZ d dlmZmZ d dl	m
Z
mZmZmZ d dlmZmZ d dlmZmZmZmZmZmZmZmZmZmZmZmZ d dlmZm Z m!Z!m"Z" d dl#m$Z$ d d	l%Z%d d	l&Z&d d	l'Z'd d	l(Z(d
Z) G d„ deee«      Z*y	)é    )Úsuppress)Ú
FileDBBaseÚ	ObjectDBRÚ	ObjectDBW)Ú	BadObjectÚAmbiguousObjectName)ÚDecompressMemMapReaderÚFDCompressedSha1WriterÚFDStreamÚ
Sha1Writer)ÚOStreamÚOInfo)Úfile_contents_ro_filepathÚENOENTÚ
hex_to_binÚ
bin_to_hexÚexistsÚchmodÚisfileÚremoveÚrenameÚdirnameÚbasenameÚjoin)Ú
chunk_sizeÚloose_object_header_infoÚwrite_objectÚstream_copy)Úforce_bytesN)ÚLooseObjectDBc                   ó®   ‡ — e Zd ZdZeZ edd«      Zej                  dk(  r	 edd«      Zˆ fd„Z
d„ Zd„ Zd	„ Zd
„ Zˆ fd„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zˆ xZS )r    z/A database which operates on loose object filesÚ444é   ÚntÚ644c                 ón   •— t         ‰| �  |«       t        «       | _        t	        t
        dd«      | _        y )NÚ	O_NOATIMEr   )ÚsuperÚ__init__ÚdictÚ_hexsha_to_fileÚgetattrÚosÚ_fd_open_flags)ÚselfÚ	root_pathÚ	__class__s     €úE/home/htdocs/ttos/venv/lib/python3.12/site-packages/gitdb/db/loose.pyr)   zLooseObjectDB.__init__M   s-   ø€ Ü‰Ñ˜Ô#Ü#›vˆÔô &¤b¨+°qÓ9ˆÕó    c                 ó&   — t        |dd |dd «      S )z{
        :return: path at which the object with the given hexsha would be stored,
            relative to the database rootNé   )r   )r/   Úhexshas     r2   Úobject_pathzLooseObjectDB.object_pathV   s   € ô �F˜2˜A�J  q r 
Ó+Ð+r3   c                 óø   — t        t        «      5  | j                  |   cddd«       S # 1 sw Y   nxY w| j                  | j	                  |«      «      }t        |«      r|| j                  |<   |S t        |«      ‚)z…
        :return: readable object path to the object identified by hexsha
        :raise BadObject: If the object file does not existN)r   ÚKeyErrorr+   Údb_pathr7   r   r   )r/   r6   Úpaths      r2   Úreadable_db_object_pathz%LooseObjectDB.readable_db_object_path\   sq   € ô ”hÓñ 	0Ø×'Ñ'¨Ñ/÷	0÷ 	0ò 	0úð
 �|‰|˜D×,Ñ,¨VÓ4Ó5ˆÜ�$Œ<Ø+/ˆD× Ñ  Ñ(ØˆKä˜ÓÐs   �)©2c                 ó´   — d}| j                  «       D ]5  }t        |«      j                  t        |«      «      sŒ'|�t	        |«      ‚|}Œ7 |€t        |«      ‚|S )zÎ:return: 20 byte binary sha1 string which matches the given name uniquely
        :param name: hexadecimal partial name (bytes or ascii string)
        :raise AmbiguousObjectName:
        :raise BadObject: N)Úsha_iterr   Ú
startswithr   r   r   )r/   Úpartial_hexshaÚ	candidateÚbinshas       r2   Úpartial_to_complete_sha_hexz)LooseObjectDB.partial_to_complete_sha_hexl   se   € ð
 ˆ	Ø—m‘m“oò 	#ˆFÜ˜&Ó!×,Ñ,¬[¸Ó-HÕIàÐ(Ü-¨nÓ=Ð=Ø"‘	ð	#ð ÐÜ˜NÓ+Ð+ØÐr3   c                 ó@  — | j                  | j                  t        |«      «      «      }	 t        || j                  ¬«      S # t
        $ rR}|j                  t        k7  r.	 t        |«      cY d}~S # t
        $ r}t        |«      |‚d}~ww xY wt        |«      |‚d}~ww xY w)z~
        :return: memory map of that file to allow random read access
        :raise BadObject: if object could not be located)ÚflagsN)	r:   r7   r   r   r.   ÚOSErrorÚerrnor   r   )r/   Úshar:   ÚeÚnew_es        r2   Ú_map_loose_objectzLooseObjectDB._map_loose_object   s�   € ð —,‘,˜t×/Ñ/´
¸3³Ó@ÓAˆð	,Ü,¨W¸D×<OÑ<OÔPÐPøÜò 
	,Ø�w‰wœ&Ò ð4Ü4°WÓ=Õ=øÜò 4Ü# C›.¨eÐ3ûð4úô
   “n¨!Ð+ûð
	,ús;   «A Á	BÁBÁ
A/Á)BÁ/	B	Á8BÂB	Â	BÂBc                 ó~   •— |�,t        |t        «      st        dt        j                  z  «      ‚t        ‰| �  |«      S )zI:raise TypeError: if the stream does not support the Sha1Writer interfacez,Output stream musst support the %s interface)Ú
isinstancer   Ú	TypeErrorÚ__name__r(   Úset_ostream)r/   Ústreamr1   s     €r2   rP   zLooseObjectDB.set_ostream”   s9   ø€ àÐ¤j°¼Ô&DÜÐJÌZ×M`ÑM`Ñ`ÓaÐaÜ‰wÑ" 6Ó*Ð*r3   c                 óÚ   — | j                  |«      }	 t        |«      \  }}t        |||«      t        |d«      r|j	                  «        S S # t        |d«      r|j	                  «        w w xY w)NÚclose)rK   r   r   ÚhasattrrS   )r/   rH   ÚmÚtypÚsizes        r2   ÚinfozLooseObjectDB.infoš   sb   € Ø×"Ñ" 3Ó'ˆð	Ü0°Ó3‰IˆC�Ü˜˜c 4Ó(ä�q˜'Ô"Ø—‘•	ð #øŒw�q˜'Ô"Ø—‘•	ð #ús   “A ÁA*c                 óv   — | j                  |«      }t        j                  |d¬«      \  }}}t        ||||«      S )NT)Úclose_on_deletion)rK   r	   Únewr   )r/   rH   rU   ÚtyperW   rQ   s         r2   rQ   zLooseObjectDB.stream¤   s<   € Ø×"Ñ" 3Ó'ˆÜ3×7Ñ7¸ÈTÔRÑˆˆd�FÜ�s˜D $¨Ó/Ð/r3   c                 óX   — 	 | j                  t        |«      «       y# t        $ r Y yw xY w)NTF)r<   r   r   )r/   rH   s     r2   Ú
has_objectzLooseObjectDB.has_object©   s.   € ð	Ø×(Ñ(¬°C«Ô9ØøÜò 	Ùð	ús   ‚ �	)¨)c                 ó‚  — d}| j                  «       }|€Gt        j                  d| j                  ¬«      \  }}|j                  €t        |«      }nt        |«      }	 	 |j                  �;t        |j                  |j                  t        j                  | j                  «       nBt        |j                  |j                  |j                  |j                  | j                  ¬«       |r|j!                  «        	 d}|j                  r|j$                  }n|j'                  d¬«      }|r¶| j)                  | j+                  |«      «      }t-        |«      }t/        j0                  |d¬«       t3        |«      rt#        |«       nt5        ||«       dD ]2  }t7        t8        «      5  t;        || j<                  «       	 ddd«        n t9        d
jC                  |«      «      ‚tE        |«      |_        |S # |r|j!                  «        w w xY w#  |rt#        |«       ‚ xY w# 1 sw Y   nxY wt?        j@                  |d	z  «       Œ±)z.note: The sha we produce will be hex by natureNÚobj)ÚprefixÚdir)r   T)Úas_hex)Úexist_ok)é   é   é	   é   é   é$   é1   é@   éQ   éd   éy   é�   é©   éµ   g     @�@z&Impossible to apply `chmod` to file {})#ÚostreamÚtempfileÚmkstempÚ
_root_pathrB   r
   r   r   ÚreadÚwriteÚsysÚmaxsizeÚstream_chunk_sizer   r\   rW   rS   r   r6   rH   r:   r7   r   r-   Úmakedirsr   r   r   ÚPermissionErrorr   Únew_objects_modeÚtimeÚsleepÚformatr   )	r/   ÚistreamÚtmp_pathÚwriterÚfdr6   Úobj_pathÚobj_dirÚexp_backoff_mss	            r2   ÚstorezLooseObjectDB.store±   sí  € àˆØ—‘“ˆØˆ>ä#×+Ñ+°5¸d¿o¹oÔN‰LˆB�à�~‰~Ð%Ü/°Ó3‘ä! "›�ð	ð#Ø—>‘>Ð-ô   §¡¨f¯l©l¼C¿K¹KÈ×I_ÑI_Õ`ô ! §¡¨w¯|©|¸W¿\¹\È6Ï<É<Ø,0×,BÑ,BõDñ Ø—L‘L•Nð ˆØ�>Š>Ø—^‘^‰Fà—Z‘Z t�ZÓ,ˆFñ Ø—|‘| D×$4Ñ$4°VÓ$<Ó=ˆHÜ˜hÓ'ˆGÜ�K‰K˜¨$Õ/ô �hÔÜ�xÕ ä�x Ô*ð #]ò 
�ÜœoÓ.ñ ô ˜( D×$9Ñ$9Ô:Ø÷	ñ ð
ô &Ø<×CÑCÀHÓMóð ô $ FÓ+ˆŒØˆøñ_ Ø—L‘L•Nð ûð	ÙÜ�xÔ Øú÷6ð úô
 —
‘
˜>¨FÑ2Õ3s+   ÁB	G1 Ã'H	 Æ"HÇ1HÈH	 È	HÈH%	c              #   óä   K  — t        j                  | j                  «       «      D ]F  \  }}}t        |«      }t	        |«      dk7  rŒ!|D ]!  }t	        |«      dk7  rŒt        ||z   «      –— Œ# ŒH y ­w)Nr5   é&   )r-   Úwalkr0   r   Úlenr   )r/   ÚrootÚdirsÚfilesÚ	root_baseÚfs         r2   r>   zLooseObjectDB.sha_iterý   sp   è ø€ ä!#§¡¨¯©Ó)9Ó!:ò 	0ÑˆD�$˜Ü  ›ˆIÜ�9‹~ Ò"Øàò 0�Ü�q“6˜R’<ØÜ  ¨Q¡Ó/Ó/ñ0ñ	0ùs   ‚A.A0c                 óF   — t        t        | j                  «       «      «      S )N)r�   Útupler>   )r/   s    r2   rW   zLooseObjectDB.size  s   € Ü”5˜Ÿ™›Ó)Ó*Ð*r3   )rO   Ú
__module__Ú__qualname__Ú__doc__r   r{   Úintr~   r-   Únamer)   r7   r<   rC   rK   rP   rX   rQ   r^   r‰   r>   rW   Ú__classcell__)r1   s   @r2   r    r    ?   sq   ø„ á9ð #Ðñ ˜5 !“}ÐØ	‡w�w�$‚Ù˜u a›=Ðô:ò,ò ò ò&,ô*+òò0ò
òJòX
0ö+r3   r    )+Ú
contextlibr   Úgitdb.db.baser   r   r   Ú	gitdb.excr   r   Úgitdb.streamr	   r
   r   r   Ú
gitdb.baser   r   Ú
gitdb.utilr   r   r   r   r   r   r   r   r   r   r   r   Ú	gitdb.funr   r   r   r   Úgitdb.utils.encodingr   rt   r-   ry   r   Ú__all__r    © r3   r2   ú<module>r¥      sp   ðõ
  ÷ñ ÷÷
ó ÷÷
÷ ÷ ó ÷ó õ -ã Û 	Û 
Û ð €ôM+�J 	¨9õ M+r3   