Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
S
Stable Diffusion Webui
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Packages
Packages
List
Container Registry
Analytics
Analytics
CI / CD
Code Review
Insights
Issues
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
novelai-storage
Stable Diffusion Webui
Commits
77a10c62
Commit
77a10c62
authored
May 29, 2023
by
Aarni Koskela
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Patch GitPython to not use leaky persistent processes
parent
b957dcfe
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
52 additions
and
5 deletions
+52
-5
modules/extensions.py
modules/extensions.py
+4
-5
modules/gitpython_hack.py
modules/gitpython_hack.py
+42
-0
modules/ui_extensions.py
modules/ui_extensions.py
+6
-0
No files found.
modules/extensions.py
View file @
77a10c62
...
...
@@ -3,9 +3,8 @@ import sys
import
threading
import
traceback
import
git
from
modules
import
shared
from
modules.gitpython_hack
import
Repo
from
modules.paths_internal
import
extensions_dir
,
extensions_builtin_dir
,
script_path
# noqa: F401
extensions
=
[]
...
...
@@ -54,7 +53,7 @@ class Extension:
repo
=
None
try
:
if
os
.
path
.
exists
(
os
.
path
.
join
(
self
.
path
,
".git"
)):
repo
=
git
.
Repo
(
self
.
path
)
repo
=
Repo
(
self
.
path
)
except
Exception
:
print
(
f
"Error reading github repository info from {self.path}:"
,
file
=
sys
.
stderr
)
print
(
traceback
.
format_exc
(),
file
=
sys
.
stderr
)
...
...
@@ -94,7 +93,7 @@ class Extension:
return
res
def
check_updates
(
self
):
repo
=
git
.
Repo
(
self
.
path
)
repo
=
Repo
(
self
.
path
)
for
fetch
in
repo
.
remote
()
.
fetch
(
dry_run
=
True
):
if
fetch
.
flags
!=
fetch
.
HEAD_UPTODATE
:
self
.
can_update
=
True
...
...
@@ -116,7 +115,7 @@ class Extension:
self
.
status
=
"latest"
def
fetch_and_reset_hard
(
self
,
commit
=
'origin'
):
repo
=
git
.
Repo
(
self
.
path
)
repo
=
Repo
(
self
.
path
)
# Fix: `error: Your local changes to the following files would be overwritten by merge`,
# because WSL2 Docker set 755 file permissions instead of 644, this results to the error.
repo
.
git
.
fetch
(
all
=
True
)
...
...
modules/gitpython_hack.py
0 → 100644
View file @
77a10c62
from
__future__
import
annotations
import
io
import
subprocess
import
git
class
Git
(
git
.
Git
):
"""
Git subclassed to never use persistent processes.
"""
def
_get_persistent_cmd
(
self
,
attr_name
,
cmd_name
,
*
args
,
**
kwargs
):
raise
NotImplementedError
(
f
"Refusing to use persistent process: {attr_name} ({cmd_name} {args} {kwargs})"
)
def
get_object_header
(
self
,
ref
:
str
|
bytes
)
->
tuple
[
str
,
str
,
int
]:
ret
=
subprocess
.
check_output
(
[
self
.
GIT_PYTHON_GIT_EXECUTABLE
,
"cat-file"
,
"--batch-check"
],
input
=
self
.
_prepare_ref
(
ref
),
cwd
=
self
.
_working_dir
,
timeout
=
2
,
)
return
self
.
_parse_object_header
(
ret
)
def
stream_object_data
(
self
,
ref
:
str
)
->
tuple
[
str
,
str
,
int
,
"Git.CatFileContentStream"
]:
# Not really streaming, per se; this buffers the entire object in memory.
# Shouldn't be a problem for our use case, since we're only using this for
# object headers (commit objects).
ret
=
subprocess
.
check_output
(
[
self
.
GIT_PYTHON_GIT_EXECUTABLE
,
"cat-file"
,
"--batch"
],
input
=
self
.
_prepare_ref
(
ref
),
cwd
=
self
.
_working_dir
,
timeout
=
30
,
)
bio
=
io
.
BytesIO
(
ret
)
hexsha
,
typename
,
size
=
self
.
_parse_object_header
(
bio
.
readline
())
return
(
hexsha
,
typename
,
size
,
self
.
CatFileContentStream
(
size
,
bio
))
class
Repo
(
git
.
Repo
):
GitCommandWrapperType
=
Git
modules/ui_extensions.py
View file @
77a10c62
...
...
@@ -490,8 +490,14 @@ def refresh_available_extensions_from_data(hide_tags, sort_column, filter_text="
def
preload_extensions_git_metadata
():
t0
=
time
.
time
()
for
extension
in
extensions
.
extensions
:
extension
.
read_info_from_repo
()
print
(
f
"preload_extensions_git_metadata for "
f
"{len(extensions.extensions)} extensions took "
f
"{time.time() - t0:.2f}s"
)
def
create_ui
():
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment