···1616Args = Iterator[str]
171718181919+def log(msg: str) -> None:
2020+ print(msg, file=sys.stderr)
2121+2222+1923def curl_github_args(token: str | None, url: str) -> Args:
2024 """Query the github API via curl"""
2125 yield bins["curl"]
···5862def run_cmd(args: Args) -> bytes:
5963 all = list(args)
6064 if debug:
6161- print(all, file=sys.stderr)
6565+ log(str(all))
6266 return sub.check_output(all)
63676468···9195 match curl_result(out):
9296 case "not found":
9397 # github sometimes returns an empty list even tough there are releases
9494- print(f"uh-oh, latest for {orga}/{repo} is not there, using HEAD", file=sys.stderr)
9898+ log(f"uh-oh, latest for {orga}/{repo} is not there, using HEAD")
9599 release = "HEAD"
96100 case {"tag_name": tag_name}:
97101 release = tag_name
98102 case _:
99103 sys.exit(f"git result for {orga}/{repo} did not have a `tag_name` field")
100104101101- print(f"Fetching latest release ({release}) of {orga}/{repo} …", file=sys.stderr)
105105+ log(f"Fetching latest release ({release}) of {orga}/{repo} …")
102106 res = run_cmd(
103107 atomically_write_args(
104108 os.path.join(
···144148 sys.exit("input json must have `orga` key")
145149146150151151+def checkTreeSitterRepos() -> None:
152152+ """Make sure we know about all tree sitter repos on the tree sitter orga."""
153153+ github_tree_sitter_repos: set[str] = set(json.load(sys.stdin))
154154+ known: set[str] = set(args["knownTreeSitterOrgGrammarRepos"])
155155+ ignored: set[str] = set(args["ignoredTreeSitterOrgRepos"])
156156+157157+ unknown = github_tree_sitter_repos - (known | ignored)
158158+159159+ if unknown:
160160+ sys.exit(f"These repositories are neither known nor ignored:\n{unknown}")
161161+162162+147163match mode:
148164 case "fetch-repo":
149165 fetchRepo()
150166 case "fetch-orga-latest-repos":
151167 fetchOrgaLatestRepos()
168168+ case "check-tree-sitter-repos":
169169+ checkTreeSitterRepos()
152170 case _:
153171 sys.exit(f"mode {mode} unknown")