U
    楡c@                     @   s.  d Z ddlmZ ddlT ddlmZ ddlmZ ddlmZm	Z	m
Z
mZmZ ddlmZ erhddlmZ G d	d
 d
eZG dd deZG dd deZG dd deeZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd  d eZd!S )"zE Module containing all exceptions thrown throughout the git package,     )BadName)*safe_decode)remove_password_if_present)ListSequenceTupleUnionTYPE_CHECKING)PathLike)Repoc                   @   s   e Zd ZdZdS )GitErrorz%Base class for all package exceptionsN__name__
__module____qualname____doc__ r   r   +/tmp/pip-unpacked-wheel-_pbxsds5/git/exc.pyr      s   r   c                   @   s   e Zd ZdZdS )InvalidGitRepositoryErrorzAThrown if the given repository appears to have an invalid format.Nr   r   r   r   r   r      s   r   c                   @   s   e Zd ZdZdS )WorkTreeRepositoryUnsupportedz9Thrown to indicate we can't handle work tree repositoriesNr   r   r   r   r   r       s   r   c                   @   s   e Zd ZdZdS )NoSuchPathErrorz3Thrown if a path could not be access by the system.Nr   r   r   r   r   r   $   s   r   c                   @   sp   e Zd ZdZdZdeee eedf ef eee	de
f eeedf eeedf ddddZedd	d
ZdS )CommandErrorzBase class for exceptions thrown at every stage of `Popen()` execution.

    :param command:
        A non-empty list of argv comprising the command-line.
    zCmd('%s') failed%sN.commandstatusstderrstdoutreturnc              	   C   s  t |ttfs| }t|| _|| _|rt |trPdt|j	t
t|f }nLzdt| }W n: ttfk
r   t
t|}t |trd| n|}Y nX t
| jd | _ddd | jD | _|rd| pd	| _t
|}t
|}|rd
| pd| _|rd| p
d| _d S )Nz%s('%s')zexit code(%s)z'%s'r    c                 s   s   | ]}t |V  qd S Nr   ).0ir   r   r   	<genexpr>J   s     z(CommandError.__init__.<locals>.<genexpr>z due to: %s!z
  stdout: '%s' z
  stderr: '%s')
isinstancetuplelistsplitr   r   r   	Exceptiontyper   r   strint
ValueError	TypeError_cmdjoin_cmdline_causer   r   )selfr   r   r   r   sZstdout_decodeZstderr_decoder   r   r   __init__4   s&    

zCommandError.__init__r   c                 C   s"   | j d | j| j| j| j| jf S )Nz
  cmdline: %s%s%s)_msgr1   r4   r3   r   r   r5   r   r   r   __str__Q   s    zCommandError.__str__)NNN)r   r   r   r   r9   r
   r   r-   r	   r.   r+   bytesr7   r;   r   r   r   r   r   (   s   	   r   c                       sD   e Zd ZdZeee ee ef eeef dd fddZ	  Z
S )GitCommandNotFoundzThrown if we cannot find the `git` executable in the PATH or at the path given by
    the GIT_PYTHON_GIT_EXECUTABLE environment variableN)r   causer   c                    s   t t| || d| _d S )NzCmd('%s') not found%s)superr=   r7   r9   )r5   r   r>   	__class__r   r   r7   _   s    zGitCommandNotFound.__init__)r   r   r   r   r
   r   r-   r	   r+   r7   __classcell__r   r   r@   r   r=   [   s   r=   c                       sf   e Zd ZdZdeee eedf ef eeede	f ee
edf ee
edf dd fddZ  ZS )GitCommandErrorzGThrown if execution of the git command fails with non-zero status code.N.r   c                    s   t t| |||| d S r!   )r?   rC   r7   r5   r   r   r   r   r@   r   r   r7   g   s    zGitCommandError.__init__)NNNr   r   r   r   r
   r   r-   r	   r.   r+   r<   r7   rB   r   r   r@   r   rC   d   s      rC   c                   @   s@   e Zd ZdZeee ee ee ddddZedddZ	dS )	CheckoutErrora  Thrown if a file could not be checked out from the index as it contained
    changes.

    The .failed_files attribute contains a list of relative paths that failed
    to be checked out as they contained changes that did not exist in the index.

    The .failed_reasons attribute contains a string informing about the actual
    cause of the issue.

    The .valid_files attribute contains a list of relative paths to files that
    were checked out successfully and hence match the version stored in the
    indexN)messagefailed_filesvalid_filesfailed_reasonsr   c                 C   s"   t | | || _|| _|| _d S r!   )r+   r7   rH   rJ   rI   )r5   rG   rH   rI   rJ   r   r   r   r7      s    zCheckoutError.__init__r8   c                 C   s   t | d| j  S )Nz:%s)r+   r;   rH   r:   r   r   r   r;      s    zCheckoutError.__str__)
r   r   r   r   r-   r   r   r   r7   r;   r   r   r   r   rF   q   s   rF   c                   @   s   e Zd ZdZdS )
CacheErrorzNBase for all errors related to the git index, which is called cache internallyNr   r   r   r   r   rK      s   rK   c                   @   s   e Zd ZdZdS )UnmergedEntriesErrorzZThrown if an operation cannot proceed as there are still unmerged
    entries in the cacheNr   r   r   r   r   rL      s   rL   c                       sf   e Zd ZdZdeee eedf ef eeede	f ee
edf ee
edf dd fddZ  ZS )HookExecutionErrorzThrown if a hook exits with a non-zero exit code. It provides access to the exit code and the string returned
    via standard outputN.r   c                    s    t t| |||| d| _d S )NzHook('%s') failed%s)r?   rM   r7   r9   rD   r@   r   r   r7      s    zHookExecutionError.__init__)NNrE   r   r   r@   r   rM      s     rM   c                   @   s0   e Zd ZdZdeddddZeddd	ZdS )
RepositoryDirtyErrorzjThrown whenever an operation on a repository fails as it has uncommitted changes that would be overwrittenr   N)reporG   r   c                 C   s   || _ || _d S r!   rO   rG   )r5   rO   rG   r   r   r   r7      s    zRepositoryDirtyError.__init__r8   c                 C   s   d| j | jf S )Nz'Operation cannot be performed on %r: %srP   r:   r   r   r   r;      s    zRepositoryDirtyError.__str__)r   r   r   r   r-   r7   r;   r   r   r   r   rN      s   rN   N)r   Z	gitdb.excr   Z
git.compatr   Zgit.utilr   typingr   r   r	   r
   r   Z	git.typesr   Zgit.repo.baser   r+   r   r   r   OSErrorr   r   r=   rC   rF   rK   rL   rM   rN   r   r   r   r   <module>   s(   3	