§
    .Ph  ã                   ó„   — d Z ddlmZ ddlmZmZ ddlmZmZ ddl	m
Z
mZ ddlmZmZ ddlmZ dZ G d	„ d
ee¦  «        ZdS )z*Contains the MemoryDatabase implementationé    )ÚLooseObjectDB)Ú	ObjectDBRÚ	ObjectDBW)ÚOStreamÚIStream)Ú	BadObjectÚUnsupportedOperation)ÚZippedStoreShaWriterÚDecompressMemMapReader)ÚBytesIO)ÚMemoryDBc                   óR   ‡ — e Zd ZdZˆ fd„Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zˆ xZS )r   a/  A memory database stores everything to memory, providing fast IO and object
    retrieval. It should be used to buffer results and obtain SHAs before writing
    it to the actual physical storage, as it allows to query whether object already
    exists in the target storage before introducing actual IOc                 ó–   •— t          ¦   «                              ¦   «          t          d¦  «        | _        t	          ¦   «         | _        d S )Nzpath/doesnt/matter)ÚsuperÚ__init__r   Ú_dbÚdictÚ_cache)ÚselfÚ	__class__s    €úL/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/gitdb/db/mem.pyr   zMemoryDB.__init__'   s:   ø€ Ý‰Œ×ÒÑÔÐÝ Ð!5Ñ6Ô6ˆŒõ ‘f”fˆŒˆˆó    c                 ó    — t          d¦  «        ‚)Nz$MemoryDB's always stream into memory)r	   )r   Ústreams     r   Úset_ostreamzMemoryDB.set_ostream.   s   € Ý"Ð#IÑJÔJÐJr   c                 ó~  — t          ¦   «         }| j                             |¦  «         | j                             |¦  «        }|                     ¦   «          |                     d¦  «         t          |                     ¦   «         d¬¦  «        }t          |j	        |j
        |j        |¦  «        | j        |j	        <   |S )Nr   F)Úclose_on_deletion)r
   r   r   ÚstoreÚcloseÚseekr   Úgetvaluer   ÚbinshaÚtypeÚsizer   )r   ÚistreamÚzstreamÚdecomp_streams       r   r   zMemoryDB.store1   s›   € Ý&Ñ(Ô(ˆØŒ×Ò˜WÑ%Ô%Ð%à”(—.’. Ñ)Ô)ˆØŠ‰ŒˆØŠQ‰Œˆõ /¨w×/?Ò/?Ñ/AÔ/AÐUZÐ[Ñ[Ô[ˆÝ&-¨g¬n¸g¼lÈGÌLÐZgÑ&hÔ&hˆŒG”NÑ#àˆr   c                 ó   — || j         v S ©N)r   ©r   Úshas     r   Ú
has_objectzMemoryDB.has_object@   s   € Ød”kÐ!Ð!r   c                 ó,   — |                       |¦  «        S r)   )r   r*   s     r   ÚinfozMemoryDB.infoC   s   € à{Š{˜3ÑÔÐr   c                 óš   — 	 | j         |         }|j                             d¦  «         |S # t          $ r}t	          |¦  «        |‚d }~ww xY w)Nr   )r   r   r    ÚKeyErrorr   )r   r+   ÚostreamÚes       r   r   zMemoryDB.streamG   s[   € ð	(Ø”k #Ô&ˆGàŒN×Ò Ñ"Ô"Ð"ØˆNøÝð 	(ð 	(ð 	(Ý˜C‘.”. aÐ'øøøøð	(øøøs   ‚(+ «
A
µAÁA
c                 ó*   — t          | j        ¦  «        S r)   )Úlenr   ©r   s    r   r$   zMemoryDB.sizeQ   s   € Ý4”;ÑÔÐr   c                 ó4   — | j                              ¦   «         S r)   )r   Úkeysr5   s    r   Úsha_iterzMemoryDB.sha_iterT   s   € ØŒ{×ÒÑ!Ô!Ð!r   c                 ó"  — d}|D ]‰}|                      |¦  «        rŒ|                      |¦  «        }t          |j                             ¦   «         ¦  «        }t	          |j        |j        ||¦  «        }|                     |¦  «         |dz  }ŒŠ|S )ar  Copy the streams as identified by sha's yielded by sha_iter into the given odb
        The streams will be copied directly
        **Note:** the object will only be written if it did not exist in the target db

        :return: amount of streams actually copied into odb. If smaller than the amount
            of input shas, one or more objects did already exist in odbr   é   )r,   r   r   Údatar   r#   r$   r   )r   r8   ÚodbÚcountr+   r1   Úsior%   s           r   Ústream_copyzMemoryDB.stream_copyX   s–   € ð ˆØð 	ð 	ˆCØ~Š~˜cÑ"Ô"ð Øð —k’k #Ñ&Ô&ˆGå˜'œ.×-Ò-Ñ/Ô/Ñ0Ô0ˆCÝ˜gœl¨G¬L¸#¸sÑCÔCˆGàIŠIgÑÔÐØQ‰JˆEˆEàˆr   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r,   r.   r   r$   r8   r?   Ú__classcell__)r   s   @r   r   r       s¿   ø€ € € € € ðAð Að
ð ð ð ð ðKð Kð Kðð ð ð"ð "ð "ð ð  ð  ð(ð (ð (ð ð  ð  ð"ð "ð "ðð ð ð ð ð ð r   r   N)rC   Úgitdb.db.looser   Úgitdb.db.baser   r   Ú
gitdb.baser   r   Ú	gitdb.excr   r	   Úgitdb.streamr
   r   Úior   Ú__all__r   © r   r   ú<module>rM      s  ðð
 1Ð 0Ø (Ð (Ð (Ð (Ð (Ð (ðð ð ð ð ð ð ð ð
ð ð ð ð ð ð ð ð
ð ð ð ð ð ð ð ð
ð ð ð ð ð ð ð ð
 Ð Ð Ð Ð Ð à
€ðMð Mð Mð Mð Mˆy˜)ñ Mô Mð Mð Mð Mr   