4040 "payjoin/tx-indexer" ,
4141]
4242
43- REPO_FILTER = " " . join ( f"repo: { r } " for r in REPOS )
43+ REPO_BATCH_SIZE = 5
4444
4545
4646def get_repo_node_id ():
@@ -120,34 +120,40 @@ def add_discussion_comment(discussion_id, body):
120120
121121
122122def search_issues (query ):
123- """Run a GitHub search/issues query and return the items."""
124- resp = requests .get (
125- f"{ API } /search/issues" ,
126- headers = HEADERS ,
127- params = {"q" : query , "per_page" : 30 },
128- )
129- resp .raise_for_status ()
130- return resp .json ().get ("items" , [])
123+ """Run a GitHub search/issues query across REPOS in batches."""
124+ seen = set ()
125+ items = []
126+ for i in range (0 , len (REPOS ), REPO_BATCH_SIZE ):
127+ batch = REPOS [i : i + REPO_BATCH_SIZE ]
128+ repo_filter = " " .join (f"repo:{ r } " for r in batch )
129+ resp = requests .get (
130+ f"{ API } /search/issues" ,
131+ headers = HEADERS ,
132+ params = {"q" : f"{ query } { repo_filter } " , "per_page" : 30 },
133+ )
134+ resp .raise_for_status ()
135+ for item in resp .json ().get ("items" , []):
136+ if item ["id" ] not in seen :
137+ seen .add (item ["id" ])
138+ items .append (item )
139+ return items
131140
132141
133142def gather_activity (user , since_date ):
134143 """Gather a contributor's past-week activity across the org."""
135144 since = since_date .strftime ("%Y-%m-%d" )
136145
137146 # PRs merged (authored)
138- merged_prs = search_issues (f"author:{ user } { REPO_FILTER } type:pr merged:>{ since } " )
147+ merged_prs = search_issues (f"author:{ user } type:pr merged:>{ since } " )
139148
140149 # PRs reviewed
141- reviewed_prs = search_issues (
142- f"reviewed-by:{ user } { REPO_FILTER } type:pr updated:>{ since } "
143- )
150+ reviewed_prs = search_issues (f"reviewed-by:{ user } type:pr updated:>{ since } "
151+
144152 # Exclude PRs the user authored (already counted above)
145153 reviewed_prs = [pr for pr in reviewed_prs if pr ["user" ]["login" ] != user ]
146154
147155 # Issues opened
148- issues_opened = search_issues (
149- f"author:{ user } { REPO_FILTER } type:issue created:>{ since } "
150- )
156+ issues_opened = search_issues (f"author:{ user } type:issue created:>{ since } " )
151157
152158 return merged_prs , reviewed_prs , issues_opened
153159
@@ -159,14 +165,14 @@ def gather_potential_bottlenecks(user, since_date):
159165
160166 # Open PRs with no reviews
161167 open_prs = search_issues (
162- f"author:{ user } { REPO_FILTER } type:pr state:open review:none created:>{ since } "
168+ f"author:{ user } type:pr state:open review:none created:>{ since } "
163169 )
164170 for pr in open_prs :
165171 bottlenecks .append (f"- PR awaiting review: [{ pr ['title' ]} ]({ pr ['html_url' ]} )" )
166172
167173 # PRs with requested changes
168174 changes_requested = search_issues (
169- f"author:{ user } { REPO_FILTER } type:pr state:open review:changes_requested"
175+ f"author:{ user } type:pr state:open review:changes_requested"
170176 )
171177 for pr in changes_requested :
172178 bottlenecks .append (
0 commit comments