mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2026-07-25 06:54:43 +00:00
7cf8483f9a
They renamed the extension from appdata to metainfo long time ago and the right name is "AppStream metadata"
78 lines
2.5 KiB
Python
Executable File
78 lines
2.5 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
import re
|
|
import datetime
|
|
from xml.etree import ElementTree as ET
|
|
import argparse
|
|
|
|
def parse_changelog(changelog_path):
|
|
version_re = re.compile(r'([\d.-]+)\s+(\w+)?\s*\((\d{2}.\d{2}\.\d{2})\)')
|
|
entry_re = re.compile(r'-\s(.*)')
|
|
|
|
with open(changelog_path, "r", encoding="utf-8") as f:
|
|
changelog_lines = f.read().splitlines()
|
|
|
|
releases = []
|
|
for l in changelog_lines:
|
|
version_match = version_re.match(l)
|
|
entry_match = entry_re.match(l)
|
|
if version_match is not None:
|
|
version, prerelease, date = version_match.groups()
|
|
release = (version,
|
|
prerelease,
|
|
datetime.datetime.strptime(date, '%d.%m.%y').date(),
|
|
[])
|
|
releases.append(release)
|
|
elif entry_match is not None:
|
|
release[3].append(entry_match.group(1))
|
|
|
|
return releases
|
|
|
|
def get_release_xml(version, prerelease, date, changes):
|
|
release = ET.Element("release")
|
|
if prerelease is None:
|
|
ver_str = version
|
|
else:
|
|
ver_str = f"{version}~{prerelease}"
|
|
release.set("version", ver_str)
|
|
release.set("date", date.isoformat())
|
|
description = ET.SubElement(release, "description")
|
|
changelist = ET.SubElement(description, "ul")
|
|
for c in changes:
|
|
change = ET.SubElement(changelist, "li")
|
|
change.text = c
|
|
return release
|
|
|
|
def get_changelog_xml(changelog, max_items=None):
|
|
releases = ET.Element("releases")
|
|
if max_items is not None:
|
|
changelog = changelog[:max_items]
|
|
for rel in changelog:
|
|
release = get_release_xml(*rel)
|
|
releases.append(release)
|
|
return releases
|
|
|
|
def update_metadata(metadata_path, changelog, max_items=None):
|
|
metadata = ET.parse(metadata_path)
|
|
root = metadata.getroot()
|
|
releases = root.find("releases")
|
|
if releases is not None:
|
|
root.remove(releases)
|
|
root.append(
|
|
get_changelog_xml(changelog, max_items)
|
|
)
|
|
metadata.write(metadata_path, encoding="utf-8", xml_declaration=True)
|
|
|
|
def main():
|
|
ap = argparse.ArgumentParser("Parse Telegram changelog")
|
|
ap.add_argument("-c", "--changelog-path", default="changelog.txt")
|
|
ap.add_argument("-m", "--metadata-path", default="lib/xdg/org.telegram.desktop.metainfo.xml")
|
|
ap.add_argument("-n", "--num-releases", type=int, default=None)
|
|
args = ap.parse_args()
|
|
update_metadata(args.metadata_path,
|
|
parse_changelog(args.changelog_path),
|
|
max_items=args.num_releases)
|
|
|
|
if __name__ == "__main__":
|
|
main()
|