#!/usr/bin/python3 -s # Parse modules.txt files into rpm .spec file Provides for bundled dependencies. # Written by Fabio "decathorpe" Valentini 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 # # Minor modifications by Achilleas Koutsou 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()