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:
@@ -168,10 +168,11 @@ jobs:
|
|||||||
version = os.environ["VERSION"]
|
version = os.environ["VERSION"]
|
||||||
with open("CHANGELOG.md", encoding="utf-8") as f:
|
with open("CHANGELOG.md", encoding="utf-8") as f:
|
||||||
content = f.read()
|
content = f.read()
|
||||||
# "## v<version>" optional gefolgt von " — Datum" und beliebigem Suffix,
|
# "## v<version>" gefolgt von beliebigem Rest der Zeile (auch "— Datum"),
|
||||||
# Inhalt bis zum nächsten "## v<x.y.z>" oder einer "---"-Trennzeile oder EOF.
|
# 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(
|
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,
|
re.MULTILINE | re.DOTALL,
|
||||||
)
|
)
|
||||||
m = pat.search(content)
|
m = pat.search(content)
|
||||||
@@ -229,9 +230,10 @@ jobs:
|
|||||||
readme_path = pathlib.Path(sys.argv[1])
|
readme_path = pathlib.Path(sys.argv[1])
|
||||||
changelog_path = pathlib.Path(sys.argv[2])
|
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(
|
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,
|
re.MULTILINE | re.DOTALL,
|
||||||
)
|
)
|
||||||
content = changelog_path.read_text(encoding="utf-8")
|
content = changelog_path.read_text(encoding="utf-8")
|
||||||
|
|||||||
Reference in New Issue
Block a user