Commit 0d2a4b60 authored by AUTOMATIC's avatar AUTOMATIC
Browse files

load extensions' git metadata in parallel to loading the main program to save...

load extensions' git metadata in parallel to loading the main program to save a ton of time during startup
parent 0d3a80e2
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -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,
+11 −1
Original line number Diff line number Diff line
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

+13 −2
Original line number Diff line number Diff line
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