Harden apt update parsing
This commit is contained in:
@@ -1,4 +1,5 @@
|
|||||||
import os
|
import os
|
||||||
|
import re
|
||||||
from services.runner import run_cmd
|
from services.runner import run_cmd
|
||||||
|
|
||||||
|
|
||||||
@@ -30,19 +31,16 @@ async def list_updates() -> tuple[str, list[str]]:
|
|||||||
if not line or line.startswith("Listing..."):
|
if not line or line.startswith("Listing..."):
|
||||||
continue
|
continue
|
||||||
# Format: name/repo new_ver arch [upgradable from: old]
|
# Format: name/repo new_ver arch [upgradable from: old]
|
||||||
parts = line.split()
|
m = re.match(r"^(\S+)\s+(\S+)\s", line)
|
||||||
if len(parts) < 2:
|
if not m:
|
||||||
continue
|
continue
|
||||||
name_repo = parts[0]
|
name_repo, new_ver = m.group(1), m.group(2)
|
||||||
new_ver = parts[1]
|
name = name_repo.split("/", 1)[0] if "/" in name_repo else name_repo
|
||||||
if "/" not in name_repo:
|
|
||||||
name = name_repo
|
|
||||||
else:
|
|
||||||
name = name_repo.split("/", 1)[0]
|
|
||||||
old_ver = None
|
old_ver = None
|
||||||
marker = "upgradable from: "
|
m_old = re.search(r"upgradable from:\s*([^\]]+)", line)
|
||||||
if marker in line:
|
if m_old:
|
||||||
old_ver = line.split(marker, 1)[1].rstrip("]").strip()
|
old_ver = m_old.group(1).strip()
|
||||||
if old_ver:
|
if old_ver:
|
||||||
lines.append(f"{name}: {old_ver} -> {new_ver}")
|
lines.append(f"{name}: {old_ver} -> {new_ver}")
|
||||||
else:
|
else:
|
||||||
|
|||||||
Reference in New Issue
Block a user