
    9i$                     ~    S SK r S SKrS SKJrJr  S SKJr  SSKJr  SSK	J
r
  \" 5       r " S S	\5      r " S
 S\S9rg)    N)ListOptional)
get_logger   )MASTER_MODEL_BRANCH   )GitErrorc                   ,   ^  \ rS rSr0 rU 4S jrSrU =r$ )	Singleton   c                    > X R                   ;  a"  [        [        U ]   " U0 UD6U R                   U '   U R                   U    $ N)
_instancessuperr   __call__)clsargskwargs	__class__s      R/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/modelscope/hub/git.pyr   Singleton.__call__   sN    nn$"'	(+#6-5#67;#G?E#GCNN3~~c""     )__name__
__module____qualname____firstlineno__r   r   __static_attributes____classcell__)r   s   @r   r   r      s    J# #r   r   c                      \ rS rSrSrSrS-S\4S jjrS\R                  4S jr
S	 rS
\S\4S jrS\4S jrS rS r S-S\S
\S\S\S\\   4
S jjrS r\" 5       S4S\S\\   S\4S jjrS\S\4S jrS\S\4S jrS\S\4S jrS\4S jr  S.S\S \S\4S! jjr S/S\S
\S\S"\S#\S$\4S% jjrS\4S& jrS\4S' jr\4S\S(\S\S)\4S* jjr S\4S+ jr!S,r"g)0GitCommandWrapper   zSome git operation wrapper
    gitNpathc                 8    U=(       d    U R                   U l        g r   )default_git_pathgit_path)selfr$   s     r   __init__GitCommandWrapper.__init__   s    5 5 5r   returnc           	         [         R                  SR                  U5      5        [        R                  R                  5       nSUS'   U R                  /UQnU Vs/ s H  oD(       d  M  UPM     nn[        R                  " U[        R                  [        R                  US9n UR                  5         U$ s  snf ! [        R                   a  nUR                  R                  S5      nUR                  R                  S5      nSU;   a  [         R                  S5        Us SnA$ [         R!                  S	U< S
U< SU< 35        [#        U5      eSnAff = f)a  Run git command, if command return 0, return subprocess.response
     otherwise raise GitError, message is stdout and stderr.

Args:
    args: List of command args.

Raises:
    GitError: Exception with stdout and stderr.

Returns:
    subprocess.CompletedProcess: the command response
 0GIT_TERMINAL_PROMPT)stdoutstderrenvutf8znothing to commitz;Nothing to commit, your local repo is upto date with remoteNzRunning git command: z failed 
 stdout: z 
 stderr: )loggerdebugjoinosenvironcopyr'   
subprocessrunPIPEcheck_returncodeCalledProcessErrorr0   decoder1   infoerrorr	   )	r(   r   git_envcommanditemresponserA   std_outstd_errs	            r   _run_git_command"GitCommandWrapper._run_git_command    s    	SXXd^$**//#),%&==(4($+4GDt4G4>>????	
	(%%'O 5 ,, 	(oo,,V4Gll))&1G"g-Q  23 w''	(s1   
B7)B7%B< <EAE"E(,EEc                    U R                  U5      nSU;  aj  U R                  X#5      nSU< SU< 3nUR                  S5      nU R                  " U6 n[        R                  UR                  R                  S5      5        g g )N//oauth2-C z remote set-url origin r-   r3   )get_repo_remote_url
_add_tokensplitrH   r4   r5   r0   r?   )r(   repo_dir
auth_tokenurlauth_urlcmd_argsrsps          r   config_auth_token#GitCommandWrapper.config_auth_tokenI   sp    &&x0S z7H;CXNH~~c*H''2CLL**623 !r   tokenrR   c                 J    U(       a  SU;  a  UR                  SSU-  5      nU$ )NrK   z//z//oauth2:%s@)replace)r(   rX   rR   s      r   rN   GitCommandWrapper._add_tokenR   s'    $kk$(>?
r   c                 ~    U(       a5  SU;   a/  UR                  S5      nUR                  S5      nUS U XS-   S  -   nU$ )NrK   oauth2@r   )find)r(   rR   start_index	end_indexs       r   remove_token_from_url'GitCommandWrapper.remove_token_from_urlX   sF    :$((8,KIl{#ca-.&99C
r   c                 L    SS/n U R                   " U6   g! [         a     gf = f)Nlfsr2   TFrH   r	   )r(   cmds     r   is_lfs_installed"GitCommandWrapper.is_lfs_installed_   s3    en	!!3' 		s    
##c                 P    SUSS/n U R                   " U6   g! [         a     gf = f)N-Cre   installTFrf   )r(   rP   rg   s      r   git_lfs_install!GitCommandWrapper.git_lfs_installg   s8    Xui0	!!3' 		s    
%%repo_base_dir	repo_namebranchc                 6   U R                  X#5      nU(       a  SU< SU< SU< SU< 3nO
SU< SU< 3n[        R                  U5        UR                  S5      nU R                  " U6 n[        R                  UR
                  R                  S5      5        U$ )a  git clone command wrapper.
For public project, token can None, private repo, there must token.

Args:
    repo_base_dir (str): The local base dir, the repository will be clone to local_dir/repo_name
    token (str): The git token, must be provided for private project.
    url (str): The remote url
    repo_name (str): The local repository path name.
    branch (str, optional): _description_. Defaults to None.

Returns:
    The popen response.
rL   z clone r-   z
 --branch r3   )rN   r4   r5   rO   rH   r0   r?   )r(   ro   rX   rR   rp   rq   
clone_argsrE   s           r   cloneGitCommandWrapper.cloneo   s    & ooe)<I3<EvOJ  .;C@JZ %%c*
((*5X__++F34r   c                    SSK Jn  UR                  5       u  pEU(       a  U(       a  SU< SU< SU< 3nU R                  " UR	                  S5      6 n[
        R                  UR                  R                  S5      5        SU< SU< SU< 3nU R                  " UR	                  S5      6 n[
        R                  UR                  R                  S5      5        g g g )	Nr   )ModelScopeConfigrL   /z config user.name r-   r3   z config user.email )	modelscope.hub.apirw   get_user_inforH   rO   r4   r5   r0   r?   )	r(   ro   rp   rw   	user_name
user_emailconfig_user_name_argsrE   config_user_email_argss	            r   add_user_infoGitCommandWrapper.add_user_info   s    7 0 > > @	 y)%5!,,.C.I.I#.NOHLL//78y*&6",,'--c24HLL//78 $9r   FrP   files	all_filesc                    U(       a  SU-  nO*[        U5      S:  a  SR                  U5      nSU< SU< 3nWR                  S5      nU R                  " U6 n[        R                  UR                  R                  S5      5        U$ )Nz-C %s add -Ar   r-   rL   z add r3   )lenr6   rO   rH   r4   r5   r0   r?   )r(   rP   r   r   add_args	files_strrU   s          r   addGitCommandWrapper.add   sq     %0HZ!^I)19=H>>#&##X.SZZ&&v./
r   messagec                     SSU-  SSSU-  /nU R                   " U6 n[        R                  UR                  R	                  S5      5        U$ )zRun git commit command

Args:
    repo_dir (str): the repository directory.
    message (str): commit message.

Returns:
    The command popen response.
rk   %scommit-mz'%s'r3   )rH   r4   r@   r0   r?   )r(   rP   r   commit_argsrU   s        r   r   GitCommandWrapper.commit   sM     TH_hfw>NO##[1CJJ%%f-.
r   revisionc                 8    SSU-  SSU-  /nU R                   " U6 $ )Nrk   r   checkoutrH   r(   rP   r   cmdss       r   r   GitCommandWrapper.checkout   s)    dXoz4(?C$$d++r   c                 4    SSU-  SSU/nU R                   " U6 $ )Nrk   r   r   z-br   r   s       r   
new_branchGitCommandWrapper.new_branch   s'    dXoz4B$$d++r   c                    SSU-  SS/nU R                   " U6 nUR                  R                  S5      R                  5       R	                  [
        R                  5       Vs/ s H  nUR                  5       PM     nn[        U5      S:X  a'  SR                  US   R	                  S5      SS  5      /$ USS   Vs/ s H&  nSR                  UR	                  S5      SS  5      PM(     sn$ s  snf s  snf )	Nrk   r   rq   z-rr3   r   rx   r   )	rH   r0   r?   striprO   r7   linesepr   r6   )r(   rP   r   rU   liner@   s         r   get_remote_branches%GitCommandWrapper.get_remote_branches   s    dXox6##T* 

))&1779??

K
K JJLK 	 
 t9>HHT!W]]3/3455>B12hGhdCHHTZZ_QR01hGG
 Hs   !C*:-C/remotec                 ,    SUSX#/nU R                   " U6 $ )Nrk   pullr   )r(   rP   r   rq   r   s        r   r   GitCommandWrapper.pull   s#     h7$$d++r   local_branchremote_branchforcec                     U R                  X#5      nSU< SU< SU< SU< 3nU(       a  US-  nUR                  S5      nU R                  " U6 n[        R	                  UR
                  R                  S5      5        U$ )NrL   z push r-   :z -fr3   )rN   rO   rH   r4   r5   r0   r?   )	r(   rP   rX   rR   r   r   r   	push_argsrU   s	            r   pushGitCommandWrapper.push   sn     ooe)-5sL-:<	IOOC(	##Y/SZZ&&v./
r   c                     SU-  nUR                  S5      nU R                  " U6 nUR                  R                  S5      nUR	                  5       $ )Nz$-C %s config --get remote.origin.urlr-   r3   )rO   rH   r0   r?   r   )r(   rP   rT   rU   rR   s        r   rM   %GitCommandWrapper.get_repo_remote_url   sJ    9HD>>#&##X.jj'yy{r   c                 8   SU-  nUR                  S5      nU R                  " U6 nUR                  R                  S5      R	                  5       n/ nUR                  [
        R                  5       H&  nUR                  UR                  S5      S   5        M(     U$ )Nz-C %s lfs ls-filesr-   r3   )rO   rH   r0   r?   r   r7   r   append)r(   rP   rT   rU   outr   r   s          r   list_lfs_files GitCommandWrapper.list_lfs_files   s    '(2>>#&##X.jj'--/IIbjj)DLLC,- * r   tag_namerefc                     SUSUSSU-  U/nU R                   " U6 n[        R                  UR                  R	                  S5      5        U$ )Nrk   tagr   z"%s"r3   rH   r4   r5   r0   r?   )r(   rP   r   r   r   rT   rU   s          r   r   GitCommandWrapper.tag   sR     (E8TWc
 ##X.SZZ&&v./
r   c                     SUSSU/nU R                   " U6 n[        R                  UR                  R	                  S5      5        U$ )Nrk   r   originr3   r   )r(   rP   r   rT   rU   s        r   push_tagGitCommandWrapper.push_tag  sB    (FHh?##X.SZZ&&v./
r   )r'   r   )r   master)F)#r   r   r   r   __doc__r&   strr)   r:   CompletedProcessrH   rV   rN   rb   rh   rm   r   rt   r   listr   boolr   r   r   r   r   r   r   rM   r   r   r   r   r   r   r   r   r!   r!      s   6S 6'()D)D '(R4 #   '+   	
 sm>9"  $v#9 s S , , ,,3 ,# ,
HC 
H $#,,, , !  	
   $C 	s 	 +	  	 r   r!   )	metaclass)r7   r:   typingr   r   modelscope.utils.loggerr   utils.constantr   errorsr	   r4   typer   r!   r   r   r   <module>r      s:    
  ! . 0 	# #r) rr   