o
    "if                     @   s<   d dl Z d dlZd dlmZ ddlmZ G dd deZdS )    N)AbstractFileSystem   )
MemoryFilec                       sv   e Zd ZdZdZdZd fdd	Ze fddZd	d
 Z	e
dd ZdddZdddZ					dddZ  ZS )GitFileSystemz\Browse the files of a local git repo at any hash/tag/branch

    (experimental backend)
     TNc                    s8   t  jdi | t|p|pt | _|pd| _dS )aM  

        Parameters
        ----------
        path: str (optional)
            Local location of the repo (uses current directory if not given).
            May be deprecated in favour of ``fo``. When used with a higher
            level function such as fsspec.open(), may be of the form
            "git://[path-to-repo[:]][ref@]path/to/file" (but the actual
            file path should not contain "@" or ":").
        fo: str (optional)
            Same as ``path``, but passed as part of a chained URL. This one
            takes precedence if both are given.
        ref: str (optional)
            Reference to work with, could be a hash, tag or branch name. Defaults
            to current working tree. Note that ``ls`` and ``open`` also take hash,
            so this becomes the default for those operations
        kwargs
        masterN )super__init__pygit2
Repositoryosgetcwdreporef)selfpathfor   kwargs	__class__r   S/var/www/html/corbot_env/lib/python3.10/site-packages/fsspec/implementations/git.pyr
      s   zGitFileSystem.__init__c                    sL   t  |d}d|v r|ddd }d|v r!|ddd }|dS )N/:r   @)r	   _strip_protocollstripsplit)clsr   r   r   r   r   +   s   
zGitFileSystem._strip_protocolc                 C   sL   | j |p| j\}}|d}|j}|D ]}|r#t|tjr#|| }q|S )Nr   )r   resolve_refishr   r   tree
isinstancer   Tree)r   r   r   commpartsr    partr   r   r   _path_to_object4   s   
zGitFileSystem._path_to_objectc                 C   sV   |  dr| dd  } i }d| v r| dd\|d< } d| v r)| dd\|d< } |S )Nzgit://   r   r   r   r   r   )
startswithr   )r   outr   r   r   _get_kwargs_from_urls=   s   
z#GitFileSystem._get_kwargs_from_urlsc              	   K   s   |  |}| ||}t|tjrQg }|D ]:}t|tjr6|dd||jgd|j	|j
ddd q|dd||jgd|j	|j
d|jd qn|}d|j|j	|j
d|jdg}|rf|S dd |D S )	N	directoryr   or   )typenamehexmodesizefilec                 S   s   g | ]}|d  qS )r.   r   ).0r,   r   r   r   
<listcomp>o   s    z$GitFileSystem.ls.<locals>.<listcomp>)r   r&   r!   r   r"   appendjoinr.   r   r/   filemoder1   )r   r   detailr   r   r    r)   objr   r   r   lsH   sD   

	zGitFileSystem.lsc                 C   s   | j ||dd S )N)r   r/   )info)r   r   r   r   r   r   ukeyq   s   zGitFileSystem.ukeyrbc           	      K   s   |  ||p| j}t|jdS )N)data)r&   r   r   r>   )	r   r   r0   
block_size
autocommitcache_optionsr   r   r9   r   r   r   _opent   s   
zGitFileSystem._open)NNN)TN)N)r=   NTNN)__name__
__module____qualname____doc__root_markercachabler
   classmethodr   r&   staticmethodr*   r:   r<   rB   __classcell__r   r   r   r   r   
   s$    	



)r   )r   r   fsspec.specr   memoryr   r   r   r   r   r   <module>   s
    