
    %e                     \    d dl Z d dlZd dlmZmZmZ d dlmZ dZdZ	dZ
 G d d          ZdS )	    N)AnyOptionalTuple)utilz/^https://(www\.)?github.com/(.+)/(.+)(?:.git)?$z#^git@github.com:(.+)/(.+)(?:.git)?$)      r   c                       e Zd Zd ZdefdZdefdZed             Z	ed             Z
ed             Zed             Zed	             Zd
 Zd Zd ZdS )GitRepoc                 b   d | _         	 dd l}|}|                    |d          | _        | j        j        j        | _         | j         t
          k    rF| j        j                            d          }t          j        	                    ||          | _
        d S d S # t          $ r d | _        Y d S w xY w)Nr   T)search_parent_directoriesz--show-toplevel)git_versiongitReporepoversion_infoMIN_GIT_VERSION	rev_parseospathrelpathmodule	Exception)selfr   r   git_packagegit_roots        2lib/python3.11/site-packages/streamlit/git_util.py__init__zGitRepo.__init__    s     7;	JJJ
  #K#(((NNDI#y}9D?229=223DEE goodH== 32  	 	 	 DIIII	s   BB B.-B.returnc                 *    t          j        |           S N)r   repr_r   s    r   __repr__zGitRepo.__repr__:   s    z$    c                 F    | j         duo| j        duo| j        t          k    S )zDTrue if there's a git repo here, and git.version >= MIN_GIT_VERSION.N)r   r   r   r"   s    r   is_validzGitRepo.is_valid=   s3     IT! 4 ,4 O3	
r$   c                 |    |                                  sd S | j        rd S | j        j                                        S r    )r&   is_head_detachedr   active_branchtracking_branchr"   s    r   r*   zGitRepo.tracking_branchE   s>    }} 	4  	4y&66888r$   c                 F    |                                  sd S | j        j        S r    )r&   r   untracked_filesr"   s    r   r,   zGitRepo.untracked_filesO   s"    }} 	4y((r$   c                 P    |                                  sdS | j        j        j        S )NF)r&   r   headis_detachedr"   s    r   r(   zGitRepo.is_head_detachedV   s$    }} 	5y~))r$   c                     |                                  sd S d | j        j                            d           D             S )Nc                     g | ]	}|j         
S  )a_path).0items     r   
<listcomp>z-GitRepo.uncommitted_files.<locals>.<listcomp>b   s    CCCCCCr$   )r&   r   indexdiffr"   s    r   uncommitted_fileszGitRepo.uncommitted_files]   s=    }} 	4CC	(<(<T(B(BCCCCr$   c                 *   |                                  sd S 	 |                                 \  }}d                    |j        |g          }t	          | j                            | d|                     S # t          $ r t	                      cY S w xY w)N/z..)r&   get_tracking_branch_remotejoinnamelistr   iter_commitsr   )r   remotebranch_nameremote_branchs       r   ahead_commitszGitRepo.ahead_commitsd   s    }} 	4	"&"A"A"C"CFKHHfk;%?@@M	..-/P/P;/P/PQQRRR 	 	 	66MMM	s   AA7 7BBc                     |                                  sd S | j        }|d S |j                            d          ^}}d                    |          }| j                            |          |fS )Nr;   )r&   r*   r>   splitr=   r   rA   )r   r*   remote_namebranchrB   s        r   r<   z"GitRepo.get_tracking_branch_remoteq   sq    }} 	4."4.399#>>fhhv&&y,,k99r$   c                     |                                  sdS |                                 }|dS |\  }}|j        D ]9}t          j        t
          |          t          j        t          |           dS :dS )NFT)r&   r<   urlsrematchGITHUB_HTTP_URLGITHUB_SSH_URL)r   remote_inforA   _branchurls        r   is_github_repozGitRepo.is_github_repo   s    }} 	555775%; 	 	C#..:8NC00<tt = ur$   c                    |                                  sd S |                                 }|d S |\  }}d }|j        D ]}t          j        t
          |          }t          j        t          |          }|/|                    d           d|                    d           } n2|/|                    d           d|                    d           } n|d S ||| j        fS )Nr   r;         )	r&   r<   rJ   rK   rL   rM   rN   groupr   )r   rO   rA   rH   r   rQ   https_matchesssh_matchess           r   get_repo_infozGitRepo.get_repo_info   s   }} 	455774$; 		 		CH_c::M(>377K('--a00KK=3F3Fq3I3IKK&%++A..GG1B1B11E1EGG ' <4VT[((r$   N)__name__
__module____qualname__r   strr#   boolr&   propertyr*   r,   r(   r9   rD   r<   rR   rY   r2   r$   r   r
   r
      s         4 #        
$ 
 
 
 
 9 9 X9 ) ) X) * * X* D D XD 
 
 X
: : :  &) ) ) ) )r$   r
   )r   rK   typingr   r   r   	streamlitr   rM   rN   r   r
   r2   r$   r   <module>rb      s    
			 				 ' ' ' ' ' ' ' ' ' '       E7
 L) L) L) L) L) L) L) L) L) L)r$   