Skip to content

Commit d95b974

Browse files
committed
fix: invalid version handling
#953
1 parent 74bf39a commit d95b974

File tree

4 files changed

+67
-66
lines changed

4 files changed

+67
-66
lines changed

glob/manager_core.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
import cm_global
2424
from manager_util import *
2525

26-
version = [2, 48, 6]
26+
version = [2, 48, 7]
2727
version_str = f"V{version[0]}.{version[1]}" + (f'.{version[2]}' if len(version) > 2 else '')
2828

2929

@@ -123,7 +123,7 @@ def is_installed(name):
123123
if name.startswith('#'):
124124
return True
125125

126-
pattern = r'([^<>!=]+)([<>!=]=?)([^ ]*)'
126+
pattern = r'([^<>!=]+)([<>!=]=?)([0-9.a-zA-Z]*)'
127127
match = re.search(pattern, name)
128128

129129
if match:

glob/manager_util.py

Lines changed: 63 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -1,63 +1,64 @@
1-
try:
2-
from distutils.version import StrictVersion
3-
except:
4-
print(f"[ComfyUI-Manager] 'distutils' package not found. Activating fallback mode for compatibility.")
5-
class StrictVersion:
6-
def __init__(self, version_string):
7-
self.version_string = version_string
8-
self.major = 0
9-
self.minor = 0
10-
self.patch = 0
11-
self.pre_release = None
12-
self.parse_version_string()
13-
14-
def parse_version_string(self):
15-
parts = self.version_string.split('.')
16-
if not parts:
17-
raise ValueError("Version string must not be empty")
18-
19-
self.major = int(parts[0])
20-
self.minor = int(parts[1]) if len(parts) > 1 else 0
21-
self.patch = int(parts[2]) if len(parts) > 2 else 0
22-
23-
# Handling pre-release versions if present
24-
if len(parts) > 3:
25-
self.pre_release = parts[3]
26-
27-
def __str__(self):
28-
version = f"{self.major}.{self.minor}.{self.patch}"
29-
if self.pre_release:
30-
version += f"-{self.pre_release}"
31-
return version
32-
33-
def __eq__(self, other):
34-
return (self.major, self.minor, self.patch, self.pre_release) == \
35-
(other.major, other.minor, other.patch, other.pre_release)
36-
37-
def __lt__(self, other):
38-
if (self.major, self.minor, self.patch) == (other.major, other.minor, other.patch):
39-
return self.pre_release_compare(self.pre_release, other.pre_release) < 0
40-
return (self.major, self.minor, self.patch) < (other.major, other.minor, other.patch)
41-
42-
@staticmethod
43-
def pre_release_compare(pre1, pre2):
44-
if pre1 == pre2:
45-
return 0
46-
if pre1 is None:
47-
return 1
48-
if pre2 is None:
49-
return -1
50-
return -1 if pre1 < pre2 else 1
51-
52-
def __le__(self, other):
53-
return self == other or self < other
54-
55-
def __gt__(self, other):
56-
return not self <= other
57-
58-
def __ge__(self, other):
59-
return not self < other
60-
61-
def __ne__(self, other):
62-
return not self == other
1+
# DON'T USE StrictVersion - cannot handle pre_release version
2+
# try:
3+
# from distutils.version import StrictVersion
4+
# except:
5+
print(f"[ComfyUI-Manager] 'distutils' package not found. Activating fallback mode for compatibility.")
6+
class StrictVersion:
7+
def __init__(self, version_string):
8+
self.version_string = version_string
9+
self.major = 0
10+
self.minor = 0
11+
self.patch = 0
12+
self.pre_release = None
13+
self.parse_version_string()
14+
15+
def parse_version_string(self):
16+
parts = self.version_string.split('.')
17+
if not parts:
18+
raise ValueError("Version string must not be empty")
19+
20+
self.major = int(parts[0])
21+
self.minor = int(parts[1]) if len(parts) > 1 else 0
22+
self.patch = int(parts[2]) if len(parts) > 2 else 0
23+
24+
# Handling pre-release versions if present
25+
if len(parts) > 3:
26+
self.pre_release = parts[3]
27+
28+
def __str__(self):
29+
version = f"{self.major}.{self.minor}.{self.patch}"
30+
if self.pre_release:
31+
version += f"-{self.pre_release}"
32+
return version
33+
34+
def __eq__(self, other):
35+
return (self.major, self.minor, self.patch, self.pre_release) == \
36+
(other.major, other.minor, other.patch, other.pre_release)
37+
38+
def __lt__(self, other):
39+
if (self.major, self.minor, self.patch) == (other.major, other.minor, other.patch):
40+
return self.pre_release_compare(self.pre_release, other.pre_release) < 0
41+
return (self.major, self.minor, self.patch) < (other.major, other.minor, other.patch)
42+
43+
@staticmethod
44+
def pre_release_compare(pre1, pre2):
45+
if pre1 == pre2:
46+
return 0
47+
if pre1 is None:
48+
return 1
49+
if pre2 is None:
50+
return -1
51+
return -1 if pre1 < pre2 else 1
52+
53+
def __le__(self, other):
54+
return self == other or self < other
55+
56+
def __gt__(self, other):
57+
return not self <= other
58+
59+
def __ge__(self, other):
60+
return not self < other
61+
62+
def __ne__(self, other):
63+
return not self == other
6364

prestartup_script.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -448,7 +448,7 @@ def is_installed(name):
448448
if name.startswith('#'):
449449
return True
450450

451-
pattern = r'([^<>!=]+)([<>!=]=?)([^ ]*)'
451+
pattern = r'([^<>!=]+)([<>!=]=?)([0-9.a-zA-Z]*)'
452452
match = re.search(pattern, name)
453453

454454
if match:

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
[project]
22
name = "comfyui-manager"
33
description = "ComfyUI-Manager provides features to install and manage custom nodes for ComfyUI, as well as various functionalities to assist with ComfyUI."
4-
version = "2.48.6"
4+
version = "2.48.7"
55
license = { file = "LICENSE.txt" }
66
dependencies = ["GitPython", "PyGithub", "matrix-client==0.4.0", "transformers", "huggingface-hub>0.20", "typer", "rich", "typing-extensions"]
77

0 commit comments

Comments
 (0)