o
    ni                     @   s   d dl Z d dlZd dlZd dlmZmZmZ d dlmZm	Z	 d dl
Z
zd dlmZmZmZmZ W n ey;   dZY nw erDd dlmZ eeZG dd dZdS )    N)TYPE_CHECKINGAnyOptional)urlparse
urlunparse)GitCommandErrorInvalidGitRepositoryErrorNoSuchPathErrorRepo)r
   c                   @   s  e Zd Z					d1dee dededee dee d	dfd
dZd	ee fddZe	d	ee fddZ
e	d	efddZded	ee fddZe	d	efddZe	d	efddZe	d	efddZe	d	ee fddZe	d	efddZe	d	efdd Ze	d	efd!d"Ze	d	efd#d$Ze	d	efd%d&Ze	d	efd'd(Zd	efd)d*Zd+ed,ee d	efd-d.Zd+ed	efd/d0ZdS )2GitRepoNoriginTrootremotelazy
remote_urlcommitreturnc                 C   sF   |d u r|nd | _ || _|| _|| _d | _d| _|s!|  | _d S d S NF)remote_name_root_remote_url_commit_repo_repo_initialized
_init_repo)selfr   r   r   r   r    r   R/home/ubuntu/SoloSpeech/.venv/lib/python3.10/site-packages/wandb/sdk/lib/gitlib.py__init__   s   zGitRepo.__init__c                 C   s   d| _ td u r	d S | jd u rd S zt| jpt ddW S  ty0   td t	
d Y d S  ty>   t	d Y d S  ty[   td| j d t	
d| j d Y d S w )NT)search_parent_directoriesz.current working directory has been invalidatedzgit repository is invalidz	git root z does not exist)r   r
   r   r   osgetcwdFileNotFoundErrorwandbtermwarnloggerwarnr   debugr	   r   r   r   r   r   ,   s&   

zGitRepo._init_repoc                 C   s   | j s|  | _| jS N)r   r   r   r(   r   r   r   repo>   s   
zGitRepo.repoc                 C   s
   | j d u S r)   )r   r(   r   r   r   autoD      
zGitRepo.auto	file_namec                 C   s.   | j sdS z|| j jv W S  ty   Y d S w )NT)r*   untracked_filesr   )r   r-   r   r   r   is_untrackedH   s   zGitRepo.is_untrackedc                 C   s
   t | jS r)   )boolr*   r(   r   r   r   enabledP   r,   zGitRepo.enabledc              
   C   sR   | j sd S z| j jdW S  ty( } ztd|  W Y d }~d S d }~ww )N--show-toplevelzgit root error: )r*   git	rev_parser   r%   error)r   er   r   r   r   T   s   zGitRepo.rootc                 C   s,   | j sdS z| j  W S  ty   Y dS w r   )r*   is_dirtyr   r(   r   r   r   dirty_   s   zGitRepo.dirtyc                 C   s6   | j sd S z
| j  ddW S  tjy   Y d S w )Nuseremail)r*   config_reader	get_valueconfigparserErrorr(   r   r   r   r:   h   s   zGitRepo.emailc                 C   s   | j r| j S | jsd S | jjr| jj sd S zt| jjdkr'| jjjjW S | jj	d
dd W S  tyB   td Y d S w )Nr   z--head z(Unable to find most recent commit in git)r   r*   headis_validlenrefsr   hexshar3   show_refsplit	Exceptionr%   	exceptionr(   r   r   r   last_commitq   s   
zGitRepo.last_commitc                 C   s   | j sd S | j jjjS r)   )r*   r@   refnamer(   r   r   r   branch   s   zGitRepo.branchc                 C   s0   | j sd S z| j j| j W S  ty   Y d S w r)   )r*   remotesr   
IndexErrorr(   r   r   r   r         zGitRepo.remotec                 C   s   | j sdS t| j jjdkS )NF)      r   )r*   r0   r3   version_infor(   r   r   r   has_submodule_diff   s   zGitRepo.has_submodule_diffc                 C   sx   | j r| j S | jsd S t| jj}|j}|jd ur!| d|j }|jd ur4t|j|j	 d| dS t|j|dS )N:z:@)netloc)
r   r   r   urlhostnameportpasswordr   _replaceusername)r   parsedrW   r   r   r   r      s   

zGitRepo.remote_urlc                 C   s0   | j sd S z| j jdW S  ty   Y d S w )Nr2   )r*   r3   r4   r   r(   r   r   r   root_dir   rO   zGitRepo.root_dirc           
   
   C   s  g }zj| j s	W dS z| j j}W n ttfy!   td Y W dS w | }|r.||j |sE| j j	D ]}| }|durD||j q4| j j
}d}|D ]}| j ||D ]}|du r_|}qV| j ||rh|}qVqM|W S  ty }	 ztd tt|	 W Y d}	~	dS d}	~	ww )ab  Get the most recent ancestor of HEAD that occurs on an upstream branch.

        First looks at the current branch's tracking branch, if applicable. If
        that doesn't work, looks at every other branch to find the most recent
        ancestor of HEAD that occurs on a tracking branch.

        Returns:
            git.Commit object or None
        Nzgit is in a detached head statez1git remote upstream fork point could not be found)r*   active_branch	TypeError
ValueErrorr%   r'   tracking_branchappendr   branchesr@   
merge_baseis_ancestorr   str)
r   possible_relativesr^   ra   rL   r@   most_recent_ancestorpossible_relativeancestorr6   r   r   r   get_upstream_fork_point   sH   


zGitRepo.get_upstream_fork_pointrK   messagec                 C   sB   | j sd S z| j jd| |ddW S  ty    td Y d S w )Nwandb/T)rl   forcezFailed to tag repository.)r*   
create_tagr   print)r   rK   rl   r   r   r   tag   s   zGitRepo.tagc                 C   sB   | j sd S z| j jd| ddW S  ty    td Y d S w )Nrm   T)rn   zfailed to push git)r   pushr   r%   r'   )r   rK   r   r   r   rr      s   
zGitRepo.push)Nr   TNN)__name__
__module____qualname__r   rf   r0   r   r
   r   propertyr*   r+   r/   r1   r   r   r8   r:   rI   rL   r   rS   r   r]   rk   rq   rr   r   r   r   r   r      s`    


-	r   )r=   loggingr    typingr   r   r   urllib.parser   r   r#   r3   r   r   r	   r
   ImportError	getLoggerrs   r%   r   r   r   r   r   <module>   s    
