diff --git a/apps/codecov-api/core/commands/branch/interactors/fetch_branches.py b/apps/codecov-api/core/commands/branch/interactors/fetch_branches.py index 983af462fb..265aaa6ebd 100644 --- a/apps/codecov-api/core/commands/branch/interactors/fetch_branches.py +++ b/apps/codecov-api/core/commands/branch/interactors/fetch_branches.py @@ -1,6 +1,7 @@ from typing import Any from asgiref.sync import sync_to_async +from django.db import models from django.db.models import OuterRef, Q, QuerySet, Subquery from codecov.commands.base import BaseInteractor @@ -36,4 +37,28 @@ def execute(self, repository: Repository, filters: dict[str, Any]) -> QuerySet: | Q(name=repository.branch) # but always include the default branch ) + # Enhance branch information with latest commit activity metrics + if filters.get("include_activity_metrics", True): + queryset = queryset.annotate( + latest_commit_timestamp=Subquery( + Commit.objects.filter( + repository_id=OuterRef("repository__repoid"), + branch=OuterRef("branch"), + deleted=False, + ) + .order_by("-timestamp") + .values("timestamp")[:1] + ), + total_commits_count=Subquery( + Commit.objects.filter( + repository_id=OuterRef("repository__repoid"), + branch=OuterRef("branch"), + deleted=False, + ) + .values("repository_id") + .annotate(count=models.Count("id")) + .values("count")[:1] + ), + ) + return queryset