§ |<ˆjxk ã ó’ — d dl mZ d dlZd dlZd dlZd dlZd dlmZmZm Z m Z mZ d dlm Z mZmZmZmZ d dlmZmZ d dlmZ dZ d dlmZ d Zn# e$ r Y nw xY wd Z G d„ de¦ « Z G d „ de¦ « Z G d„ d¦ « Z G d„ de¦ « Z G d„ de¦ « Z! G d„ de¦ « Z" G d„ d¦ « Z# G d„ d¦ « Z$dS )é )ÚBytesION)Úmsb_sizeÚstream_copyÚapply_delta_dataÚconnect_deltasÚdelta_types)Úallocate_memoryÚ LazyMixinÚmake_shaÚwriteÚclose)Ú NULL_BYTEÚ BYTE_SPACE)Úforce_bytesF)Úapply_deltaT) ÚDecompressMemMapReaderÚFDCompressedSha1WriterÚDeltaApplyReaderÚ Sha1WriterÚFlexibleSha1WriterÚZippedStoreShaWriterr ÚFDStreamÚ NullStreamc ó† — e Zd ZdZdZdZdd„Zd„ Zd„ Zd„ Z e dd „¦ « Zd„ Zd„ Z d „ Z eedd¦ « fd„Zdd„ZdS )r a£ Reads data in chunks from a memory map and decompresses it. The client sees only the uncompressed data, respective file-like read calls are handling on-demand buffered decompression accordingly A constraint on the total size of bytes is activated, simulating a logical file within a possibly larger physical memory area To read efficiently, you clearly don't want to read individual bytes, instead, read a few kilobytes at least. **Note:** The chunk-size should be carefully selected as it will involve quite a bit of string copying due to the way the zlib is implemented. Its very wasteful, hence we try to find a good tradeoff between allocation time and number of times we actually allocate. An own zlib implementation would be good here to better support streamed reading - it would only need to keep the mmap and decompress it into chunks, that's all ... )Ú_mÚ_zipÚ_bufÚ_buflenÚ_brÚ_cwsÚ_cweÚ_sÚ_closeÚ_cbrÚ_phii Nc óÆ — || _ t j ¦ « | _ d| _ d| _ |�|| _ d| _ d| _ d| _ d| _ d| _ || _ dS )z|Initialize with mmap for stream reading :param m: must be content data - use new if you have object data and no sizeNr F) r ÚzlibÚ decompressobjr r r r" r r r! r$ r% r# )ÚselfÚmÚclose_on_deletionÚsizes ú^/builddir/build/BUILD/cloudlinux-venv-1.0.12/venv/lib/python3.11/site-packages/gitdb/stream.pyÚ__init__zDecompressMemMapReader.__init__E sd € 𠈌ÝÔ&Ñ(Ô(ˆŒ ؈Œ ؈ŒØÐ؈DŒG؈ŒØˆŒ ؈Œ ؈Œ ؈Œ Ø'ˆŒˆˆó c ó> — |dk sJ ‚| ¦ « d S )Nr" )Ú_parse_header_info©r) Úattrs r- Ú_set_cache_z"DecompressMemMapReader._set_cache_U s) € Ø�tŠ|ˆ|ˆ|ˆ|ð ×ÒÑ!Ô!Ð!Ð!Ð!r/ c ó. — | ¦ « d S ©N)r ©r) s r- Ú__del__zDecompressMemMapReader.__del__[ s € Ø� Š ‰Œˆˆˆr/ c ó| — d}|| _ | |¦ « }| t ¦ « }|d|… t ¦ « \ }}t |¦ « }|| _ d| _ |dz }t ||d… ¦ « | _ t |¦ « |z | _ d| _ ||fS )z¶If this stream contains object data, parse the header info and skip the stream to a point where each read will yield object content :return: parsed type_string, sizei Nr é T) r" ÚreadÚfindr Úsplitr Úintr r r Úlenr r% )r) ÚmaxbÚhdrÚhdrendÚtypr, s r- r1 z)DecompressMemMapReader._parse_header_info^ s € ð ˆØˆŒØ�iŠi˜‰oŒoˆØ—’�)Ñ$Ô$ˆØ˜˜˜”L×&Ò&¥zÑ2Ô2‰ ˆˆTÝ�4‰yŒyˆØˆŒð ˆŒØ�!‰ˆÝ˜C œLÑ)Ô)ˆŒ ݘ3‘x”x &Ñ(ˆŒàˆŒ à�DˆyÐr/ Fc ó\ — t ||d¦ « }| ¦ « \ }}|||fS )a¦ Create a new DecompressMemMapReader instance for acting as a read-only stream This method parses the object header from m and returns the parsed type and size, as well as the created stream instance. :param m: memory map on which to operate. It must be object data ( header + contents ) :param close_on_deletion: if True, the memory map will be closed once we are being deletedr )r r1 )r) r* r+ ÚinstrC r, s r- ÚnewzDecompressMemMapReader.new{ s7 € õ & aÐ):¸AÑ>Ô>ˆØ×+Ò+Ñ-Ô-‰ ˆˆTØ�D˜$ˆÐr/ c ó — | j S )z8:return: random access compatible data we are working on)r r7 s r- ÚdatazDecompressMemMapReader.dataˆ s € àŒwˆr/ c ó‚ — | j r7t | j d¦ « r| j ¦ « d| _ dS dS )zÀClose our underlying stream of compressed bytes if this was allowed during initialization :return: True if we closed the underlying stream :note: can be called safely r FN)r# Úhasattrr r r7 s r- r zDecompressMemMapReader.closeŒ sF € ð Œ;ð Ý�t”w Ñ(Ô(ð Ø”— ’ ‘”�؈DŒKˆKˆKð ð r/ c ó" — | j | j k rù| j j síd| _ t | j d¦ « rT| j j t j k r9| t j ¦ « | j j t j k °9nq| j j se| j t | j ¦ « k rH| t j ¦ « | j j s| j t | j ¦ « k °H| j | _ | j S )zŒ :return: number of compressed bytes read. This includes the bytes it took to decompress the header ( if there was one )r Ústatus)r r" r Úunused_datarJ rL r' ÚZ_OKr; ÚmmapÚPAGESIZEr$ r? r r7 s r- Úcompressed_bytes_readz,DecompressMemMapReader.compressed_bytes_read— sä € ð0 Œ8�t”wÒÐ t¤yÔ'<Ðð ˆDŒHÝ�t”y (Ñ+Ô+ð -Ø”iÔ&$¬)Ò3Ð3Ø—I’I�dœmÑ,Ô,Ð,ð ”iÔ&$¬)Ò3Ð3øð œ)Ô/ð -°D´IÅÀTÄWÁÄÒ4MÐ4MØ—I’I�dœmÑ,Ô,Ð,ð œ)Ô/ð -°D´IÅÀTÄWÁÄÒ4MÐ4Mð ”wˆDŒHð ŒyÐr/ ÚSEEK_SETr c óð — |dk s|t t dd¦ « k rt d¦ « ‚t j ¦ « | _ dx| _ x| _ x| _ | _ | j rd| _ | `dS dS )zgAllows to reset the stream to restart reading :raise ValueError: If offset and whence are not 0r rR úCan only seek to position 0FN)ÚgetattrÚosÚ ValueErrorr' r( r r r r! r$ r% r" ©r) ÚoffsetÚwhences r- ÚseekzDecompressMemMapReader.seekÈ s„ € ð �QŠ;ˆ;˜&¥GB° ¸AÑ$>Ô$>Ò>Ð>ÝÐ:Ñ;Ô;Ð;õ Ô&Ñ(Ô(ˆŒ Ø78Ð8ˆŒÐ8�4”9Ð8˜tœy¨4¬9ØŒ9ð ØˆDŒIØ���ð ð r/ éÿÿÿÿc óR — |dk r| j | j z }nt || j | j z ¦ « }|dk rdS d}| j r�| j |k r<| j |¦ « }| xj |z c_ | xj |z c_ |S | j ¦ « }|| j z }| xj | j z c_ d| _ d | _ | j j }|r,| j t |¦ « z | _ | j |z | _ n| j }| j | _ ||z | _ | j | j z dk r| j dz | _ | j | j | j … }| j t |¦ « z | _ | j ||¦ « }t j dv r*t j dk st | j j ¦ « }n3t | j j ¦ « t | j j ¦ « z }| xj t |¦ « |z z c_ | xj t |¦ « z c_ |r||z }|r[t |¦ « t |¦ « z |k r8| j | j k r(|| |t |¦ « z ¦ « z }|S )Nr: r r/ é )z1.2.7z1.2.5Údarwin)r" r Úminr r r; r Úunconsumed_tailr! r? r r Ú decompressr' ÚZLIB_VERSIONÚsysÚplatformrM r$ )r) r, ÚdatÚtailÚcwsÚindataÚdcompdatÚunused_datalens r- r; zDecompressMemMapReader.readÖ s„ € Ø�!Š8ˆ8Ø”7˜TœXÑ%ˆDˆDå�t˜TœW t¤xÑ/Ñ0Ô0ˆDð �1Š9ˆ9Ø�3ð ˆØŒ9ð !ØŒ|˜tÒ#Ð#à”i—n’n TÑ*Ô*�Ø�” Ñ$�”Ø�”˜DÑ �”Ø� à”i—n’nÑ&Ô&�ؘœÑ$�Ø�”˜DœLÑ(�”à �”Ø �” ð ŒyÔ(ˆØð #ð œ ¥C¨¡I¤IÑ-ˆDŒIØœ DÑ(ˆDŒIˆIà”)ˆCØœ ˆDŒIؘd™ ˆDŒIð Œ9�t”yÑ 1Ò$Ð$Øœ A™ ˆDŒI𠔘œ 4¤9Ð,Ô-ˆð ”I¥ F¡¤Ñ+ˆŒ Ø”9×'Ò'¨°Ñ5Ô5ˆõ ÔÐ 2Ð2Ð2½3¼<È8Ò;SÐ;SÝ ¤Ô!:Ñ;Ô;ˆNˆNå ¤Ô!:Ñ;Ô;½cÀ$Ä)ÔBWÑ>XÔ>XÑXˆNð ˆ Œ •S˜‘[”[ >Ñ1Ñ1ˆ Œ ؈Œ•C˜‘M”MÑ!ˆŒàð &ؘX‘~ˆHð ð 8�˜X™œ¨S©¬Ñ1°TÒ9Ð9¸d¼hÈÌÒ>PÐ>PؘŸ š $¨X©¬Ñ"6Ñ7Ô7Ñ7ˆHàˆr/ r6 ©F)r\ )Ú__name__Ú __module__Ú__qualname__Ú__doc__Ú __slots__Ú max_read_sizer. r4 r8 r1 ÚclassmethodrF rH r rQ rU rV r[ r; © r/ r- r r . sü € € € € € ð:ð :ð !€Ið €Mð(ð (ð (ð (ð "ð "ð "ðð ð ðð ð ð: ð ð ð ñ „[ð ðð ð ð ð ð ð-ð -ð -ðb #* '¨"¨j¸!Ñ"<Ô"<ð ð ð ð ðið ið ið ið ið ir/ r c óº — e Zd ZdZdZdZd„ Zd„ Zd„ Ze seZ neZ dd„Z ee d d¦ « fd „Zed„ ¦ « Zed„ ¦ « Zed „ ¦ « Zed„ ¦ « ZdS )r aµ A reader which dynamically applies pack deltas to a base object, keeping the memory demands to a minimum. The size of the final object is only obtainable once all deltas have been applied, unless it is retrieved from a pack index. The uncompressed Delta has the following layout (MSB being a most significant bit encoded dynamic size): * MSB Source Size - the size of the base against which the delta was created * MSB Target Size - the size of the resulting data after the delta was applied * A list of one byte commands (cmd) which are followed by a specific protocol: * cmd & 0x80 - copy delta_data[offset:offset+size] * Followed by an encoded offset into the delta data * Followed by an encoded size of the chunk to copy * cmd & 0x7f - insert * insert cmd bytes from the delta buffer into the output stream * cmd == 0 - invalid operation ( or error in delta stream ) )Ú_bstreamÚ _dstreamsÚ _mm_targetÚ_sizer i€²æc ó — t |¦ « dk s J d¦ « ‚|d | _ t |dd… ¦ « | _ d| _ dS )zÏInitialize this instance with a list of streams, the first stream being the delta to apply on top of all following deltas, the last stream being the base object onto which to apply the deltasr: z+Need at least one delta and one base streamr\ Nr )r? rv Útuplerw r )r) Ústream_lists r- r. zDeltaApplyReader.__init__h sT € õ �;ÑÔ !Ò#Ð#Ð#Ð%RÑ#Ô#Ð#à# BœˆŒ ݘ{¨3¨B¨3Ô/Ñ0Ô0ˆŒØˆŒˆˆr/ c óp — t | j ¦ « dk r| |¦ « S t | j ¦ « }| ¦ « dk rd| _ t d¦ « | _ d S | ¦ « | _ t | j ¦ « | _ t | j j ¦ « }t | j j |j | j j dt j z ¦ « | j j }| ||¦ « | j d¦ « d S )Nr: r é )r? rw Ú_set_cache_brute_r Úrboundry r rx rv r, r r; r rO rP Úapplyr[ )r) r3 ÚdclÚbbufr s r- Ú_set_cache_too_slow_without_cz.DeltaApplyReader._set_cache_too_slow_without_cr s € õ ˆtŒ~ÑÔ !Ò#Ð#Ø×)Ò)¨$Ñ/Ô/Ð/õ ˜Tœ^Ñ,Ô,ˆð �:Š:‰<Œ<˜1ÒÐØˆDŒJÝ-¨aÑ0Ô0ˆDŒO؈Fð —Z’Z‘\”\ˆŒ Ý)¨$¬*Ñ5Ô5ˆŒå˜tœ}Ô1Ñ2Ô2ˆÝ�D”MÔ&¨¬ °D´MÔ4FÈÍdÌmÑH[Ñ\Ô\Ð\ð ”Ô%ˆØ� Š �$˜ÑÔÐàŒ×Ò˜QÑÔÐÐÐr/ c óN — t ¦ « }d}| j D ]m}| d¦ « }t |¦ « \ }}t ||¦ « \ }}| ||d… |||f¦ « t ||¦ « }Œn| j j } |}t | j ¦ « dk rt | |¦ « x} }t | ¦ « } t | j j | j | dt j z ¦ « t |¦ « }d}t t |¦ « t | j ¦ « ¦ « D ]Û\ \ } }}}}t |j |z ¦ « }| | ¦ « t |j |j |j dt j z ¦ « dt! ¦ « v rt# | ||¦ « n%t% | ||t |¦ « |j ¦ « || }} | d¦ « | d¦ « |}ŒÜ| | _ || _ dS )z*If we are here, we apply the actual deltasr i Nr: r~ Ú c_apply_delta)Úlistrw r; r ÚappendÚmaxrv r, r? r r r rO rP ÚzipÚreversedÚglobalsr† r r[ rx ry )r) r3 Úbuffer_info_listÚmax_target_sizeÚdstreamÚbufrY Úsrc_sizeÚtarget_sizeÚ base_sizerƒ ÚtbufÚfinal_target_sizeÚdbufÚddatas r- r z"DeltaApplyReader._set_cache_brute_” s% € õ ™6œ6ÐØˆØ”~ð @ð @ˆGØ—,’,˜sÑ#Ô#ˆCÝ'¨™}œ}шF�HÝ"*¨3°Ñ"7Ô"7шF�KØ×#Ò# S¨¨¨¤\°6¸8À[Ð$QÑRÔRÐRÝ! /°;Ñ?Ô?ˆOˆOð ”MÔ&ˆ Ø%ˆõ ˆtŒ~ÑÔ Ò"Ð"Ý&)¨)°_Ñ&EÔ&EÐEˆI˜õ ˜yÑ)Ô)ˆÝ�D”MÔ&¨¬ °I¸sÅTÄ]Ñ?RÑSÔSÐSõ ˜{Ñ+Ô+ˆð !ÐÝ>AÅ(ÐK[ÑB\ÔB\Õ^fÐgkÔguÑ^vÔ^vÑ>wÔ>wð ,ð ,Ñ:Ñ1ˆT�6˜8 [°7õ $ G¤L°6Ñ$9Ñ:Ô:ˆEØ�KŠK˜ÑÔÐ嘜 e¤k°7´<ÀÅtÄ}ÑATÑUÔUÐUð ¥'¡)¤)Ð+Ð+ݘd E¨4Ñ0Ô0Ð0Ð0å x°½¸E¹ ¼ ÀDÄJÑOÔOÐOð ˜t�$ˆDØ�IŠI�a‰LŒLˆLØ�IŠI�a‰LŒLˆLØ +ÐÐ𠈌Ø&ˆŒ ˆ ˆ r/ r c ó® — | j | j z }|dk s||k r|}| j |¦ « }| xj t |¦ « z c_ |S )Nr: )ry r rx r; r? )r) ÚcountÚblrH s r- r; zDeltaApplyReader.readæ sX € Ø ŒZ˜$œ(Ñ "ˆØ�1Š9ˆ9˜ š ˜ ØˆEð Œ×#Ò# EÑ*Ô*ˆØˆŒ•C˜‘I”IшŒØˆr/ rR c ó¦ — |dk s|t t dd¦ « k rt d¦ « ‚d| _ | j d¦ « dS )zhAllows to reset the stream to restart reading :raise ValueError: If offset and whence are not 0r rR rT N)rU rV rW r rx r[ rX s r- r[ zDeltaApplyReader.seekð sU € ð �QŠ;ˆ;˜&¥GB° ¸AÑ$>Ô$>Ò>Ð>ÝÐ:Ñ;Ô;Ð;àˆŒØŒ×Ò˜QÑÔÐÐÐr/ c ó¾ — t |¦ « dk rt d¦ « ‚|d j t v rt d|d j z ¦ « ‚ | |¦ « S )a Convert the given list of streams into a stream which resolves deltas when reading from it. :param stream_list: two or more stream objects, first stream is a Delta to the object that you want to resolve, followed by N additional delta streams. The list's last stream must be a non-delta stream. :return: Non-Delta OPackStream object whose stream can be used to obtain the decompressed resolved data :raise ValueError: if the stream list cannot be handledé zNeed at least two streamsr\ zNCannot resolve deltas if there is no base object stream, last one was type: %s)r? rW Útype_idr Útype)Úclsr| s r- rF zDeltaApplyReader.newü ss € õ ˆ{ÑÔ˜aÒÐÝÐ8Ñ9Ô9Ð9ð �rŒ?Ô"¥kÐ1Ð1ÝØ`ÐcnÐoqÔcrÔcwÑwñyô yð yð ˆs�;ÑÔÐr/ c ó — | j j S r6 )rv rŸ r7 s r- rŸ zDeltaApplyReader.type s € àŒ}Ô!Ð!r/ c ó — | j j S r6 )rv rž r7 s r- rž zDeltaApplyReader.type_id s € àŒ}Ô$Ð$r/ c ó — | j S )z3:return: number of uncompressed bytes in the stream)ry r7 s r- r, zDeltaApplyReader.size s € ð ŒzÐr/ N©r )rm rn ro rp rq Úk_max_memory_mover. r„ r Úhas_perf_modr4 r; rU rV r[ rs rF ÚpropertyrŸ rž r, rt r/ r- r r B s € € € € € ðð ð0€Ið *Ððð ð ð ð ð ðDH'ð H'ð H'ðV ð 4Ø'ˆˆà3ˆðð ð ð ð #* '¨"¨j¸!Ñ"<Ô"<ð ð ð ð ð ð ð ñ „[ð ð4 ð"ð "ñ „Xð"ð ð%ð %ñ „Xð%ð ðð ñ „Xðð ð r/ r c ó* — e Zd ZdZdZd„ Zd„ Zdd„ZdS ) r zpSimple stream writer which produces a sha whenever you like as it degests everything it is supposed to writeÚsha1c ó, — t ¦ « | _ d S r6 )r r© r7 s r- r. zSha1Writer.__init__2 s € Ý‘J”JˆŒ ˆ ˆ r/ c óT — | j |¦ « t |¦ « S )z{:raise IOError: If not all bytes could be written :param data: byte object :return: length of incoming data)r© Úupdater? ©r) rH s r- r zSha1Writer.write7 s&