From 3907e4c59408ad1b1dfd2a59ee300d90d035435c Mon Sep 17 00:00:00 2001 From: h7x4 Date: Thu, 30 Jul 2026 14:57:26 +0900 Subject: [PATCH] newModuleTagger: add `--before|--after` --- newModuleTagger/find_prs.py | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/newModuleTagger/find_prs.py b/newModuleTagger/find_prs.py index 0daba9f..e4daa20 100755 --- a/newModuleTagger/find_prs.py +++ b/newModuleTagger/find_prs.py @@ -82,10 +82,15 @@ def parse_args(): state_group.add_argument('--open', action='store_true', help='Only show open PRs') state_group.add_argument('--merged', action='store_true', help='Only show merged PRs') state_group.add_argument('--closed', action='store_true', help='Only show closed (unmerged) PRs') - return parser.parse_args() + parser.add_argument('--before', type=int, metavar='PR_NUMBER', help='Only show PRs with a number lower than this (i.e. created earlier)') + parser.add_argument('--after', type=int, metavar='PR_NUMBER', help='Only show PRs with a number higher than this (i.e. created later)') + args = parser.parse_args() + if args.before is not None and args.after is not None: + assert args.after < args.before, '--after must be lower than --before' + return args -def find_prs_without_new_module_tag(state_filter: str | None): +def find_prs_without_new_module_tag(state_filter: str | None, before: int | None, after: int | None): hasNextPage = True endCursor = None @@ -101,6 +106,7 @@ def find_prs_without_new_module_tag(state_filter: str | None): endCursor = data['pageInfo']['endCursor'] hasNextPage = data['pageInfo']['hasNextPage'] prs = [pr['node'] for pr in data['edges']] + page_numbers = [pr['number'] for pr in prs] prs = [{ 'createdAt': pr['createdAt'], 'state': pr['state'], @@ -114,11 +120,24 @@ def find_prs_without_new_module_tag(state_filter: str | None): prs = [pr for pr in prs if not any(label == '8.has: module (new)' for label in pr['labels'])] prs = [pr for pr in prs if any(file['changeType'] == 'ADDED' and file['path'].startswith('nixos/modules') for file in pr['files'])] + # Results are ordered by number/createdAt descending, so once every PR + # in a page is below the `after` bound, no later page can contain a match. + if after is not None and page_numbers and all(number <= after for number in page_numbers): + hasNextPage = False + + if before is not None: + prs = [pr for pr in prs if pr['number'] < before] + if after is not None: + prs = [pr for pr in prs if pr['number'] > after] + for pr in reversed(prs): print_pr(pr) pbar.update(PAGINATION_STEP) + if not hasNextPage: + break + STATUS_COLORS = { 'OPEN': "\033[1;32mOPEN\033[0m", 'MERGED': "\033[1;35mMERGED\033[0m", @@ -213,4 +232,4 @@ def print_pr(pr: dict[str, any]): if __name__ == "__main__": args = parse_args() state_filter = 'OPEN' if args.open else 'MERGED' if args.merged else 'CLOSED' if args.closed else None - find_prs_without_new_module_tag(state_filter) + find_prs_without_new_module_tag(state_filter, args.before, args.after)