U
    9%e                     @   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                       sl   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                    s4   t  jf | 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
        ZmasterN)super__init__pygit2Z
Repositoryosgetcwdreporef)selfpathfor   kwargs	__class__ Y/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/fsspec/implementations/git.pyr      s    zGitFileSystem.__init__c                    sL   t  |d}d|kr*|ddd }d|krB|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   Zresolve_refishr   r   tree
isinstancer	   Tree)r   r   r   Zcommpartsr   partr   r   r   _path_to_object4   s    

zGitFileSystem._path_to_objectc                 C   sV   |  dr| dd  } i }d| kr6| dd\|d< } d| krR| 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rg }|D ]t}t|tjrl|dd||jgd|j	d|j
 dd q*|dd||jgd|j	d|j
 |jd q*n"|}d|j|j	d|j
 |jdg}|r|S dd |D S )	N	directoryr   z%or   )typenamehexmodesizefilec                 S   s   g | ]}|d  qS )r)   r   ).0or   r   r   
<listcomp>o   s     z$GitFileSystem.ls.<locals>.<listcomp>)r   r"   r   r	   r   appendjoinr)   r   r*   filemoder,   )r   r   detailr   r   r   r%   objr   r   r   lsH   sB    


	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   r+   
block_sizeZ
autocommitZcache_optionsr   r   r5   r   r   r   _opent   s    
zGitFileSystem._open)NNN)TN)N)r9   NTNN)__name__
__module____qualname____doc__Zroot_markerZcachabler   classmethodr   r"   staticmethodr&   r6   r8   r<   __classcell__r   r   r   r   r   
   s"   	


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