Commit 5fcd4bfa authored by AUTOMATIC's avatar AUTOMATIC
Browse files

do not read extensions' git stuff at startup

parent 5cf3822e
Loading
Loading
Loading
Loading
+19 −10
Original line number Diff line number Diff line
@@ -5,13 +5,14 @@ import traceback
import time
import git

from modules import paths, shared
from modules import shared
from modules.paths_internal import extensions_dir, extensions_builtin_dir

extensions = []

if not os.path.exists(paths.extensions_dir):
    os.makedirs(paths.extensions_dir)
if not os.path.exists(extensions_dir):
    os.makedirs(extensions_dir)


def active():
    return [x for x in extensions if x.enabled]
@@ -26,21 +27,29 @@ class Extension:
        self.can_update = False
        self.is_builtin = is_builtin
        self.version = ''
        self.remote = None
        self.have_info_from_repo = False

    def read_info_from_repo(self):
        if self.have_info_from_repo:
            return

        self.have_info_from_repo = True

        repo = None
        try:
            if os.path.exists(os.path.join(path, ".git")):
                repo = git.Repo(path)
            if os.path.exists(os.path.join(self.path, ".git")):
                repo = git.Repo(self.path)
        except Exception:
            print(f"Error reading github repository info from {path}:", file=sys.stderr)
            print(f"Error reading github repository info from {self.path}:", file=sys.stderr)
            print(traceback.format_exc(), file=sys.stderr)

        if repo is None or repo.bare:
            self.remote = None
        else:
            try:
                self.remote = next(repo.remote().urls, None)
                self.status = 'unknown'
                self.remote = next(repo.remote().urls, None)
                head = repo.head.commit
                ts = time.asctime(time.gmtime(repo.head.commit.committed_date))
                self.version = f'{head.hexsha[:8]} ({ts})'
@@ -85,11 +94,11 @@ class Extension:
def list_extensions():
    extensions.clear()

    if not os.path.isdir(paths.extensions_dir):
    if not os.path.isdir(extensions_dir):
        return

    extension_paths = []
    for dirname in [paths.extensions_dir, paths.extensions_builtin_dir]:
    for dirname in [extensions_dir, extensions_builtin_dir]:
        if not os.path.isdir(dirname):
            return

@@ -98,7 +107,7 @@ def list_extensions():
            if not os.path.isdir(path):
                continue

            extension_paths.append((extension_dirname, path, dirname == paths.extensions_builtin_dir))
            extension_paths.append((extension_dirname, path, dirname == extensions_builtin_dir))

    for dirname, path, is_builtin in extension_paths:
        extension = Extension(name=dirname, path=path, enabled=dirname not in shared.opts.disabled_extensions, is_builtin=is_builtin)
+5 −0
Original line number Diff line number Diff line
@@ -63,6 +63,9 @@ def check_updates(id_task, disable_list):

        try:
            ext.check_updates()
        except FileNotFoundError as e:
            if 'FETCH_HEAD' not in str(e):
                raise
        except Exception:
            print(f"Error checking updates for {ext.name}:", file=sys.stderr)
            print(traceback.format_exc(), file=sys.stderr)
@@ -87,6 +90,8 @@ def extension_table():
    """

    for ext in extensions.extensions:
        ext.read_info_from_repo()

        remote = f"""<a href="{html.escape(ext.remote or '')}" target="_blank">{html.escape("built-in" if ext.is_builtin else ext.remote or '')}</a>"""

        if ext.can_update: