load extensions' git metadata in parallel to loading the main program to save a ton of time during startup
This commit is contained in:
parent
0d3a80e269
commit
0d2a4b608c
@ -83,6 +83,8 @@ def get_extension_config():
|
||||
ext_config = {}
|
||||
|
||||
for ext in extensions.extensions:
|
||||
ext.read_info_from_repo()
|
||||
|
||||
entry = {
|
||||
"name": ext.name,
|
||||
"path": ext.path,
|
||||
|
@ -1,5 +1,6 @@
|
||||
import os
|
||||
import sys
|
||||
import threading
|
||||
import traceback
|
||||
|
||||
import time
|
||||
@ -24,6 +25,8 @@ def active():
|
||||
|
||||
|
||||
class Extension:
|
||||
lock = threading.Lock()
|
||||
|
||||
def __init__(self, name, path, enabled=True, is_builtin=False):
|
||||
self.name = name
|
||||
self.path = path
|
||||
@ -42,8 +45,13 @@ class Extension:
|
||||
if self.is_builtin or self.have_info_from_repo:
|
||||
return
|
||||
|
||||
self.have_info_from_repo = True
|
||||
with self.lock:
|
||||
if self.have_info_from_repo:
|
||||
return
|
||||
|
||||
self.do_read_info_from_repo()
|
||||
|
||||
def do_read_info_from_repo(self):
|
||||
repo = None
|
||||
try:
|
||||
if os.path.exists(os.path.join(self.path, ".git")):
|
||||
@ -70,6 +78,8 @@ class Extension:
|
||||
print(f"Failed reading extension data from Git repository ({self.name}): {ex}", file=sys.stderr)
|
||||
self.remote = None
|
||||
|
||||
self.have_info_from_repo = True
|
||||
|
||||
def list_files(self, subdir, extension):
|
||||
from modules import scripts
|
||||
|
||||
|
@ -1,6 +1,7 @@
|
||||
import json
|
||||
import os.path
|
||||
import sys
|
||||
import threading
|
||||
import time
|
||||
from datetime import datetime
|
||||
import traceback
|
||||
@ -484,11 +485,18 @@ def refresh_available_extensions_from_data(hide_tags, sort_column, filter_text="
|
||||
return code, list(tags)
|
||||
|
||||
|
||||
def preload_extensions_git_metadata():
|
||||
for extension in extensions.extensions:
|
||||
extension.read_info_from_repo()
|
||||
|
||||
|
||||
def create_ui():
|
||||
import modules.ui
|
||||
|
||||
config_states.list_config_states()
|
||||
|
||||
threading.Thread(target=preload_extensions_git_metadata).start()
|
||||
|
||||
with gr.Blocks(analytics_enabled=False) as ui:
|
||||
with gr.Tabs(elem_id="tabs_extensions"):
|
||||
with gr.TabItem("Installed", id="installed"):
|
||||
@ -508,7 +516,8 @@ def create_ui():
|
||||
</span>
|
||||
"""
|
||||
info = gr.HTML(html)
|
||||
extensions_table = gr.HTML(lambda: extension_table())
|
||||
extensions_table = gr.HTML('Loading...')
|
||||
ui.load(fn=extension_table, inputs=[], outputs=[extensions_table])
|
||||
|
||||
apply.click(
|
||||
fn=apply_and_restart,
|
||||
@ -595,7 +604,8 @@ def create_ui():
|
||||
config_save_button = gr.Button(value="Save Current Config")
|
||||
|
||||
config_states_info = gr.HTML("")
|
||||
config_states_table = gr.HTML(lambda: update_config_states_table("Current"))
|
||||
config_states_table = gr.HTML("Loading...")
|
||||
ui.load(fn=update_config_states_table, inputs=[config_states_list], outputs=[config_states_table])
|
||||
|
||||
config_save_button.click(fn=save_config_state, inputs=[config_save_name], outputs=[config_states_list, config_states_info])
|
||||
|
||||
@ -608,4 +618,5 @@ def create_ui():
|
||||
outputs=[config_states_table],
|
||||
)
|
||||
|
||||
|
||||
return ui
|
||||
|
Loading…
Reference in New Issue
Block a user