Boyan Karatotev | 858a7ea | 2025-07-02 10:29:21 +0100 | [diff] [blame] | 1 | #!/usr/bin/env python3 |
| 2 | |
| 3 | import argparse |
| 4 | import asyncio |
| 5 | import json |
| 6 | import sys |
| 7 | |
| 8 | import aiohttp |
| 9 | |
| 10 | async 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 | |
| 35 | async 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 | |
| 40 | def 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 | |
| 50 | if __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)) |