do not read extensions' git stuff at startup
This commit is contained in:
parent
5cf3822e46
commit
5fcd4bfa3d
2 changed files with 24 additions and 10 deletions
|
@ -5,13 +5,14 @@ import traceback
|
||||||
import time
|
import time
|
||||||
import git
|
import git
|
||||||
|
|
||||||
from modules import paths, shared
|
from modules import shared
|
||||||
from modules.paths_internal import extensions_dir, extensions_builtin_dir
|
from modules.paths_internal import extensions_dir, extensions_builtin_dir
|
||||||
|
|
||||||
extensions = []
|
extensions = []
|
||||||
|
|
||||||
if not os.path.exists(paths.extensions_dir):
|
if not os.path.exists(extensions_dir):
|
||||||
os.makedirs(paths.extensions_dir)
|
os.makedirs(extensions_dir)
|
||||||
|
|
||||||
|
|
||||||
def active():
|
def active():
|
||||||
return [x for x in extensions if x.enabled]
|
return [x for x in extensions if x.enabled]
|
||||||
|
@ -26,21 +27,29 @@ class Extension:
|
||||||
self.can_update = False
|
self.can_update = False
|
||||||
self.is_builtin = is_builtin
|
self.is_builtin = is_builtin
|
||||||
self.version = ''
|
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
|
repo = None
|
||||||
try:
|
try:
|
||||||
if os.path.exists(os.path.join(path, ".git")):
|
if os.path.exists(os.path.join(self.path, ".git")):
|
||||||
repo = git.Repo(path)
|
repo = git.Repo(self.path)
|
||||||
except Exception:
|
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)
|
print(traceback.format_exc(), file=sys.stderr)
|
||||||
|
|
||||||
if repo is None or repo.bare:
|
if repo is None or repo.bare:
|
||||||
self.remote = None
|
self.remote = None
|
||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
self.remote = next(repo.remote().urls, None)
|
|
||||||
self.status = 'unknown'
|
self.status = 'unknown'
|
||||||
|
self.remote = next(repo.remote().urls, None)
|
||||||
head = repo.head.commit
|
head = repo.head.commit
|
||||||
ts = time.asctime(time.gmtime(repo.head.commit.committed_date))
|
ts = time.asctime(time.gmtime(repo.head.commit.committed_date))
|
||||||
self.version = f'{head.hexsha[:8]} ({ts})'
|
self.version = f'{head.hexsha[:8]} ({ts})'
|
||||||
|
@ -85,11 +94,11 @@ class Extension:
|
||||||
def list_extensions():
|
def list_extensions():
|
||||||
extensions.clear()
|
extensions.clear()
|
||||||
|
|
||||||
if not os.path.isdir(paths.extensions_dir):
|
if not os.path.isdir(extensions_dir):
|
||||||
return
|
return
|
||||||
|
|
||||||
extension_paths = []
|
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):
|
if not os.path.isdir(dirname):
|
||||||
return
|
return
|
||||||
|
|
||||||
|
@ -98,7 +107,7 @@ def list_extensions():
|
||||||
if not os.path.isdir(path):
|
if not os.path.isdir(path):
|
||||||
continue
|
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:
|
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)
|
extension = Extension(name=dirname, path=path, enabled=dirname not in shared.opts.disabled_extensions, is_builtin=is_builtin)
|
||||||
|
|
|
@ -63,6 +63,9 @@ def check_updates(id_task, disable_list):
|
||||||
|
|
||||||
try:
|
try:
|
||||||
ext.check_updates()
|
ext.check_updates()
|
||||||
|
except FileNotFoundError as e:
|
||||||
|
if 'FETCH_HEAD' not in str(e):
|
||||||
|
raise
|
||||||
except Exception:
|
except Exception:
|
||||||
print(f"Error checking updates for {ext.name}:", file=sys.stderr)
|
print(f"Error checking updates for {ext.name}:", file=sys.stderr)
|
||||||
print(traceback.format_exc(), file=sys.stderr)
|
print(traceback.format_exc(), file=sys.stderr)
|
||||||
|
@ -87,6 +90,8 @@ def extension_table():
|
||||||
"""
|
"""
|
||||||
|
|
||||||
for ext in extensions.extensions:
|
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>"""
|
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:
|
if ext.can_update:
|
||||||
|
|
Loading…
Reference in a new issue