1*2274817fSJohn Snow#!/usr/bin/env python3 2*2274817fSJohn Snow""" 3*2274817fSJohn Snowvendor - QEMU python vendoring utility 4*2274817fSJohn Snow 5*2274817fSJohn Snowusage: vendor [-h] 6*2274817fSJohn Snow 7*2274817fSJohn SnowQEMU python vendoring utility 8*2274817fSJohn Snow 9*2274817fSJohn Snowoptions: 10*2274817fSJohn Snow -h, --help show this help message and exit 11*2274817fSJohn Snow""" 12*2274817fSJohn Snow 13*2274817fSJohn Snow# Copyright (C) 2023 Red Hat, Inc. 14*2274817fSJohn Snow# 15*2274817fSJohn Snow# Authors: 16*2274817fSJohn Snow# John Snow <jsnow@redhat.com> 17*2274817fSJohn Snow# 18*2274817fSJohn Snow# This work is licensed under the terms of the GNU GPL, version 2 or 19*2274817fSJohn Snow# later. See the COPYING file in the top-level directory. 20*2274817fSJohn Snow 21*2274817fSJohn Snowimport argparse 22*2274817fSJohn Snowimport os 23*2274817fSJohn Snowfrom pathlib import Path 24*2274817fSJohn Snowimport subprocess 25*2274817fSJohn Snowimport sys 26*2274817fSJohn Snowimport tempfile 27*2274817fSJohn Snow 28*2274817fSJohn Snow 29*2274817fSJohn Snowdef main() -> int: 30*2274817fSJohn Snow """Run the vendoring utility. See module-level docstring.""" 31*2274817fSJohn Snow loud = False 32*2274817fSJohn Snow if os.environ.get("DEBUG") or os.environ.get("V"): 33*2274817fSJohn Snow loud = True 34*2274817fSJohn Snow 35*2274817fSJohn Snow # No options or anything for now, but I guess 36*2274817fSJohn Snow # you'll figure that out when you run --help. 37*2274817fSJohn Snow parser = argparse.ArgumentParser( 38*2274817fSJohn Snow prog="vendor", 39*2274817fSJohn Snow description="QEMU python vendoring utility", 40*2274817fSJohn Snow ) 41*2274817fSJohn Snow parser.parse_args() 42*2274817fSJohn Snow 43*2274817fSJohn Snow packages = { 44*2274817fSJohn Snow "meson==0.61.5": 45*2274817fSJohn Snow "58c2ddb5f885da0e929f15d89f38d8a7d97f981f56815bcba008414f8511f59a", 46*2274817fSJohn Snow } 47*2274817fSJohn Snow 48*2274817fSJohn Snow vendor_dir = Path(__file__, "..", "..", "wheels").resolve() 49*2274817fSJohn Snow 50*2274817fSJohn Snow with tempfile.NamedTemporaryFile(mode="w", encoding="utf-8") as file: 51*2274817fSJohn Snow for dep_spec, checksum in packages.items(): 52*2274817fSJohn Snow file.write(f"{dep_spec} --hash=sha256:{checksum}") 53*2274817fSJohn Snow file.flush() 54*2274817fSJohn Snow 55*2274817fSJohn Snow cli_args = [ 56*2274817fSJohn Snow "pip", 57*2274817fSJohn Snow "download", 58*2274817fSJohn Snow "--dest", 59*2274817fSJohn Snow str(vendor_dir), 60*2274817fSJohn Snow "--require-hashes", 61*2274817fSJohn Snow "-r", 62*2274817fSJohn Snow file.name, 63*2274817fSJohn Snow ] 64*2274817fSJohn Snow if loud: 65*2274817fSJohn Snow cli_args.append("-v") 66*2274817fSJohn Snow 67*2274817fSJohn Snow print(" ".join(cli_args)) 68*2274817fSJohn Snow subprocess.run(cli_args, check=True) 69*2274817fSJohn Snow 70*2274817fSJohn Snow return 0 71*2274817fSJohn Snow 72*2274817fSJohn Snow 73*2274817fSJohn Snowif __name__ == "__main__": 74*2274817fSJohn Snow sys.exit(main()) 75