Skip to content
Snippets Groups Projects
Commit 6df51113 authored by John Swinbank's avatar John Swinbank
Browse files

Generate change record from tags

parent 05554762
No related branches found
No related tags found
1 merge request!23Generate change record from tags
#!/usr/bin/env python
# Generate a change record for inclusion in an astron-texmf style LaTeX
# document.
# Assumes that all the relevant versions in the document have tags which match
# \d+\.\d+.
import subprocess
from dataclasses import dataclass
from datetime import datetime
from io import StringIO
from re import match
@dataclass
class Tag(object):
"""Represent a git tag"""
name: str
message: str
@property
def rev(self):
return subprocess.check_output(["git", "rev-parse", self.name]).decode().strip()
@property
def date(self):
for line in (
subprocess.check_output(["git", "cat-file", "-p", self.rev])
.decode()
.strip()
.split("\n")
):
if line.startswith("tagger"):
return datetime.fromtimestamp(int(line.split()[-2]))
def escape_latex(text):
return text.strip().replace("#", r"\#").replace("&", r"\&")
def get_all_tags():
return [
Tag(*tag.split(None, 1))
for tag in subprocess.check_output(["git", "tag", "-n99", "--merged"])
.decode()
.strip()
.split("\n")
]
def generate_change_record(tags):
output = StringIO()
output.write("\setDocChangeRecord{\n")
for tag in sorted(tags, key=lambda x: x.name, reverse=True):
if match(r"\d+\.\d+", tag.name):
output.write(f" \\addChangeRecord{{{escape_latex(tag.name)}}}")
output.write(f"{{{tag.date.strftime('%Y-%m-%d')}}}")
output.write(f"{{{escape_latex(tag.message)}}}\n")
output.write("}")
return output.getvalue()
if __name__ == "__main__":
print(generate_change_record(get_all_tags()))
.FORCE:
changes.tex: Makefile .FORCE
astron-texmf/bin/gen_change_record.py > changes.tex
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment