()
| 314 | |
| 315 | |
| 316 | def main(): |
| 317 | parser = argparse.ArgumentParser() |
| 318 | parser.add_argument("--dest", required=True) |
| 319 | parser.add_argument("--cache-dir", required=True) |
| 320 | parser.add_argument("--wine", required=True) |
| 321 | parser.add_argument("--wine-prefix", required=True) |
| 322 | parser.add_argument("--accept-license", action="store_true") |
| 323 | parser.add_argument("--msvc-version") |
| 324 | parser.add_argument("--sdk-version") |
| 325 | args = parser.parse_args() |
| 326 | |
| 327 | destination = Path(args.dest).resolve() |
| 328 | cache_dir = Path(args.cache_dir).resolve() |
| 329 | wine_prefix = Path(args.wine_prefix).resolve() |
| 330 | |
| 331 | channel_manifest = download_json(MANIFEST_URL) |
| 332 | visual_studio_manifest = first( |
| 333 | channel_manifest["channelItems"], lambda item: item["id"] == "Microsoft.VisualStudio.Manifests.VisualStudio" |
| 334 | ) |
| 335 | vs_manifest = download_json(visual_studio_manifest["payloads"][0]["url"]) |
| 336 | packages = build_payload_map(vs_manifest) |
| 337 | |
| 338 | msvc_version, sdk_version, _, sdk_package_id, license_url = resolve_versions( |
| 339 | channel_manifest, packages, args.msvc_version, args.sdk_version |
| 340 | ) |
| 341 | |
| 342 | if not args.accept_license: |
| 343 | print(f"Visual Studio license must be accepted before download: {license_url}", file=sys.stderr) |
| 344 | return 1 |
| 345 | |
| 346 | if destination.exists(): |
| 347 | shutil.rmtree(destination) |
| 348 | destination.mkdir(parents=True, exist_ok=True) |
| 349 | wine_prefix.mkdir(parents=True, exist_ok=True) |
| 350 | |
| 351 | extract_msvc(packages, cache_dir, destination, msvc_version) |
| 352 | extract_sdk(packages, cache_dir, destination, sdk_package_id, args.wine, wine_prefix) |
| 353 | cleanup_layout(destination) |
| 354 | layout_msvc_version, layout_sdk_version = resolve_layout_versions(destination) |
| 355 | write_metadata(destination, layout_msvc_version, layout_sdk_version, license_url, args.wine) |
| 356 | return 0 |
| 357 | |
| 358 | |
| 359 | if __name__ == "__main__": |
no test coverage detected