rustc/debian/scripts/guess-crate-copyright
Fabian Grünbichler eecde9fa78 guess-crate-copyright: switch to python3-toml
form pytoml, which is no longer available in bookworm or later

Signed-off-by: Fabian Grünbichler <debian@fabian.gruenbichler.email>
2024-05-02 18:11:07 +02:00

46 lines
1.3 KiB
Python
Executable File

#!/usr/bin/python3
# Copyright: 2015-2017 The Debian Project
# License: MIT or Apache-2.0
#
# Guess the copyright of a cargo crate by looking at its git history.
import datetime
import toml
import os
import subprocess
import sys
this_year = datetime.datetime.now().year
crates = sys.argv[1:]
get_initial_commit = len(crates) == 1
for crate in crates:
with open(os.path.join(crate, "Cargo.toml")) as fp:
data = toml.load(fp)
repo = data["package"].get("repository", None)
if get_initial_commit and repo:
output = subprocess.check_output(
"""git clone -q --bare "%s" tmp.crate-copyright >&2 &&
cd tmp.crate-copyright &&
git log --format=%%cI --reverse | head -n1 | cut -b1-4 &&
git log --format=%%cI | head -n1 | cut -b1-4 &&
cd .. &&
rm -rf tmp.crate-copyright""" % repo, shell=True).decode("utf-8")
first_year, last_year = output.strip().split(maxsplit=2)
else:
first_year = "20XX"
last_year = this_year
authors = data["package"].get("authors", ["UNKNOWN AUTHORS"])
print("""Files: {0}
Copyright: {1}
License: {2}
Comment: see {3}
""".format(
os.path.join(crate, "*"),
"\n ".join("%s-%s %s" % (first_year, last_year, a.replace(" <>", "")) for a in authors),
data["package"].get("license", "???").replace("/", " or "),
repo or "???"
))