debian-forge-composer/tools/rpm_spec_vendor2provides
2023-07-18 23:20:19 +02:00

63 lines
1.9 KiB
Python
Executable file

#!/usr/bin/python3 -s
# Parse modules.txt files into rpm .spec file Provides for bundled dependencies.
# Written by Fabio "decathorpe" Valentini <decathorpe@fedoraproject.org> for
# the fedora syncthing package: https://src.fedoraproject.org/rpms/syncthing
# SPDX-License-Identifier: CC0-1.0 OR Unlicense
# Modified by @gotmax23 to be used as a dependency generator
# SPDX-License-Identifier: GPL-3.0-or-later
# SPDX-FileCopyrightText: 2022 Maxwell G <gotmax@e.email>
#
# Minor modifications by Achilleas Koutsou <achilleas@koutsou.net> to be used in
# the rpm spec file generator for https://github.com/osbuild/osbuild-composer
import re
import sys
def process(path: str):
with open(path, encoding="utf-8") as file:
contents = file.read()
lines = contents.split("\n")
# dependencies = filter lines for "# package version"
dependencies = list(filter(lambda line: line.startswith("# "), lines))
# parse vendored dependencies into (import path, version) pairs
vendored = []
# Handle => style replace directives
replace_regex = re.compile(r"^.+( v[0-9-\.]+)? => ")
for dep in dependencies:
fields = replace_regex.sub("", dep[2:]).split(" ")
if len(fields) == 2:
ipath, version = fields
elif len(fields) == 1:
ipath = fields[0]
version = "HEAD"
else:
raise RuntimeError(f"Failed to parse dependency: {dep}")
# check for git snapshots
if len(version) > 27:
# return only 7 digits of git commit hash
version = version[-12:-1][0:7]
else:
# strip off leading "v"
version = version.lstrip("v")
vendored.append((ipath, version))
for ipath, version in vendored:
print(f"Provides: bundled(golang({ipath})) = {version}")
def main() -> None:
files = sys.argv[1:]
for file in files:
process(file)
if __name__ == "__main__":
main()