aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAUTOMATIC <16777216c@gmail.com>2023-03-27 10:02:30 +0300
committerAUTOMATIC <16777216c@gmail.com>2023-03-27 10:02:30 +0300
commit5fcd4bfa3d86c3ebf91ff993b6472a68a3a4f6ad (patch)
tree632754a75fd1472d826343dcec061dec6ad835d4
parent5cf3822e463393e6ba1eab0b5647174f754886b9 (diff)
do not read extensions' git stuff at startup
-rw-r--r--modules/extensions.py29
-rw-r--r--modules/ui_extensions.py5
2 files changed, 24 insertions, 10 deletions
diff --git a/modules/extensions.py b/modules/extensions.py
index a14ffbf0..0d34b89a 100644
--- a/modules/extensions.py
+++ b/modules/extensions.py
@@ -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)
diff --git a/modules/ui_extensions.py b/modules/ui_extensions.py
index da7e79f0..b4a0d6ec 100644
--- a/modules/ui_extensions.py
+++ b/modules/ui_extensions.py
@@ -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: