blob: 570b671ad4d4d246a48443f28f21cf745a620ce3 [file] [log] [blame]
Boyan Karatotev858a7ea2025-07-02 10:29:21 +01001#!/usr/bin/env python3
2
3import argparse
4import asyncio
5import json
6import sys
7
8import aiohttp
9
10async def get_patch_counts(session, query: str) -> str:
11 url = "https://review.trustedfirmware.org/changes/?q="
12 skip_arg = "&S={}"
13 skip_num = 0
14
15 totals = {}
16 while True:
17 async with session.get(url + query + skip_arg.format(skip_num)) as response:
18 text = (await response.text())[4:] # strip magic string ")]}'"
19 data = json.loads(text)
20
21 for entry in data:
22 name = entry["project"]
23 totals[name] = totals.get(name, 0) + 1
24
25 if len(data) and data[-1].get("_more_changes", False):
26 skip_num = len(data)
27 else:
28 break
29
30 message = "Patches in review:\n"
31 for name, count in totals.items():
32 message += f"* {name}: {count}\n"
33 return message
34
35async def run_local(query: str) -> str:
36 async with aiohttp.ClientSession() as session:
37 msg = await get_patch_counts(session, query)
38 print(msg)
39
40def add_gerrit_arg(parser):
41 parser.add_argument(
42 "-q", "--tforg-gerrit-query",
43 default=(
44 "(parentproject:TF-A OR parentproject:TF-RMM OR parentproject:TS OR "
45 "parentproject:hafnium OR project:^ci/hafnium-.%2B OR project:^ci/tf-a-.%2B) "
46 "(branch:integration OR branch:master OR branch:^topics\\/.*) -is:wip is:open"
47 ), help="the query to pass to tforg's Gerrit (as written in the query box)"
48 )
49
50if __name__ == "__main__":
51 parser = argparse.ArgumentParser(
52 description="Counter of patches in tforg's gerrit",
53 formatter_class=argparse.ArgumentDefaultsHelpFormatter,
54 )
55 add_gerrit_arg(parser)
56 args = parser.parse_args(sys.argv[1:])
57
58 asyncio.run(run_local(args.tforg_gerrit_query))