diff --git a/apps/codecov-api/graphql_api/types/comparison/comparison.graphql b/apps/codecov-api/graphql_api/types/comparison/comparison.graphql index 8ae51b0c22..2a353d614b 100644 --- a/apps/codecov-api/graphql_api/types/comparison/comparison.graphql +++ b/apps/codecov-api/graphql_api/types/comparison/comparison.graphql @@ -5,6 +5,7 @@ type Comparison { impactedFilesCount: Int! indirectChangedFilesCount: Int! patchTotals: CoverageTotals + directChangedFiles(filters: ImpactedFilesFilters): ImpactedFilesResult! directChangedFilesCount: Int! baseTotals: CoverageTotals headTotals: CoverageTotals diff --git a/apps/codecov-api/graphql_api/types/comparison/comparison.py b/apps/codecov-api/graphql_api/types/comparison/comparison.py index 3655ab91d9..0cbe17797e 100644 --- a/apps/codecov-api/graphql_api/types/comparison/comparison.py +++ b/apps/codecov-api/graphql_api/types/comparison/comparison.py @@ -64,6 +64,23 @@ def resolve_impacted_files_count( return len(comparison.impacted_files) +@comparison_bindable.field("directChangedFiles") +@sync_to_async +def resolve_direct_changed_files( + comparison_report: ComparisonReport, info: GraphQLResolveInfo, filters=None +): + command: CompareCommands = info.context["executor"].get_command("compare") + comparison: Comparison = info.context.get("comparison", None) + + # Force filter to direct changes only (hasUnintendedChanges=False) + filters = dict(filters) if filters else {} + filters["has_unintended_changes"] = False + + return { + "results": command.fetch_impacted_files(comparison_report, comparison, filters) + } + + @comparison_bindable.field("directChangedFilesCount") @sync_to_async def resolve_direct_changed_files_count(