Files
chfoit-ipa/util/versionhistory.typ
T
2026-09-18 16:36:52 +02:00

82 lines
2.0 KiB
Typst

#let toVersions(commits: (("2025-11-19", "u80864958", "msg"),), persons: dictionary, final: false) = {
let versions = ()
for commit in commits.rev() {
let v = version(0, 0, 0)
let message = str(commit.at(2))
if versions.len() > 0 {
// versions.at(-1).v
v = versions.at(-1).v
if message.starts-with("fix") or message.starts-with("chore") {
v = version(v.at(0), v.at(1), v.at(2) + 1)
} else if message.starts-with("feat") {
v = version(v.at(0), v.at(1) + 1, 0)
}
}
if message.contains(":") {
message = commit.at(2).split(":").slice(1).flatten().at(0).trim()
}
versions.push(
(
date: toml(bytes("date = " + commit.at(0))).date,
v: v,
author: persons.at(default: persons.at(persons.keys().at(0)), commit.at(1)),
topic: message,
),
)
}
if final {
versions.push(
(
date: datetime.today(),
v: version(1, 0, 0),
author: persons.at(persons.keys().at(0)),
topic: "Finalisierung",
),
)
}
return versions
}
#let parseCurrentVersion(
commits: (("2025-11-19", "u80864958", "init"),),
persons: (
"u80864958": "Niklas Breitenstein",
"u80864987": "Johar Naamneh",
),
final: false,
) = {
return toVersions(commits: commits, persons: persons, final: final).at(-1).v
}
#let versionhistoryTable(
commits: (("2025-11-19", "u80864958", "init"),),
persons: (
"u80864958": "Niklas Breitenstein",
"u80864987": "Johar Naamneh",
),
final: false,
) = {
let versions = toVersions(commits: commits, persons: persons, final: final)
set heading(numbering: none)
[= Änderungsverzeichnis]
set par(justify: false)
figure(
table(
columns: (6em, 6em, 2fr, 2.7fr),
table.header([Version], [Datum], [Name], [Themen]),
..versions
.map(v => (
[v#v.v],
v.date.display("[day].[month].[year]"),
v.author,
v.topic,
))
.flatten(),
),
caption: [Änderungsverzeichnis],
)
}