Skip to content

Commit 7685823

Browse files
committed
feat: filter out maintainers from parent repo in case of fork
1 parent c3a14ba commit 7685823

1 file changed

Lines changed: 36 additions & 0 deletions

File tree

services/apps/git_integration/src/crowdgit/services/maintainer/maintainer_service.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)