@@ -429,6 +429,32 @@ async def check_if_interval_elapsed(self, repository: Repository) -> tuple[bool,
429429 )
430430 return hours_since_last_run >= required_hours , remaining_hours
431431
432+ async def exclude_parent_repo_maintainers (
433+ self , parent_repo : Repository , extracted_maintainers : list [MaintainerInfoItem ] | None
434+ ) -> list [MaintainerInfoItem ] | None :
435+ if not parent_repo or not extracted_maintainers :
436+ return extracted_maintainers
437+
438+ parent_repo_maintainers = await get_maintainers_for_repo (parent_repo .id )
439+ if not parent_repo_maintainers :
440+ self .logger .info (f"No maintainers found for parent repo { parent_repo .url } " )
441+ return extracted_maintainers
442+
443+ parent_github_usernames = {m ["github_username" ] for m in parent_repo_maintainers }
444+
445+ fork_only_maintainers = [
446+ maintainer
447+ for maintainer in extracted_maintainers
448+ if maintainer .github_username not in parent_github_usernames
449+ ]
450+
451+ filtered_count = len (extracted_maintainers ) - len (fork_only_maintainers )
452+ self .logger .info (
453+ f"Filtered { filtered_count } maintainers inherited from parent repo { parent_repo .url } , keeping { len (fork_only_maintainers )} fork-specific"
454+ )
455+
456+ return fork_only_maintainers
457+
432458 async def process_maintainers (
433459 self ,
434460 repository : Repository ,
@@ -441,6 +467,7 @@ async def process_maintainers(
441467 latest_maintainer_file = None
442468 ai_cost = 0.0
443469 maintainers_found = 0
470+ maintainers_skipped = 0
444471
445472 try :
446473 owner , repo_name = parse_repo_url (batch_info .remote )
@@ -458,6 +485,14 @@ async def process_maintainers(
458485 latest_maintainer_file = maintainers .maintainer_file
459486 ai_cost = maintainers .total_cost
460487 maintainers_found = len (maintainers .maintainer_info )
488+
489+ if repository .parent_repo :
490+ filtered_maintainers = await self .exclude_parent_repo_maintainers (
491+ repository .parent_repo , maintainers .maintainer_info
492+ )
493+ maintainers_skipped = maintainers_found - len (filtered_maintainers )
494+ maintainers .maintainer_info = filtered_maintainers
495+
461496 self .logger .info (
462497 f"Extracted { maintainers_found } maintainers from { latest_maintainer_file } file"
463498 )
@@ -494,6 +529,7 @@ async def process_maintainers(
494529 metrics = {
495530 "ai_cost" : ai_cost ,
496531 "maintainers_found" : maintainers_found ,
532+ "maintainers_skipped" : maintainers_skipped ,
497533 },
498534 )
499535 await save_service_execution (service_execution )
0 commit comments