ó
    ±“,j"  ã                   óö   • S SK Jr  S SKJrJrJr  S SKJrJr  S SK	J
r
JrJrJr  S SKJrJr  S SKJrJrJrJrJrJrJrJrJrJrJrJr  S SKJrJ r J!r!J"r"  S SK#J$r$  S S	K%r%S S	K&r&S S	K'r'S S	K(r(S
r) " S S\\\5      r*g	)é    )Ú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                   ó¼   ^ • \ rS rSrSr\r\" SS5      r\	R                  S:X  a	  \" SS5      rU 4S jrS rS	 rS
 rS rU 4S jrS rS rS rS rS rS rSrU =r$ )r    é?   z/A database which operates on loose object filesÚ444é   ÚntÚ644c                 ón   >• [         TU ]  U5        [        5       U l        [	        [
        SS5      U l        g )NÚ	O_NOATIMEr   )ÚsuperÚ__init__ÚdictÚ_hexsha_to_fileÚgetattrÚosÚ_fd_open_flags)ÚselfÚ	root_pathÚ	__class__s     €ÚœC:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\gitdb/db/loose.pyr*   ÚLooseObjectDB.__init__M   s-   ø€ Ü‰Ñ˜Ô#Ü#›vˆÔô &¤b¨+°qÓ9ˆÕó    c                 ó&   • [        USS USS 5      $ )zk
:return: path at which the object with the given hexsha would be stored,
    relative to the database rootNé   )r   )r0   Úhexshas     r3   Úobject_pathÚLooseObjectDB.object_pathV   s   € ô �F˜2˜A�J  q r 
Ó+Ð+r5   c                 ó
  • [        [        5         U R                  U   sSSS5        $ ! , (       d  f       O= fU R                  U R	                  U5      5      n[        U5      (       a  X R                  U'   U$ [        U5      e)zu
:return: readable object path to the object identified by hexsha
:raise BadObject: If the object file does not existN)r   ÚKeyErrorr,   Údb_pathr9   r   r   )r0   r8   Úpaths      r3   Úreadable_db_object_pathÚ%LooseObjectDB.readable_db_object_path\   sh   € ô ”hÕØ×'Ñ'¨Ñ/÷  ××úð
 �|‰|˜D×,Ñ,¨VÓ4Ó5ˆÜ�$�<‰<Ø+/× Ñ  Ñ(ØˆKä˜ÓÐs   �)©
7c                 óÈ   • SnU R                  5        H=  n[        U5      R                  [        U5      5      (       d  M-  Ub  [	        U5      eUnM?     Uc  [        U5      eU$ )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   )r0   Úpartial_hexshaÚ	candidateÚbinshas       r3   Úpartial_to_complete_sha_hexÚ)LooseObjectDB.partial_to_complete_sha_hexl   sc   € ð
 ˆ	Ø—m‘m–oˆFÜ˜&Ó!×,Ñ,¬[¸Ó-H×IÓIàÑ(Ü-¨nÓ=Ð=Ø"’	ñ &ð ÑÜ˜NÓ+Ð+ØÐr5   c                 ó>  • U R                  U R                  [        U5      5      5      n [        X R                  S9$ ! [
         aT  nUR                  [        :w  a/   [        U5      s SnA$ ! [
         a  n[        U5      UeSnAff = f[        U5      UeSnAff = f)zn
:return: memory map of that file to allow random read access
:raise BadObject: if object could not be located)ÚflagsN)	r=   r9   r   r   r/   ÚOSErrorÚerrnor   r   )r0   Úshar=   ÚeÚnew_es        r3   Ú_map_loose_objectÚLooseObjectDB._map_loose_object   s�   € ð —,‘,˜t×/Ñ/´
¸3³Ó@ÓAˆð	,Ü,¨W×<OÑ<OÑPÐPøÜó 
	,Ø�w‰wœ&Ó ð4Ü4°WÓ=Õ=øÜó 4Ü# C›.¨eÐ3ûð4úô
   “n¨!Ð+ûð
	,ús9   «> ¾
BÁBÁ
A-Á'BÁ-
BÁ7BÂBÂBÂBc                 óŠ   >• Ub1  [        U[        5      (       d  [        S[        R                  -  5      e[        TU ]  U5      $ )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)r0   Ústreamr2   s     €r3   rV   ÚLooseObjectDB.set_ostream”   s<   ø€ àÑ¤j°¼×&DÑ&DÜÐJÌZ×M`ÑM`Ñ`ÓaÐaÜ‰wÑ" 6Ó*Ð*r5   c                 óê   • U R                  U5      n [        U5      u  p4[        XU5      [        US5      (       a  UR	                  5         $ $ ! [        US5      (       a  UR	                  5         f f = f)NÚclose)rP   r   r   ÚhasattrrZ   )r0   rM   ÚmÚtypÚsizes        r3   ÚinfoÚLooseObjectDB.infoš   sd   € Ø×"Ñ" 3Ó'ˆð	Ü0°Ó3‰IˆCÜ˜ 4Ó(ä�q˜'×"Ñ"Ø—‘•	ð #øŒw�q˜'×"Ñ"Ø—‘•	ð #ús   “A Á$A2c                 ól   • U R                  U5      n[        R                  " USS9u  p4n[        XXE5      $ )NT)Úclose_on_deletion)rP   r	   Únewr   )r0   rM   r\   Útyper^   rW   s         r3   rW   ÚLooseObjectDB.stream¤   s6   € Ø×"Ñ" 3Ó'ˆÜ3×7Ò7¸ÈTÑRÑˆ�FÜ�s $Ó/Ð/r5   c                 óZ   •  U R                  [        U5      5        g! [         a     gf = f)NTF)r?   r   r   )r0   rM   s     r3   Ú
has_objectÚLooseObjectDB.has_object©   s.   € ð	Ø×(Ñ(¬°C«Ô9ØøÜó 	Ùð	ús   ‚ �
*©*c                 ó¸  • SnU R                  5       nUcE  [        R                  " SU R                  S9u  pBUR                  c  [        U5      nO[        U5      n  UR                  b;  [        UR                  UR                  [        R                  U R                  5        O?[        UR                  UR                  UR                  UR                  U R                  S9  U(       a  UR!                  5         SnUR                  (       a  UR$                  nOUR'                  SS9nU(       a¸  U R)                  U R+                  U5      5      n[-        U5      n[.        R0                  " USS9  [3        U5      (       a  [#        U5        O[5        X&5        S H1  n[7        [8        5         [;        X`R<                  5         SSS5          O   [9        S
RC                  U5      5      e[E        U5      Ul        U$ ! U(       a  UR!                  5         f f = f!   U(       a  [#        U5        e = f! , (       d  f       O= f[>        R@                  " US	-  5        MÂ  )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_pathrF   r
   r   r   ÚreadÚwriteÚsysÚmaxsizeÚstream_chunk_sizer   rd   r^   rZ   r   r8   rM   r=   r9   r   r.   Úmakedirsr   r   r   ÚPermissionErrorr   Únew_objects_modeÚtimeÚsleepÚformatr   )	r0   ÚistreamÚtmp_pathÚwriterÚfdr8   Úobj_pathÚobj_dirÚexp_backoff_mss	            r3   ÚstoreÚ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Õ.ô ˜(×$9Ñ$9Ô:Ø÷	 /Ñ.ñ #]ô &Ø<×CÑCÀHÓMóð ô $ FÓ+ˆŒØˆøö_ Ø—L‘L•Nð ûð	ÞÜ�xÔ Øú÷6 /Õ.úô
 —
’
˜>¨FÑ2Ö3s+   ÁBG; Ã$H Æ,H0Ç;HÈH ÈH-È0
H>	c              #   óò   #   • [         R                  " U R                  5       5       HK  u  pn[        U5      n[	        U5      S:w  a  M"  U H#  n[	        U5      S:w  a  M  [        XE-   5      v •  M%     MM     g 7f)Nr7   é&   )r.   Úwalkr1   r   Úlenr   )r0   ÚrootÚdirsÚfilesÚ	root_baseÚfs         r3   rB   ÚLooseObjectDB.sha_iterý   sa   é € ä!#§¢¨¯©Ó)9Ö!:ÑˆD˜Ü  ›ˆIÜ�9‹~ Ó"Ùã�Ü�q“6˜R“<ÙÜ  ¡Ó/Ô/ó ò ";ùs   ‚A5A7c                 óF   • [        [        U R                  5       5      5      $ )N)r˜   ÚtuplerB   )r0   s    r3   r^   ÚLooseObjectDB.size  s   € Ü”5˜Ÿ™›Ó)Ó*Ð*r5   )r/   r,   )rU   Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r…   Úintrˆ   r.   Únamer*   r9   r?   rG   rP   rV   r_   rW   rg   r“   rB   r^   Ú__static_attributes__Ú__classcell__)r2   s   @r3   r    r    ?   sv   ø† á9ð #Ðñ ˜5 !“}ÐØ	‡w�w�$ƒÙ˜u a›=Ðõ:ò,ò ò ò&,õ*+òò0ò
òJòX
0÷+ð +r5   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   r~   r.   rƒ   r‰   Ú__all__r    © r5   r3   Ú<module>r´      sp   ðõ
  ÷ñ ÷÷
ó ÷÷
÷ ÷ ó ÷ó õ -ã Û 	Û 
Û ð €ôM+�J 	¨9õ M+r5   