Add packaging dependency and fallback version compare

This commit is contained in:
2026-02-24 14:57:19 +01:00
parent 61971f2155
commit df3db2cba4
8 changed files with 57 additions and 13 deletions

View File

@@ -7,7 +7,11 @@ Prüft auf Updates über Gitea API
import urllib.request
import json
from pathlib import Path
from packaging import version as pkg_version
try:
from packaging import version as pkg_version
except Exception: # pragma: no cover - packaging may be missing in user envs
pkg_version = None
# Gitea-Konfiguration
GITEA_URL = "https://git.file-archive.de"
@@ -81,14 +85,53 @@ def check_for_updates():
try:
# Vergleiche Versionen
if pkg_version.parse(latest) > pkg_version.parse(current):
return True, latest, url
if pkg_version is not None:
if pkg_version.parse(latest) > pkg_version.parse(current):
return True, latest, url
else:
if _simple_version_compare(latest, current) > 0:
return True, latest, url
except Exception as e:
print(f"Warnung: Versionenvergleich fehlgeschlagen: {e}")
return False, None, None
def _simple_version_compare(left, right):
"""
Fallback-Versionsvergleich ohne externe Abhaengigkeiten.
Gibt 1 zurueck wenn left > right, -1 wenn left < right, sonst 0.
"""
def to_parts(value):
parts = []
for item in value.replace("v", "").split("."):
try:
parts.append(int(item))
except ValueError:
parts.append(item)
return parts
left_parts = to_parts(left)
right_parts = to_parts(right)
max_len = max(len(left_parts), len(right_parts))
for i in range(max_len):
l_val = left_parts[i] if i < len(left_parts) else 0
r_val = right_parts[i] if i < len(right_parts) else 0
if l_val == r_val:
continue
try:
return 1 if l_val > r_val else -1
except TypeError:
l_str = str(l_val)
r_str = str(r_val)
if l_str == r_str:
continue
return 1 if l_str > r_str else -1
return 0
if __name__ == "__main__":
# Test
current = get_current_version()