mirror of
https://github.com/mpv-player/mpv
synced 2024-12-12 09:56:30 +00:00
93 lines
3.2 KiB
Python
Executable File
93 lines
3.2 KiB
Python
Executable File
#!/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
|
|
import textwrap
|
|
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 f.name != "example.txt":
|
|
timestamp = check_output([git, "log", "--format=%ct", "-n", "1", "--",
|
|
f], encoding="UTF-8")
|
|
if timestamp:
|
|
content = f.read_text()
|
|
files.append(content)
|
|
else:
|
|
print(f"Skipping file not tracked by git: {f.name}")
|
|
|
|
# Sort the changes by "severity", which roughly corresponds to
|
|
# alphabetical order by accident (e.g. remove > deprecate > change > add)
|
|
for file in reversed(sorted(files)):
|
|
for line in file.splitlines():
|
|
line = textwrap.fill(line.rstrip(), width=80,
|
|
initial_indent=" - ",
|
|
subsequent_indent=" ")
|
|
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) 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 ---"
|
|
found = False
|
|
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)
|
|
found = True
|
|
if not found:
|
|
print(f"Nothing changed! The following line was not found:\n{ver_line}")
|