Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)
at python-updates 50 lines 1.2 kB view raw
1import base64 2import binascii 3import configparser 4import json 5import pathlib 6import sys 7import urllib.parse 8 9 10def to_sri(hash: str): 11 raw = binascii.unhexlify(hash) 12 b64 = base64.b64encode(raw).decode() 13 return f"sha256-{b64}" 14 15 16def main(dir: str): 17 result = [] 18 for file in (pathlib.Path(dir) / "subprojects").glob("*.wrap"): 19 name = file.stem 20 parser = configparser.ConfigParser() 21 _ = parser.read(file) 22 sections = parser.sections() 23 if "wrap-file" not in sections: 24 continue 25 26 url = parser.get("wrap-file", "source_url") 27 if "crates.io" not in url: 28 continue 29 30 parsed = urllib.parse.urlparse(url) 31 path = parsed.path.split("/") 32 assert path[4] == name 33 version = path[5] 34 35 hash = to_sri(parser.get("wrap-file", "source_hash")) 36 37 result.append({ 38 "pname": name, 39 "version": version, 40 "hash": hash, 41 }) 42 43 here = pathlib.Path(__file__).parent 44 with (here / "wraps.json").open("w") as fd: 45 json.dump(result, fd, indent=4) 46 _ = fd.write("\n") 47 48 49if __name__ == '__main__': 50 main(*sys.argv[1:])