57 lines
1.5 KiB
Python
57 lines
1.5 KiB
Python
|
import re
|
||
|
|
||
|
## Extracts the version and newest changes from a semantic changelog.
|
||
|
#
|
||
|
# Important, it only works with three-parted version numbers
|
||
|
# a-la 1.2.3 or 313.01.1888 -- needs \d.\d.\d to work.
|
||
|
#
|
||
|
# The version number and changeset will be put in `NEWEST_VERSION.md`
|
||
|
# and `NEWEST_CHANGES.md` respectively, for further use in releases.
|
||
|
OUTPUT_FILE_VERSION = "NEWEST_VERSION.md"
|
||
|
OUTPUT_FILE_CHANGES = "NEWEST_CHANGES.md"
|
||
|
|
||
|
|
||
|
def getVersion(file):
|
||
|
for line in file:
|
||
|
m = re.match(r"^## \[(\d+\.\d+\.\d+)\]", line)
|
||
|
if m and m.group(1):
|
||
|
return m.group(1)
|
||
|
|
||
|
|
||
|
def getSection(file):
|
||
|
inRecordingMode = False
|
||
|
for line in file:
|
||
|
if not inRecordingMode:
|
||
|
if re.match(r"^## \[\d+\.\d+\.\d+\]", line):
|
||
|
inRecordingMode = True
|
||
|
elif re.match(r"^## \[\d+\.\d+\.\d+\]", line):
|
||
|
inRecordingMode = False
|
||
|
break
|
||
|
elif re.match(r"^$", line):
|
||
|
pass
|
||
|
else:
|
||
|
yield line
|
||
|
|
||
|
|
||
|
def toFile(fname, content):
|
||
|
file = open(fname, "w")
|
||
|
file.write(content)
|
||
|
file.close()
|
||
|
|
||
|
|
||
|
with open("CHANGELOG.md") as file:
|
||
|
title = getVersion(file)
|
||
|
print(title)
|
||
|
toFile(OUTPUT_FILE_VERSION, title)
|
||
|
|
||
|
with open("CHANGELOG.md") as file:
|
||
|
newest_changes_gen = getSection(file)
|
||
|
newest_changes = ""
|
||
|
for line in newest_changes_gen:
|
||
|
newest_changes += line
|
||
|
print("[Extracted Changelog]")
|
||
|
print(newest_changes)
|
||
|
toFile(OUTPUT_FILE_CHANGES, newest_changes)
|
||
|
|
||
|
file.close()
|