1jxk 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_sizestream_copyapply_delta_dataconnect_deltasdelta_types)allocate_memory LazyMixinmake_shawriteclose) NULL_BYTE BYTE_SPACE)force_bytesF)apply_deltaT) DecompressMemMapReaderFDCompressedSha1WriterDeltaApplyReader Sha1WriterFlexibleSha1WriterZippedStoreShaWriterr FDStream NullStreamc e Zd ZdZdZdZddZd Zd Zd Z e dd Zd Zd Z d Z eedd fdZddZdS )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# )selfmclose_on_deletionsizes ^/builddir/build/BUILD/cloudlinux-venv-1.0.11/venv/lib/python3.11/site-packages/gitdb/stream.py__init__zDecompressMemMapReader.__init__E sd &(( DG ' c > |dk sJ | d S )Nr" )_parse_header_infor) 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 )zIf 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" readfindr splitr intr r r lenr r% )r) maxbhdrhdrendtypr, s r- r1 z)DecompressMemMapReader._parse_header_info^ s iioo)$$L&&z22 T4yy !CL)) 3xx&( Dyr/ 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>>++-- TD$r/ c | j S )z8:return: random access compatible data we are working on)r r7 s r- datazDecompressMemMapReader.data s wr/ c | j r7t | j d r| j d| _ dS dS )zClose 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 ; tw(( DKKK r/ c " | j | j k r| j j sd| _ 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; mmapPAGESIZEr$ r? r r7 s r- compressed_bytes_readz,DecompressMemMapReader.compressed_bytes_read s 0 8twty'< DHty(++ -i&$)33IIdm,,, i&$)33 )/ -DITW4M4MIIdm,,, )/ -DITW4M4M wDH yr/ 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)getattros ValueErrorr' r( r r r r! r$ r% r" r) offsetwhences r- seekzDecompressMemMapReader.seek s Q;;&GB A$>$>>>:;;; &(( 7888498ty499 DI 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.5darwin)r" r minr r r; r unconsumed_tailr! r? r r decompressr' ZLIB_VERSIONsysplatformrM r$ )r) r, dattailcwsindatadcompdatunused_datalens r- r; zDecompressMemMapReader.read s !887TX%DDtTWtx/00D 1993 9 !|t##innT**$D inn&&$DL( y( # CII-DI D(DII)C DId DI 9ty 1$$ A DI 49,- IF+ 9''55 2223<8;S;S !:;;NN !:;;c$)BW>X>XXN S[[>11 CMM! &X~H 8XS1T99dh>P>P $X"6777Hr/ 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!"<"<