Commit f65d0dc0 authored by AUTOMATIC1111's avatar AUTOMATIC1111 Committed by GitHub

Merge pull request #12689 from AUTOMATIC1111/patch-config-status

Patch config status handle corrupted files
parents 4a2bf65f 2c10fda3
...@@ -8,14 +8,12 @@ import time ...@@ -8,14 +8,12 @@ import time
import tqdm import tqdm
from datetime import datetime from datetime import datetime
from collections import OrderedDict
import git import git
from modules import shared, extensions, errors from modules import shared, extensions, errors
from modules.paths_internal import script_path, config_states_dir from modules.paths_internal import script_path, config_states_dir
all_config_states = {}
all_config_states = OrderedDict()
def list_config_states(): def list_config_states():
...@@ -28,10 +26,14 @@ def list_config_states(): ...@@ -28,10 +26,14 @@ def list_config_states():
for filename in os.listdir(config_states_dir): for filename in os.listdir(config_states_dir):
if filename.endswith(".json"): if filename.endswith(".json"):
path = os.path.join(config_states_dir, filename) path = os.path.join(config_states_dir, filename)
with open(path, "r", encoding="utf-8") as f: try:
j = json.load(f) with open(path, "r", encoding="utf-8") as f:
j["filepath"] = path j = json.load(f)
config_states.append(j) assert "created_at" in j, '"created_at" does not exist'
j["filepath"] = path
config_states.append(j)
except Exception as e:
print(f'[ERROR]: Config states {path}, {e}')
config_states = sorted(config_states, key=lambda cs: cs["created_at"], reverse=True) config_states = sorted(config_states, key=lambda cs: cs["created_at"], reverse=True)
......
...@@ -65,7 +65,7 @@ def save_config_state(name): ...@@ -65,7 +65,7 @@ def save_config_state(name):
filename = os.path.join(config_states_dir, f"{timestamp}_{name}.json") filename = os.path.join(config_states_dir, f"{timestamp}_{name}.json")
print(f"Saving backup of webui/extension state to {filename}.") print(f"Saving backup of webui/extension state to {filename}.")
with open(filename, "w", encoding="utf-8") as f: with open(filename, "w", encoding="utf-8") as f:
json.dump(current_config_state, f) json.dump(current_config_state, f, indent=4)
config_states.list_config_states() config_states.list_config_states()
new_value = next(iter(config_states.all_config_states.keys()), "Current") new_value = next(iter(config_states.all_config_states.keys()), "Current")
new_choices = ["Current"] + list(config_states.all_config_states.keys()) new_choices = ["Current"] + list(config_states.all_config_states.keys())
...@@ -200,119 +200,129 @@ def update_config_states_table(state_name): ...@@ -200,119 +200,129 @@ def update_config_states_table(state_name):
created_date = time.asctime(time.gmtime(config_state["created_at"])) created_date = time.asctime(time.gmtime(config_state["created_at"]))
filepath = config_state.get("filepath", "<unknown>") filepath = config_state.get("filepath", "<unknown>")
code = f"""<!-- {time.time()} -->""" try:
webui_remote = config_state["webui"]["remote"] or ""
webui_remote = config_state["webui"]["remote"] or "" webui_branch = config_state["webui"]["branch"]
webui_branch = config_state["webui"]["branch"] webui_commit_hash = config_state["webui"]["commit_hash"] or "<unknown>"
webui_commit_hash = config_state["webui"]["commit_hash"] or "<unknown>" webui_commit_date = config_state["webui"]["commit_date"]
webui_commit_date = config_state["webui"]["commit_date"] if webui_commit_date:
if webui_commit_date: webui_commit_date = time.asctime(time.gmtime(webui_commit_date))
webui_commit_date = time.asctime(time.gmtime(webui_commit_date))
else:
webui_commit_date = "<unknown>"
remote = f"""<a href="{html.escape(webui_remote)}" target="_blank">{html.escape(webui_remote or '')}</a>"""
commit_link = make_commit_link(webui_commit_hash, webui_remote)
date_link = make_commit_link(webui_commit_hash, webui_remote, webui_commit_date)
current_webui = config_states.get_webui_config()
style_remote = ""
style_branch = ""
style_commit = ""
if current_webui["remote"] != webui_remote:
style_remote = STYLE_PRIMARY
if current_webui["branch"] != webui_branch:
style_branch = STYLE_PRIMARY
if current_webui["commit_hash"] != webui_commit_hash:
style_commit = STYLE_PRIMARY
code += f"""<h2>Config Backup: {config_name}</h2>
<div><b>Filepath:</b> {filepath}</div>
<div><b>Created at:</b> {created_date}</div>"""
code += f"""<h2>WebUI State</h2>
<table id="config_state_webui">
<thead>
<tr>
<th>URL</th>
<th>Branch</th>
<th>Commit</th>
<th>Date</th>
</tr>
</thead>
<tbody>
<tr>
<td><label{style_remote}>{remote}</label></td>
<td><label{style_branch}>{webui_branch}</label></td>
<td><label{style_commit}>{commit_link}</label></td>
<td><label{style_commit}>{date_link}</label></td>
</tr>
</tbody>
</table>
"""
code += """<h2>Extension State</h2>
<table id="config_state_extensions">
<thead>
<tr>
<th>Extension</th>
<th>URL</th>
<th>Branch</th>
<th>Commit</th>
<th>Date</th>
</tr>
</thead>
<tbody>
"""
ext_map = {ext.name: ext for ext in extensions.extensions}
for ext_name, ext_conf in config_state["extensions"].items():
ext_remote = ext_conf["remote"] or ""
ext_branch = ext_conf["branch"] or "<unknown>"
ext_enabled = ext_conf["enabled"]
ext_commit_hash = ext_conf["commit_hash"] or "<unknown>"
ext_commit_date = ext_conf["commit_date"]
if ext_commit_date:
ext_commit_date = time.asctime(time.gmtime(ext_commit_date))
else: else:
ext_commit_date = "<unknown>" webui_commit_date = "<unknown>"
remote = f"""<a href="{html.escape(ext_remote)}" target="_blank">{html.escape(ext_remote or '')}</a>""" remote = f"""<a href="{html.escape(webui_remote)}" target="_blank">{html.escape(webui_remote or '')}</a>"""
commit_link = make_commit_link(ext_commit_hash, ext_remote) commit_link = make_commit_link(webui_commit_hash, webui_remote)
date_link = make_commit_link(ext_commit_hash, ext_remote, ext_commit_date) date_link = make_commit_link(webui_commit_hash, webui_remote, webui_commit_date)
current_webui = config_states.get_webui_config()
style_enabled = ""
style_remote = "" style_remote = ""
style_branch = "" style_branch = ""
style_commit = "" style_commit = ""
if ext_name in ext_map: if current_webui["remote"] != webui_remote:
current_ext = ext_map[ext_name] style_remote = STYLE_PRIMARY
current_ext.read_info_from_repo() if current_webui["branch"] != webui_branch:
if current_ext.enabled != ext_enabled: style_branch = STYLE_PRIMARY
style_enabled = STYLE_PRIMARY if current_webui["commit_hash"] != webui_commit_hash:
if current_ext.remote != ext_remote: style_commit = STYLE_PRIMARY
style_remote = STYLE_PRIMARY
if current_ext.branch != ext_branch: code = f"""<!-- {time.time()} -->
style_branch = STYLE_PRIMARY <h2>Config Backup: {config_name}</h2>
if current_ext.commit_hash != ext_commit_hash: <div><b>Filepath:</b> {filepath}</div>
style_commit = STYLE_PRIMARY <div><b>Created at:</b> {created_date}</div>
<h2>WebUI State</h2>
code += f""" <table id="config_state_webui">
<tr> <thead>
<td><label{style_enabled}><input class="gr-check-radio gr-checkbox" type="checkbox" disabled="true" {'checked="checked"' if ext_enabled else ''}>{html.escape(ext_name)}</label></td> <tr>
<td><label{style_remote}>{remote}</label></td> <th>URL</th>
<td><label{style_branch}>{ext_branch}</label></td> <th>Branch</th>
<td><label{style_commit}>{commit_link}</label></td> <th>Commit</th>
<td><label{style_commit}>{date_link}</label></td> <th>Date</th>
</tr> </tr>
""" </thead>
<tbody>
code += """ <tr>
</tbody> <td>
</table> <label{style_remote}>{remote}</label>
""" </td>
<td>
<label{style_branch}>{webui_branch}</label>
</td>
<td>
<label{style_commit}>{commit_link}</label>
</td>
<td>
<label{style_commit}>{date_link}</label>
</td>
</tr>
</tbody>
</table>
<h2>Extension State</h2>
<table id="config_state_extensions">
<thead>
<tr>
<th>Extension</th>
<th>URL</th>
<th>Branch</th>
<th>Commit</th>
<th>Date</th>
</tr>
</thead>
<tbody>
"""
ext_map = {ext.name: ext for ext in extensions.extensions}
for ext_name, ext_conf in config_state["extensions"].items():
ext_remote = ext_conf["remote"] or ""
ext_branch = ext_conf["branch"] or "<unknown>"
ext_enabled = ext_conf["enabled"]
ext_commit_hash = ext_conf["commit_hash"] or "<unknown>"
ext_commit_date = ext_conf["commit_date"]
if ext_commit_date:
ext_commit_date = time.asctime(time.gmtime(ext_commit_date))
else:
ext_commit_date = "<unknown>"
remote = f"""<a href="{html.escape(ext_remote)}" target="_blank">{html.escape(ext_remote or '')}</a>"""
commit_link = make_commit_link(ext_commit_hash, ext_remote)
date_link = make_commit_link(ext_commit_hash, ext_remote, ext_commit_date)
style_enabled = ""
style_remote = ""
style_branch = ""
style_commit = ""
if ext_name in ext_map:
current_ext = ext_map[ext_name]
current_ext.read_info_from_repo()
if current_ext.enabled != ext_enabled:
style_enabled = STYLE_PRIMARY
if current_ext.remote != ext_remote:
style_remote = STYLE_PRIMARY
if current_ext.branch != ext_branch:
style_branch = STYLE_PRIMARY
if current_ext.commit_hash != ext_commit_hash:
style_commit = STYLE_PRIMARY
code += f""" <tr>
<td><label{style_enabled}><input class="gr-check-radio gr-checkbox" type="checkbox" disabled="true" {'checked="checked"' if ext_enabled else ''}>{html.escape(ext_name)}</label></td>
<td><label{style_remote}>{remote}</label></td>
<td><label{style_branch}>{ext_branch}</label></td>
<td><label{style_commit}>{commit_link}</label></td>
<td><label{style_commit}>{date_link}</label></td>
</tr>
"""
code += """ </tbody>
</table>"""
except Exception as e:
print(f"[ERROR]: Config states {filepath}, {e}")
code = f"""<!-- {time.time()} -->
<h2>Config Backup: {config_name}</h2>
<div><b>Filepath:</b> {filepath}</div>
<div><b>Created at:</b> {created_date}</div>
<h2>This file is corrupted</h2>"""
return code return code
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment