fix: invalid version handling

https://github.com/ltdrdata/ComfyUI-Manager/issues/953
This commit is contained in:
Dr.Lt.Data 2024-08-14 01:53:28 +09:00
parent 74bf39ab27
commit d95b974941
4 changed files with 56 additions and 55 deletions

View File

@ -23,7 +23,7 @@ sys.path.append(glob_path)
import cm_global import cm_global
from manager_util import * from manager_util import *
version = [2, 48, 6] version = [2, 48, 7]
version_str = f"V{version[0]}.{version[1]}" + (f'.{version[2]}' if len(version) > 2 else '') version_str = f"V{version[0]}.{version[1]}" + (f'.{version[2]}' if len(version) > 2 else '')
@ -123,7 +123,7 @@ def is_installed(name):
if name.startswith('#'): if name.startswith('#'):
return True return True
pattern = r'([^<>!=]+)([<>!=]=?)([^ ]*)' pattern = r'([^<>!=]+)([<>!=]=?)([0-9.a-zA-Z]*)'
match = re.search(pattern, name) match = re.search(pattern, name)
if match: if match:

View File

@ -1,63 +1,64 @@
try: # DON'T USE StrictVersion - cannot handle pre_release version
from distutils.version import StrictVersion # try:
except: # from distutils.version import StrictVersion
print(f"[ComfyUI-Manager] 'distutils' package not found. Activating fallback mode for compatibility.") # except:
class StrictVersion: print(f"[ComfyUI-Manager] 'distutils' package not found. Activating fallback mode for compatibility.")
def __init__(self, version_string): class StrictVersion:
self.version_string = version_string def __init__(self, version_string):
self.major = 0 self.version_string = version_string
self.minor = 0 self.major = 0
self.patch = 0 self.minor = 0
self.pre_release = None self.patch = 0
self.parse_version_string() self.pre_release = None
self.parse_version_string()
def parse_version_string(self): def parse_version_string(self):
parts = self.version_string.split('.') parts = self.version_string.split('.')
if not parts: if not parts:
raise ValueError("Version string must not be empty") raise ValueError("Version string must not be empty")
self.major = int(parts[0]) self.major = int(parts[0])
self.minor = int(parts[1]) if len(parts) > 1 else 0 self.minor = int(parts[1]) if len(parts) > 1 else 0
self.patch = int(parts[2]) if len(parts) > 2 else 0 self.patch = int(parts[2]) if len(parts) > 2 else 0
# Handling pre-release versions if present # Handling pre-release versions if present
if len(parts) > 3: if len(parts) > 3:
self.pre_release = parts[3] self.pre_release = parts[3]
def __str__(self): def __str__(self):
version = f"{self.major}.{self.minor}.{self.patch}" version = f"{self.major}.{self.minor}.{self.patch}"
if self.pre_release: if self.pre_release:
version += f"-{self.pre_release}" version += f"-{self.pre_release}"
return version return version
def __eq__(self, other): def __eq__(self, other):
return (self.major, self.minor, self.patch, self.pre_release) == \ return (self.major, self.minor, self.patch, self.pre_release) == \
(other.major, other.minor, other.patch, other.pre_release) (other.major, other.minor, other.patch, other.pre_release)
def __lt__(self, other): def __lt__(self, other):
if (self.major, self.minor, self.patch) == (other.major, other.minor, other.patch): if (self.major, self.minor, self.patch) == (other.major, other.minor, other.patch):
return self.pre_release_compare(self.pre_release, other.pre_release) < 0 return self.pre_release_compare(self.pre_release, other.pre_release) < 0
return (self.major, self.minor, self.patch) < (other.major, other.minor, other.patch) return (self.major, self.minor, self.patch) < (other.major, other.minor, other.patch)
@staticmethod @staticmethod
def pre_release_compare(pre1, pre2): def pre_release_compare(pre1, pre2):
if pre1 == pre2: if pre1 == pre2:
return 0 return 0
if pre1 is None: if pre1 is None:
return 1 return 1
if pre2 is None: if pre2 is None:
return -1 return -1
return -1 if pre1 < pre2 else 1 return -1 if pre1 < pre2 else 1
def __le__(self, other): def __le__(self, other):
return self == other or self < other return self == other or self < other
def __gt__(self, other): def __gt__(self, other):
return not self <= other return not self <= other
def __ge__(self, other): def __ge__(self, other):
return not self < other return not self < other
def __ne__(self, other): def __ne__(self, other):
return not self == other return not self == other

View File

@ -448,7 +448,7 @@ def is_installed(name):
if name.startswith('#'): if name.startswith('#'):
return True return True
pattern = r'([^<>!=]+)([<>!=]=?)([^ ]*)' pattern = r'([^<>!=]+)([<>!=]=?)([0-9.a-zA-Z]*)'
match = re.search(pattern, name) match = re.search(pattern, name)
if match: if match:

View File

@ -1,7 +1,7 @@
[project] [project]
name = "comfyui-manager" name = "comfyui-manager"
description = "ComfyUI-Manager provides features to install and manage custom nodes for ComfyUI, as well as various functionalities to assist with ComfyUI." description = "ComfyUI-Manager provides features to install and manage custom nodes for ComfyUI, as well as various functionalities to assist with ComfyUI."
version = "2.48.6" version = "2.48.7"
license = { file = "LICENSE.txt" } license = { file = "LICENSE.txt" }
dependencies = ["GitPython", "PyGithub", "matrix-client==0.4.0", "transformers", "huggingface-hub>0.20", "typer", "rich", "typing-extensions"] dependencies = ["GitPython", "PyGithub", "matrix-client==0.4.0", "transformers", "huggingface-hub>0.20", "typer", "rich", "typing-extensions"]