§ |<ˆj{ãóŒ—dZddlmZmZmZddlmZddlmZm Z m Z ddl m Z ddl mZddlZddlZdZGd „d eeee¦«ZdS) z/Module containing a database to deal with packsé)Ú FileDBBaseÚ ObjectDBRÚ CachingDB)Ú LazyMixin)Ú BadObjectÚUnsupportedOperationÚAmbiguousObjectName)Ú PackEntity)ÚreduceN)ÚPackedDBcóp‡—eZdZdZdZˆfd„Zd„Zd„Zd„Zd„Z d„Z d „Z d „Z d „Z d „Zdd„Zd„Zd„ZˆxZS)r z-A database operating on a set of object packsiôcóf•—t¦« |¦«d|_d|_dS©Nr)ÚsuperÚ__init__Ú _hit_countÚ _st_mtime)ÚselfÚ root_pathÚ __class__s €ú_/builddir/build/BUILD/cloudlinux-venv-1.0.12/venv/lib/python3.11/site-packages/gitdb/db/pack.pyrzPackedDB.__init__)s/ø€Ý ‰Œ×Ò˜Ñ#Ô#Ð#𠈌؈Œˆˆócóh—|dkr+t¦«|_| d¬¦«dSdS)NÚ _entitiesT)Úforce)ÚlistrÚ update_cache)rÚattrs rÚ _set_cache_zPackedDB._set_cache_3s=€Ø �;Ò Ð Ý!™VœVˆDŒNØ × Ò  DÐ Ñ )Ô )Ð )Ð )Ð )ð Ð rcó@—|j d„d¬¦«dS)Ncó—|dSr©)Úls rúz)PackedDB._sort_entities..:s €¨!¨A¬$€rT)ÚkeyÚreverse)rÚsort©rs rÚ_sort_entitieszPackedDB._sort_entities9s%€Ø Œ×Ò  ¸ÐÑ=Ô=Ð=Ð=Ð=rcó—|j|jzdkr| ¦«|jD]A}|d|¦«}|�,|dxxdz cc<|xjdz c_|d|fcSŒBt |¦«‚)a©:return: tuple(entity, index) for an item at the given sha :param sha: 20 or 40 byte sha :raise BadObject: **Note:** This method is not thread-safe, but may be hit in multi-threaded operation. The worst thing that can happen though is a counter that was not incremented, or the list being in wrong order. So we safe the time for locking here, lets see how that goesréNé)rÚ_sort_intervalr)rr)rÚshaÚitemÚindexs rÚ _pack_infozPackedDB._pack_info<s¢€ð Œ?˜TÔ0Ñ 0°AÒ 5Ð 5Ø × Ò Ñ !Ô !Ð !ð”Nð (ð (ˆDØ�D˜”G˜C‘L”LˆEØÐ Ø�Q��”˜1‘ ��‘Ø�” 1Ñ$�”ؘQœ Ð'Ð'Ð'Ð'ð!õ˜‰nŒnÐrcóT— | |¦«dS#t$rYdSwxYw)NTF)r1r)rr.s rÚ has_objectzPackedDB.has_objectYs@€ð Ø �OŠO˜CÑ Ô Ð Ø�4øÝð ð ð Ø�5�5ð øøøs ‚™ '¦'có\—| |¦«\}}| |¦«S©N)r1Ú info_at_index©rr.Úentityr0s rÚinfoz PackedDB.infoas+€ØŸš¨Ñ,Ô,‰ ˆ�Ø×#Ò# EÑ*Ô*Ð*rcó\—| |¦«\}}| |¦«Sr5)r1Ústream_at_indexr7s rÚstreamzPackedDB.streames+€ØŸš¨Ñ,Ô,‰ ˆ�Ø×%Ò% eÑ,Ô,Ð,rc#óÐK—| ¦«D]N}| ¦«}|j}t| ¦«¦«D]}||¦«V—ŒŒOdSr5)Úentitiesr0r.ÚrangeÚsize)rr8r0Ú sha_by_indexs rÚsha_iterzPackedDB.sha_iterisxèè€Ø—m’m‘o”oð *ð *ˆFØ—L’L‘N”NˆEØ œ9ˆLݘuŸzšz™|œ|Ñ,Ô,ð *ð *�Ø"�l 5Ñ)Ô)Ð)Ð)Ð)Ð)ð *ð *ð *rcóH—d„|jD¦«}td„|d¦«S)Ncóf—g|].}|d ¦« ¦«‘Œ/S©r,)r0r@©Ú.0r/s rú z!PackedDB.size..ss0€ÐCÐCÐC¨D��a”—’‘”×%Ò%Ñ'Ô'ÐCÐCÐCrcó —||zSr5r")ÚxÚys rr$zPackedDB.size..ts € 1 q¡5€rr)rr )rÚsizess rr@z PackedDB.sizers-€ØCÐC°D´NÐCÑCÔCˆÝÐ(Ð(¨%°Ñ3Ô3Ð3rcó—t¦«‚)z§Storing individual objects is not feasible as a pack is designed to hold multiple objects. Writing or rewriting packs for single objects is inefficient)r)rÚistreams rÚstorezPackedDB.storezs€õ#Ñ$Ô$Ð$rFcó,—tj| ¦«¦«}|s|j|jkrdS|j|_t t jtj | ¦«d¦«¦«¦«}d„|j D¦«}||z D]i}t|¦«}|j   |  ¦«  ¦«|| ¦«jg¦«Œj||z D]b}d}t!|j ¦«D]9\}} | d  ¦« ¦«|kr|}nŒ:|dksJ‚|j |=Œc| ¦«dS)aÆ Update our cache with the actually existing packs on disk. Add new ones, and remove deleted ones. We keep the unchanged ones :param force: If True, the cache will be updated even though the directory does not appear to have changed according to its modification timestamp. :return: True if the packs have been updated so there is new information, False if there was no change to the pack databaseFz pack-*.packcóf—h|].}|d ¦« ¦«’Œ/SrE)ÚpackÚpathrFs rú z(PackedDB.update_cache..–s0€ÐKÐKÐK°D˜$˜qœ'Ÿ,š,™.œ.×-Ò-Ñ/Ô/ÐKÐKÐKréÿÿÿÿr,T)ÚosÚstatrÚst_mtimerÚsetÚglobrSÚjoinrr ÚappendrRr@r0Ú sha_to_indexÚ enumerater)) rrrWÚ pack_filesÚour_pack_filesÚ pack_filer8Ú del_indexÚir/s rrzPackedDB.update_cache„sŽ€õŒw�t—~’~Ñ'Ô'Ñ(Ô(ˆØð ˜œ¨$¬.Ò8Ð8Ø�5àœˆŒõ�œ¥2¤7§<¢<°·²Ñ0@Ô0@À-Ñ#PÔ#PÑQÔQÑRÔRˆ ØKÐK¸D¼NÐKÑKÔKˆð% ~Ñ5ð _ð _ˆIõ   Ñ*Ô*ˆFØ ŒN× !Ò ! 6§;¢;¡=¤=×#5Ò#5Ñ#7Ô#7¸ÀÇÂÁÄÔA\Ð"]Ñ ^Ô ^Ð ^Ð ^ð)¨:Ñ5ð +ð +ˆI؈IÝ$ T¤^Ñ4Ô4ð ð ‘��4ؘ”7—<’<‘>”>×&Ò&Ñ(Ô(¨IÒ5Ð5Ø !�IØ�Eð6ð  ’?�?�?�?Ø”˜yÐ)Ð)ð ×ÒÑÔÐØˆtrcó$—d„|jD¦«S)z=:return: list of pack entities operated upon by this databasecó—g|] }|d‘Œ SrEr"rFs rrHz%PackedDB.entities..³s€Ð3Ð3Ð3˜D��Q”Ð3Ð3Ð3r)rr(s rr>zPackedDB.entities±s€à3Ð3 D¤NÐ3Ñ3Ô3Ð3rcó,—d}|jD]x}|d ¦« ||¦«}|�F|d ¦« |¦«}|r||krt |¦«‚|}Œy|r|St |¦«‚)a£:return: 20 byte sha as inferred by the given partial binary sha :param partial_binsha: binary sha with less than 20 bytes :param canonical_length: length of the corresponding canonical representation. It is required as binary sha's cannot display whether the original hex sha had an odd or even number of characters :raise AmbiguousObjectName: :raise BadObject: Nr,)rr0Úpartial_sha_to_indexr.r r)rÚpartial_binshaÚcanonical_lengthÚ candidater/Ú item_indexr.s rÚpartial_to_complete_shaz PackedDB.partial_to_complete_shaµs§€ðˆ Ø”Nð ð ˆDؘaœŸš™œ×=Ò=¸nÐN^Ñ_Ô_ˆJØÐ%ؘ1”g—m’m‘o”o×)Ò)¨*Ñ5Ô5�Øð> ¨cÒ!1Ð!1Ý-¨nÑ=Ô=Ð=Ø� øð ð ØÐ õ˜Ñ'Ô'Ð'r)F)Ú__name__Ú __module__Ú __qualname__Ú__doc__r-rrr)r1r3r9r<rBr@rOrr>rlÚ __classcell__)rs@rr r sÿø€€€€€à7Ð7ð €Nðððððð*ð*ð*ð >ð>ð>ðððð:ððð+ð+ð+ð-ð-ð-ð*ð*ð*ð4ð4ð4ð%ð%ð%ð+ð+ð+ð+ðZ4ð4ð4ð(ð(ð(ð(ð(ð(ð(rr )rpÚ gitdb.db.baserrrÚ gitdb.utilrÚ gitdb.excrrr Ú gitdb.packr Ú functoolsr rVrZÚ__all__r r"rrúrxsðð 6Ð5ððððððððððð !Ð Ð Ð Ð Ð ððððððððððð "Ð!Ð!Ð!Ð!Ð!àÐÐÐÐÐà € € € Ø € € € à €ð l(ðl(ðl(ðl(ðl(ˆz˜9 i°ñl(ôl(ðl(ðl(ðl(r