nixpkgs mirror (for testing) github.com/NixOS/nixpkgs
nix
at python-updates 51 lines 1.5 kB view raw
1#! /usr/bin/env nix-shell 2#! nix-shell -i python3 --packages python3 nix-prefetch-git 3 4import argparse 5import json 6import subprocess 7from pathlib import Path 8 9 10def fetch_git_hash(url: str, rev: str) -> str: 11 result = subprocess.run( 12 ["nix-prefetch-git", "--url", url, "--rev", rev], 13 capture_output=True, 14 text=True, 15 check=True, 16 ) 17 return json.loads(result.stdout)["hash"] 18 19 20def main() -> None: 21 parser = argparse.ArgumentParser() 22 parser.add_argument( 23 "-i", 24 "--input", 25 type=Path, 26 default=Path(__file__).parent.resolve() / "pubspec.lock.json", 27 ) 28 parser.add_argument("-o", "--output", type=Path, default=None) 29 args = parser.parse_args() 30 output_file: Path | None = args.output 31 output: dict[str, str] = {} 32 for name, info in json.loads(args.input.read_text()).get("packages", {}).items(): 33 if info.get("source") != "git": 34 continue 35 desc = info.get("description") 36 if not isinstance(desc, dict): 37 continue 38 url = desc.get("url") 39 rev = desc.get("resolved-ref") 40 if not (isinstance(url, str) and isinstance(rev, str)): 41 continue 42 output[name] = fetch_git_hash(url, rev) 43 output_json = json.dumps(output, indent=2, sort_keys=True) + "\n" 44 if output_file: 45 output_file.write_text(output_json) 46 else: 47 print(output_json, end="") 48 49 50if __name__ == "__main__": 51 main()