-
Notifications
You must be signed in to change notification settings - Fork 29
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Filter file comparisons by flags #129
Changes from 2 commits
2cf907e
c54acca
7d09189
e71b2e4
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,8 +1,20 @@ | ||
from typing import Union | ||
|
||
from shared.reports.resources import Report | ||
|
||
from codecov.commands.base import BaseCommand | ||
from services.comparison import Comparison, ComparisonReport, PullRequestComparison | ||
|
||
from .interactors.fetch_impacted_files import FetchImpactedFiles | ||
|
||
|
||
class CompareCommands(BaseCommand): | ||
def fetch_impacted_files(self, comparsion, filters): | ||
return self.get_interactor(FetchImpactedFiles).execute(comparsion, filters) | ||
def fetch_impacted_files( | ||
self, | ||
comparison_report: ComparisonReport, | ||
comparison: Union[PullRequestComparison, Comparison], | ||
filters, | ||
): | ||
return self.get_interactor(FetchImpactedFiles).execute( | ||
comparison_report, comparison, filters | ||
) |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,7 +1,16 @@ | ||
import enum | ||
from typing import List, Optional, Union | ||
|
||
from shared.reports.resources import Report | ||
|
||
from codecov.commands.base import BaseInteractor | ||
from services.comparison import ImpactedFile | ||
from services.comparison import ( | ||
Comparison, | ||
ComparisonReport, | ||
ImpactedFile, | ||
PullRequestComparison, | ||
) | ||
from services.report import files_belonging_to_flags | ||
|
||
|
||
class ImpactedFileParameter(enum.Enum): | ||
|
@@ -13,13 +22,28 @@ class ImpactedFileParameter(enum.Enum): | |
|
||
|
||
class FetchImpactedFiles(BaseInteractor): | ||
def _apply_filters(self, impacted_files, filters): | ||
def _apply_filters( | ||
self, | ||
impacted_files: Optional[List[ImpactedFile]], | ||
comparison: Union[PullRequestComparison, Comparison], | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Same here - can just be |
||
filters, | ||
): | ||
parameter = filters.get("ordering", {}).get("parameter") | ||
direction = filters.get("ordering", {}).get("direction") | ||
if parameter and direction: | ||
impacted_files = self.sort_impacted_files( | ||
impacted_files, parameter, direction | ||
) | ||
flags = filters.get("flags", []) | ||
if flags and comparison: | ||
head_commit_report = comparison.head_report | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Brought the comparison all the way down here to only compute the head_report if the flags are provided |
||
if set(flags) & set(head_commit_report.flags): | ||
files = files_belonging_to_flags( | ||
commit_report=head_commit_report, flags=flags | ||
) | ||
impacted_files = list( | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This might read a little easier: impacted_files = [
file
for file in impacted_files
if file.head_name in files
] |
||
filter(lambda x: x.head_name in files, impacted_files) | ||
) | ||
return impacted_files | ||
|
||
def get_attribute( | ||
|
@@ -65,7 +89,12 @@ def sort_impacted_files(self, impacted_files, parameter, direction): | |
# Merge both lists together | ||
return files_with_coverage + files_without_coverage | ||
|
||
def execute(self, comparison_report, filters): | ||
def execute( | ||
self, | ||
comparison_report: ComparisonReport, | ||
comparison: Union[PullRequestComparison, Comparison], | ||
filters, | ||
): | ||
if filters is None: | ||
return comparison_report.impacted_files | ||
|
||
|
@@ -79,4 +108,4 @@ def execute(self, comparison_report, filters): | |
else: | ||
impacted_files = comparison_report.impacted_files | ||
|
||
return self._apply_filters(impacted_files, filters) | ||
return self._apply_filters(impacted_files, comparison, filters) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Just
Comparison
is fine here sincePullRequestComparison
inherits fromComparison
and we're not using anything specific toPullRequestComparison
.