fix(release-plugin): Regex — .* greedy mit DOTALL schluckt bis EOF

Mit re.DOTALL matcht .* auch Newlines. Kombination mit (?:\s+.*)?$\n
führte dazu, dass die erste Version-Zeile bis zum Dateiende gefressen
wurde und Capture-Group leer blieb (0 Zeichen).

Fix: .* durch [^\n]* ersetzen, damit erste Zeile genau auf eine Zeile
begrenzt ist. Gilt für beide Changelog-Parser (Block-Extraktion und
entry_pat in readme.txt-Generator).
This commit is contained in:
2026-04-24 14:18:45 +00:00
parent 6c8f3f2d21
commit 0f7062b0c4
+7 -5
View File
@@ -168,10 +168,11 @@ jobs:
version = os.environ["VERSION"]
with open("CHANGELOG.md", encoding="utf-8") as f:
content = f.read()
# "## v<version>" optional gefolgt von " — Datum" und beliebigem Suffix,
# Inhalt bis zum nächsten "## v<x.y.z>" oder einer "---"-Trennzeile oder EOF.
# "## v<version>" gefolgt von beliebigem Rest der Zeile (auch "— Datum"),
# Inhalt ab nächster Zeile bis zum nächsten "## v<x.y.z>" oder "---" oder EOF.
# [^\n]* statt .*, damit die erste Zeile nicht mit DOTALL bis EOF gefressen wird.
pat = re.compile(
r"^##\s+v" + re.escape(version) + r"(?:\s+.*)?$\n(.*?)(?=^##\s+v\d|^---\s*$|\Z)",
r"^##\s+v" + re.escape(version) + r"[^\n]*\n(.*?)(?=^##\s+v\d|^---\s*$|\Z)",
re.MULTILINE | re.DOTALL,
)
m = pat.search(content)
@@ -229,9 +230,10 @@ jobs:
readme_path = pathlib.Path(sys.argv[1])
changelog_path = pathlib.Path(sys.argv[2])
# CHANGELOG.md parsen: Einträge "## v<x.y.z> — <Datum?>" bis zum nächsten "## v…" oder "---" oder EOF
# CHANGELOG.md parsen: Einträge "## v<x.y.z> — <Datum?>" bis zum nächsten "## v…" oder "---" oder EOF.
# [^\n]* für die erste Zeile, damit DOTALL nicht greedy über Zeilen frisst.
entry_pat = re.compile(
r"^##\s+v(\d+\.\d+\.\d+)(?:\s+—\s+(\S+))?(?:\s+.*)?$\n(.*?)(?=^##\s+v\d|^---\s*$|\Z)",
r"^##\s+v(\d+\.\d+\.\d+)(?:\s+—\s+(\S+))?[^\n]*\n(.*?)(?=^##\s+v\d|^---\s*$|\Z)",
re.MULTILINE | re.DOTALL,
)
content = changelog_path.read_text(encoding="utf-8")