Skip to content

Commit

Permalink
do not read extensions' git stuff at startup
Browse files Browse the repository at this point in the history
  • Loading branch information
AUTOMATIC1111 committed Mar 27, 2023
1 parent 5cf3822 commit 5fcd4bf
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 10 deletions.
29 changes: 19 additions & 10 deletions modules/extensions.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,14 @@
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]
Expand All @@ -26,21 +27,29 @@ def __init__(self, name, path, enabled=True, is_builtin=False):
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})'
Expand Down Expand Up @@ -85,11 +94,11 @@ def fetch_and_reset_hard(self):
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

Expand All @@ -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)
Expand Down
5 changes: 5 additions & 0 deletions modules/ui_extensions.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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:
Expand Down

0 comments on commit 5fcd4bf

Please sign in to comment.