TOOLS: add an interface-changes generator script

Convenience script to automatically generate interface-changes.rst based
on the workflow introduced in the previous commit.
This commit is contained in:
Dudemanguy 2024-02-26 22:04:30 -06:00
parent 58363d209c
commit 188155457d
1 changed files with 83 additions and 0 deletions

83
TOOLS/gen-interface-changes.py Executable file
View File

@ -0,0 +1,83 @@
#!/usr/bin/env python3
# Generate a new interface-changes.rst based on the entries in
# the interface-changes directory.
#
# This file is part of mpv.
#
# mpv is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# mpv is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with mpv. If not, see <http://www.gnu.org/licenses/>.
#
import pathlib
import sys
from shutil import which
from subprocess import check_output
def add_new_entries(docs_dir, out, git):
changes_dir = pathlib.Path(docs_dir) / "interface-changes"
files = []
for f in pathlib.Path(changes_dir).glob("*.txt"):
if f.is_file() and not f.name == "example.txt":
timestamp = check_output([git, "log", "--format=%ct", "-n", "1", "--",
f], encoding="UTF-8")
if timestamp:
files.append((f, timestamp))
else:
print(f"Skipping file not tracked by git: {f.name}")
files.sort(key=lambda x: x[1])
for file in files:
with open(file[0].resolve(), "r") as f:
for line in f:
line = " - " + line.rstrip()
out.write(line + "\n")
if __name__ == "__main__":
if len(sys.argv) < 2:
print(f"Usage: {sys.argv[0]} <version>")
sys.exit(1)
git = which('git')
if not git:
print("Unable to find git binary")
sys.exit(1)
# Accept passing only the major version number and the full 0 version.
major_version = -1
if sys.argv[1].isdigit():
major_version = sys.argv[1]
else:
ver_split = sys.argv[1].split(".")
if len(ver_split) == 3 and ver_split[1].isdigit():
major_version = ver_split[1]
if major_version == -1:
print(f"Invalid version number: {sys.argv[1]}")
sys.exit(1)
docs_dir = pathlib.Path(sys.argv[0]).resolve().parents[1] / "DOCS"
interface_changes = docs_dir / "interface-changes.rst"
with open(interface_changes, "r") as f:
lines = [line.rstrip() for line in f]
ver_line = " --- mpv 0." + major_version + ".0 ---"
next_ver_line = " --- mpv 0." + str(int(major_version) + 1) + ".0 ---"
with open(interface_changes, "w", newline="\n") as f:
for line in lines:
if line == ver_line:
f.write(next_ver_line + "\n")
f.write(line + "\n")
if line == ver_line:
add_new_entries(docs_dir, f, git)