mirror of
https://github.com/mpv-player/mpv.git
synced 2026-10-18 07:30:39 +08:00
78159111a8
Entries in files with an extension other than .txt were silently left out of the generated list, which happened to three .rst files in the 0.41.0 release. Collect every file except example.txt and say so in the release policy.
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 changes_dir.iterdir():
|
|
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 = None
|
|
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 not major_version:
|
|
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}")
|