diff options
author | AUTOMATIC1111 <16777216c@gmail.com> | 2022-12-24 06:06:10 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-12-24 06:06:10 +0000 |
commit | 992a877a4af357a945e0c7f49b67c4537f128f38 (patch) | |
tree | 2ca013dc3fc789198f676342734281371b2945a7 /modules/ui_extensions.py | |
parent | 72e81d5b6c2a000c4dbf4f3023d2081e161995c9 (diff) | |
parent | 671c0e42b4167f4b7ff93e3b96922bf130c12718 (diff) | |
download | stable-diffusion-webui-gfx803-992a877a4af357a945e0c7f49b67c4537f128f38.tar.gz stable-diffusion-webui-gfx803-992a877a4af357a945e0c7f49b67c4537f128f38.tar.bz2 stable-diffusion-webui-gfx803-992a877a4af357a945e0c7f49b67c4537f128f38.zip |
Merge pull request #4684 from simcop2387/fix-extension-docker
Fix docker tmp/ and extensions/ handling for docker.
Diffstat (limited to 'modules/ui_extensions.py')
-rw-r--r-- | modules/ui_extensions.py | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/modules/ui_extensions.py b/modules/ui_extensions.py index 1434f25f..eec9586f 100644 --- a/modules/ui_extensions.py +++ b/modules/ui_extensions.py @@ -9,6 +9,8 @@ import git import gradio as gr
import html
+import shutil
+import errno
from modules import extensions, shared, paths
@@ -138,7 +140,18 @@ def install_extension_from_url(dirname, url): repo = git.Repo.clone_from(url, tmpdir)
repo.remote().fetch()
- os.rename(tmpdir, target_dir)
+ try:
+ os.rename(tmpdir, target_dir)
+ except OSError as err:
+ # TODO what does this do on windows? I think it'll be a different error code but I don't have a system to check it
+ # Shouldn't cause any new issues at least but we probably want to handle it there too.
+ if err.errno == errno.EXDEV:
+ # Cross device link, typical in docker or when tmp/ and extensions/ are on different file systems
+ # Since we can't use a rename, do the slower but more versitile shutil.move()
+ shutil.move(tmpdir, target_dir)
+ else:
+ # Something else, not enough free space, permissions, etc. rethrow it so that it gets handled.
+ raise(err)
import launch
launch.run_extension_installer(target_dir)
|