mirror of
https://github.com/Comfy-Org/ComfyUI-Manager.git
synced 2025-12-22 12:50:50 +08:00
feat: update all
This commit is contained in:
parent
141435ffab
commit
9671402da3
59
__init__.py
59
__init__.py
@ -55,7 +55,7 @@ sys.path.append('../..')
|
|||||||
from torchvision.datasets.utils import download_url
|
from torchvision.datasets.utils import download_url
|
||||||
|
|
||||||
# ensure .js
|
# ensure .js
|
||||||
print("### Loading: ComfyUI-Manager (V0.27)")
|
print("### Loading: ComfyUI-Manager (V0.28)")
|
||||||
|
|
||||||
comfy_ui_required_revision = 1240
|
comfy_ui_required_revision = 1240
|
||||||
comfy_ui_revision = "Unknown"
|
comfy_ui_revision = "Unknown"
|
||||||
@ -236,9 +236,11 @@ print_comfyui_version()
|
|||||||
|
|
||||||
|
|
||||||
# use subprocess to avoid file system lock by git (Windows)
|
# use subprocess to avoid file system lock by git (Windows)
|
||||||
def __win_check_git_update(path, do_fetch=False):
|
def __win_check_git_update(path, do_fetch=False, do_update=False):
|
||||||
if do_fetch:
|
if do_fetch:
|
||||||
command = [sys.executable, git_script_path, "--fetch", path]
|
command = [sys.executable, git_script_path, "--fetch", path]
|
||||||
|
elif do_update:
|
||||||
|
command = [sys.executable, git_script_path, "--pull", path]
|
||||||
else:
|
else:
|
||||||
command = [sys.executable, git_script_path, "--check", path]
|
command = [sys.executable, git_script_path, "--check", path]
|
||||||
|
|
||||||
@ -260,13 +262,18 @@ def __win_check_git_pull(path):
|
|||||||
process.wait()
|
process.wait()
|
||||||
|
|
||||||
|
|
||||||
def git_repo_has_updates(path, do_fetch=False):
|
def git_repo_has_updates(path, do_fetch=False, do_update=False):
|
||||||
|
if do_fetch:
|
||||||
|
print(f"\rFetching: {path}", end='')
|
||||||
|
elif do_update:
|
||||||
|
print(f"\rUpdating: {path}", end='')
|
||||||
|
|
||||||
# Check if the path is a git repository
|
# Check if the path is a git repository
|
||||||
if not os.path.exists(os.path.join(path, '.git')):
|
if not os.path.exists(os.path.join(path, '.git')):
|
||||||
raise ValueError('Not a git repository')
|
raise ValueError('Not a git repository')
|
||||||
|
|
||||||
if platform.system() == "Windows":
|
if platform.system() == "Windows":
|
||||||
return __win_check_git_update(path, do_fetch)
|
return __win_check_git_update(path, do_fetch, do_update)
|
||||||
else:
|
else:
|
||||||
# Fetch the latest commits from the remote repository
|
# Fetch the latest commits from the remote repository
|
||||||
repo = git.Repo(path)
|
repo = git.Repo(path)
|
||||||
@ -279,6 +286,12 @@ def git_repo_has_updates(path, do_fetch=False):
|
|||||||
|
|
||||||
if do_fetch:
|
if do_fetch:
|
||||||
remote.fetch()
|
remote.fetch()
|
||||||
|
elif do_update:
|
||||||
|
try:
|
||||||
|
remote.pull(rebase=True)
|
||||||
|
repo.git.submodule('update', '--init', '--recursive')
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Updating failed: '{path}'\n{e}")
|
||||||
|
|
||||||
# Get the current commit hash and the commit hash of the remote branch
|
# Get the current commit hash and the commit hash of the remote branch
|
||||||
commit_hash = repo.head.commit.hexsha
|
commit_hash = repo.head.commit.hexsha
|
||||||
@ -408,7 +421,7 @@ def get_model_path(data):
|
|||||||
return os.path.join(base_model, data['filename'])
|
return os.path.join(base_model, data['filename'])
|
||||||
|
|
||||||
|
|
||||||
def check_a_custom_node_installed(item, do_fetch=False, do_update_check=True):
|
def check_a_custom_node_installed(item, do_fetch=False, do_update_check=True, do_update=False):
|
||||||
item['installed'] = 'None'
|
item['installed'] = 'None'
|
||||||
|
|
||||||
if item['install_type'] == 'git-clone' and len(item['files']) == 1:
|
if item['install_type'] == 'git-clone' and len(item['files']) == 1:
|
||||||
@ -416,7 +429,7 @@ def check_a_custom_node_installed(item, do_fetch=False, do_update_check=True):
|
|||||||
dir_path = os.path.join(custom_nodes_path, dir_name)
|
dir_path = os.path.join(custom_nodes_path, dir_name)
|
||||||
if os.path.exists(dir_path):
|
if os.path.exists(dir_path):
|
||||||
try:
|
try:
|
||||||
if do_update_check and git_repo_has_updates(dir_path, do_fetch):
|
if do_update_check and git_repo_has_updates(dir_path, do_fetch, do_update):
|
||||||
item['installed'] = 'Update'
|
item['installed'] = 'Update'
|
||||||
else:
|
else:
|
||||||
item['installed'] = 'True'
|
item['installed'] = 'True'
|
||||||
@ -448,9 +461,23 @@ def check_a_custom_node_installed(item, do_fetch=False, do_update_check=True):
|
|||||||
item['installed'] = 'False'
|
item['installed'] = 'False'
|
||||||
|
|
||||||
|
|
||||||
def check_custom_nodes_installed(json_obj, do_fetch=False, do_update_check=True):
|
def check_custom_nodes_installed(json_obj, do_fetch=False, do_update_check=True, do_update=False):
|
||||||
|
if do_fetch:
|
||||||
|
print("Start fetching...")
|
||||||
|
elif do_update:
|
||||||
|
print("Start updating...")
|
||||||
|
elif do_update_check:
|
||||||
|
print("Start update check...")
|
||||||
|
|
||||||
for item in json_obj['custom_nodes']:
|
for item in json_obj['custom_nodes']:
|
||||||
check_a_custom_node_installed(item, do_fetch, do_update_check)
|
check_a_custom_node_installed(item, do_fetch, do_update_check, do_update)
|
||||||
|
|
||||||
|
if do_fetch:
|
||||||
|
print("\nFetch done.")
|
||||||
|
elif do_update:
|
||||||
|
print("\nUpdate done.")
|
||||||
|
elif do_update_check:
|
||||||
|
print("Update check done...")
|
||||||
|
|
||||||
|
|
||||||
@server.PromptServer.instance.routes.get("/customnode/getmappings")
|
@server.PromptServer.instance.routes.get("/customnode/getmappings")
|
||||||
@ -487,6 +514,22 @@ async def fetch_updates(request):
|
|||||||
return web.Response(status=400)
|
return web.Response(status=400)
|
||||||
|
|
||||||
|
|
||||||
|
@server.PromptServer.instance.routes.get("/customnode/update_all")
|
||||||
|
async def update_all(request):
|
||||||
|
try:
|
||||||
|
if request.rel_url.query["mode"] == "local":
|
||||||
|
uri = local_db_custom_node_list
|
||||||
|
else:
|
||||||
|
uri = get_config()['channel_url'] + '/custom-node-list.json'
|
||||||
|
|
||||||
|
json_obj = await get_data(uri)
|
||||||
|
check_custom_nodes_installed(json_obj, do_update=True)
|
||||||
|
|
||||||
|
return web.Response(status=200)
|
||||||
|
except:
|
||||||
|
return web.Response(status=400)
|
||||||
|
|
||||||
|
|
||||||
@server.PromptServer.instance.routes.get("/customnode/getlist")
|
@server.PromptServer.instance.routes.get("/customnode/getlist")
|
||||||
async def fetch_customnode_list(request):
|
async def fetch_customnode_list(request):
|
||||||
if "skip_update" in request.rel_url.query and request.rel_url.query["skip_update"] == "true":
|
if "skip_update" in request.rel_url.query and request.rel_url.query["skip_update"] == "true":
|
||||||
|
|||||||
@ -5,6 +5,7 @@ import {ComfyWidgets} from "../../scripts/widgets.js";
|
|||||||
|
|
||||||
var update_comfyui_button = null;
|
var update_comfyui_button = null;
|
||||||
var fetch_updates_button = null;
|
var fetch_updates_button = null;
|
||||||
|
var update_all_button = null;
|
||||||
var badge_mode = "none";
|
var badge_mode = "none";
|
||||||
|
|
||||||
async function init_badge_mode() {
|
async function init_badge_mode() {
|
||||||
@ -214,7 +215,7 @@ async function fetchUpdates(update_check_checkbox) {
|
|||||||
|
|
||||||
const response = await api.fetchApi(`/customnode/fetch_updates?mode=${mode}`);
|
const response = await api.fetchApi(`/customnode/fetch_updates?mode=${mode}`);
|
||||||
|
|
||||||
if(response.status == 400) {
|
if(response.status != 200) {
|
||||||
app.ui.dialog.show('Failed to fetch updates.');
|
app.ui.dialog.show('Failed to fetch updates.');
|
||||||
app.ui.dialog.element.style.zIndex = 9999;
|
app.ui.dialog.element.style.zIndex = 9999;
|
||||||
return false;
|
return false;
|
||||||
@ -244,6 +245,44 @@ async function fetchUpdates(update_check_checkbox) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function updateAll(update_check_checkbox) {
|
||||||
|
let prev_text = update_all_button.innerText;
|
||||||
|
update_all_button.innerText = "Updating all...(ComfyUI)";
|
||||||
|
update_all_button.disabled = true;
|
||||||
|
update_all_button.style.backgroundColor = "gray";
|
||||||
|
|
||||||
|
try {
|
||||||
|
var mode = "url";
|
||||||
|
if(ManagerMenuDialog.instance.local_mode_checkbox.checked)
|
||||||
|
mode = "local";
|
||||||
|
|
||||||
|
update_all_button.innerText = "Updating all...";
|
||||||
|
const response1 = await api.fetchApi('/comfyui_manager/update_comfyui');
|
||||||
|
const response2 = await api.fetchApi(`/customnode/update_all?mode=${mode}`);
|
||||||
|
|
||||||
|
if(response1.status != 200 || response2.status != 200) {
|
||||||
|
app.ui.dialog.show('Failed to update ComfyUI or several extensions.<BR><BR>See terminal log.<BR>');
|
||||||
|
app.ui.dialog.element.style.zIndex = 9999;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
app.ui.dialog.show('ComfyUI and all extensions are already up-to-date with the latest versions.');
|
||||||
|
app.ui.dialog.element.style.zIndex = 9999;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch(exception) {
|
||||||
|
app.ui.dialog.show(`Failed to update ComfyUI or several extensions / ${exception}`);
|
||||||
|
app.ui.dialog.element.style.zIndex = 9999;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
update_all_button.disabled = false;
|
||||||
|
update_all_button.innerText = prev_text;
|
||||||
|
update_all_button.style.backgroundColor = "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
async function install_model(target) {
|
async function install_model(target) {
|
||||||
if(ModelInstaller.instance) {
|
if(ModelInstaller.instance) {
|
||||||
ModelInstaller.instance.startInstall(target);
|
ModelInstaller.instance.startInstall(target);
|
||||||
@ -1768,6 +1807,14 @@ class ManagerMenuDialog extends ComfyDialog {
|
|||||||
() => fetchUpdates(this.update_check_checkbox)
|
() => fetchUpdates(this.update_check_checkbox)
|
||||||
});
|
});
|
||||||
|
|
||||||
|
update_all_button =
|
||||||
|
$el("button", {
|
||||||
|
type: "button",
|
||||||
|
textContent: "Update All",
|
||||||
|
onclick:
|
||||||
|
() => updateAll(this.update_check_checkbox)
|
||||||
|
});
|
||||||
|
|
||||||
// preview method
|
// preview method
|
||||||
let preview_combo = document.createElement("select");
|
let preview_combo = document.createElement("select");
|
||||||
preview_combo.appendChild($el('option', {value:'auto', text:'Preview method: Auto'}, []));
|
preview_combo.appendChild($el('option', {value:'auto', text:'Preview method: Auto'}, []));
|
||||||
@ -1864,6 +1911,7 @@ class ManagerMenuDialog extends ComfyDialog {
|
|||||||
}),
|
}),
|
||||||
|
|
||||||
$el("br", {}, []),
|
$el("br", {}, []),
|
||||||
|
update_all_button,
|
||||||
update_comfyui_button,
|
update_comfyui_button,
|
||||||
fetch_updates_button,
|
fetch_updates_button,
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user