a
    Ad                     @   s|   d dl Z d dlZd dlmZmZmZmZ d dlmZ d dl	m
Z
mZmZ g Ze je
dd dd ZG d	d
 d
Zdd ZdS )    N)sharederrorscachescripts)Repo)extensions_dirextensions_builtin_dirscript_pathT)exist_okc                   C   sL   t jjst jjdkrg S t jjs,t jjdkr:dd tD S dd tD S d S )Nallextrac                 S   s   g | ]}|j r|jr|qS  )enabled
is_builtin.0xr   r   :/var/www/html/stable-diffusion-webui/modules/extensions.py
<listcomp>       zactive.<locals>.<listcomp>c                 S   s   g | ]}|j r|qS r   )r   r   r   r   r   r      r   )r   cmd_optsdisable_all_extensionsoptsdisable_extra_extensions
extensionsr   r   r   r   active   s
    r   c                   @   s`   e Zd Ze Zg dZdddZdd Zdd	 Z	d
d Z
dd Zdd Zdd ZdddZdS )	Extension)remotecommit_datebranchcommit_hashversionTFc                 C   sL   || _ || _|| _d| _d| _|| _d| _d | _d| _d | _	d | _
d| _d S )N F)namepathr   status
can_updater   r    r   r!   r   r   have_info_from_repo)selfr#   r$   r   r   r   r   r   __init__   s    zExtension.__init__c                    s    fdd j D S )Nc                    s   i | ]}|t  |qS r   )getattrr   r(   r   r   
<dictcomp>)   r   z%Extension.to_dict.<locals>.<dictcomp>)cached_fieldsr+   r   r+   r   to_dict(   s    zExtension.to_dictc                 C   s    | j D ]}t| |||  qd S N)r-   setattr)r(   dfieldr   r   r   	from_dict+   s    
zExtension.from_dictc                    sv    j s jrd S  fdd}z,td jtj jd|} | W n t	yZ   Y n0  j
dkrjdn j
 _
d S )Nc                      sP    j 6  jrW d    d S      W  d    S 1 sB0    Y  d S r/   )lockr'   do_read_info_from_repor.   r   r+   r   r   read_from_repo3   s
    z5Extension.read_info_from_repo.<locals>.read_from_repozextensions-git.gitr"   unknown)r   r'   r   Zcached_data_for_filer#   osr$   joinr3   FileNotFoundErrorr%   )r(   r6   r1   r   r+   r   read_info_from_repo/   s    zExtension.read_info_from_repoc                 C   s   d }z&t jt j| jdr(t| j}W n( tyR   tjd| j dd Y n0 |d u sb|jrjd | _	nzNt
|	 jd | _	|jj}|j| _|jr|jj| _|j| _| jd d | _W n0 ty   tjd| j ddd d | _	Y n0 d| _d S )Nr7   z*Error reading github repository info from T)exc_info   z3Failed reading extension data from Git repository ())r9   r$   existsr:   r   	Exceptionr   reportZbarer   nexturlsheadcommitZcommitted_dater   Zactive_branchr#   r   Zhexshar    r!   r'   )r(   reporF   r   r   r   r5   B   s(    
z Extension.do_read_info_from_repoc                    sn   t j| j|}t j|s g S g }tt |D ]$}|t| j|t j|| q2 fdd|D }|S )Nc                    s8   g | ]0}t j|jd    krt j|jr|qS )   )r9   r$   splitextlowerisfiler   	extensionr   r   r   e   r   z(Extension.list_files.<locals>.<listcomp>)	r9   r$   r:   isdirsortedlistdirappendr   
ScriptFile)r(   subdirrM   dirpathresfilenamer   rL   r   
list_files\   s    "zExtension.list_filesc                 C   s   t | j}| jddD ]"}|j|jkrd| _d| _ d S qz,|d}|j	j
|krhd| _d| _W d S W n  ty   d| _d| _Y d S 0 d| _d| _d S )	NT)dry_runznew commitsoriginzbehind HEADFzunknown (remote error)latest)r   r$   r   fetchflagsZHEAD_UPTODATEr&   r%   Z	rev_parserE   rF   rA   )r(   rG   r[   rY   r   r   r   check_updatesi   s$    


zExtension.check_updatesrY   c                 C   s2   t | j}|jjdd |jj|dd d| _d S )NT)r   )hardF)r   r$   gitr[   resetr'   )r(   rF   rG   r   r   r   fetch_and_reset_hard   s    
zExtension.fetch_and_reset_hardN)TF)rY   )__name__
__module____qualname__	threadingLockr4   r-   r)   r.   r3   r<   r5   rW   r]   ra   r   r   r   r   r      s   
r   c                  C   s  t   tjtsd S tjjr*t	d n<tj
jdkr@t	d n&tjjrRt	d ntj
jdkrft	d g } ttfD ]Z}tj|s d S tt|D ]4}tj||}tj|sq| |||tkf qqr| D ],\}}}t|||tj
jv|d}t | qd S )NzM*** "--disable-all-extensions" arg was used, will not load any extensions ***r   zM*** "Disable all extensions" option was set, will not load any extensions ***zU*** "--disable-extra-extensions" arg was used, will only load built-in extensions ***r   zS*** "Disable all extensions" option was set, will only load built-in extensions ***)r#   r$   r   r   )r   clearr9   r$   rN   r   r   r   r   printr   r   r   rO   rP   r:   rQ   r   disabled_extensions)Zextension_pathsdirnameZextension_dirnamer$   r   rM   r   r   r   list_extensions   s.    


rk   )r9   re   modulesr   r   r   r   Zmodules.gitpython_hackr   modules.paths_internalr   r   r	   r   makedirsr   r   rk   r   r   r   r   <module>   s   	r