o yf@sdZddlZddlZddlZddlmZddlZddlmZmZm Z ddl m Z m Z ia ddZdd Zd d Zd d ZddZddZdS)zX Supports saving and restoring webui and extensions from a known working set of commits N)datetime)shared extensionserrors) script_pathconfig_states_dirc Cs0ttjtddg}ttD]Z}|drltjt|}z/t |ddd}t |}d|vs6Jd||d <| |Wdn1sIwYWqt yk}ztd |d |WYd}~qd}~wwqt|d d dd}|D]}t|dd}|dd}|d|} |t| <qxtS)NT)exist_okz.jsonrzutf-8)encoding created_atz"created_at" does not existfilepathz[ERROR]: Config states z, cSs|dS)Nr )csr r fC:\Users\Luke\Documents\Stable diffusion\Automatic1111\stable-diffusion-webui\modules\config_states.py%sz$list_config_states..)keyreversez%Y-%m-%d %H:%M:%SnameConfig: )all_config_statesclearosmakedirsrlistdirendswithpathjoinopenjsonloadappend Exceptionprintsortedr fromtimestampstrftimeget) config_statesfilenamerfjer timestampr full_namer r rlist_config_statess4       r/cCsd}ztjtjtdrtt}Wnty'tj dtddYnwd}d}d}d}|r[|j s[zt | j d}|jj}|jjj}|j}|jj}Wn tyZd}Ynw||||dS)N.git"Error reading webui git info from Texc_info)remote commit_hash commit_datebranch)rrexistsrrgitRepor"rreportbarenextr4urlsheadcommitcommitted_datehexsha active_branchr) webui_repo webui_remotewebui_commit_hashwebui_commit_date webui_branchr?r r rget_webui_config0s6      rIc CsPi}tjD] }||j|j|j|j|j|j|j|j |j d }|||j<q|S)N) rrenabled is_builtinr4r5r6r7have_info_from_repo) rread_info_from_reporrrJrKr4r5r6r7rL) ext_configextentryr r rget_extension_configPs  rQcCs$t}t}t}|||dS)N)r webuir)rnowr-rIrQ)Z creation_time webui_configrNr r r get_configgs rUcCstdd|vrtddS|d}d|vrtddS|dd}d}ztjtjtdr5tt}Wnt yJt j dtdd YdSwz|jj dd |jj |dd td |d WdSt ywt d|YdSw)Nz* Restoring webui state...rRz$Error: No webui data saved to configr5z&Error: No commit saved to webui configr0r1Tr2)all)hardz* Restored webui to commit .zError restoring webui to commit)r#r'rrr8rrr9r:r"rr;fetchreset)configrTrFrDr r rrestore_webui_configss2    r\c Cstdd|vrtddS|d}g}g}ttjD]}|jr"q||j}|j|vrEd|_||j|||ddddfq||j}d|vr|drz&| |d|||dkrw|||ddd|dddfWn,t y}z|||ddd|fWYd}~nd}~ww|||dddd f| d dsd|_||jqd|_q|t j _t j t jtd |D]#\}}} } | rtd |jd |d| qtd|jd| dqdS)Nz* Restoring extension state...rz(Error: No extension data saved to configTFz>Saved extension state not found in config, marking as disabledr5zNo commit hash found in configrJz)* Finished restoring extensions. Results:z + rz -> z ! z : FAILURE ())r#tqdmrrKrMr5rdisabledr!fetch_and_reset_hardr"r'roptsdisabled_extensionssaveconfig_filename) r[rNresultsr`rOZcurrent_commitrPexZ prev_commitsuccessresultr r rrestore_extension_configsT    && rj)__doc__rrr_rr9modulesrrrmodules.paths_internalrrrr/rIrQrUr\rjr r r rs