Skip to content
This repository was archived by the owner on Jun 13, 2025. It is now read-only.

Commit a65a329

Browse files
[fix] Only count directly changed lines as misses when intended changes is specified (#1037)
1 parent 15d2415 commit a65a329

File tree

4 files changed

+34
-3
lines changed

4 files changed

+34
-3
lines changed

graphql_api/tests/test_impacted_file.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import hashlib
2-
from dataclasses import dataclass
2+
from dataclasses import dataclass, field
3+
from typing import Callable
34
from unittest.mock import PropertyMock, patch
45

56
from django.test import TransactionTestCase
@@ -211,6 +212,7 @@
211212
class MockSegment:
212213
has_diff_changes: bool = False
213214
has_unintended_changes: bool = False
215+
remove_unintended_changes: Callable[[], None] = field(default=lambda: None)
214216

215217

216218
class MockFileComparison(object):

graphql_api/types/impacted_file/impacted_file.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,8 +98,12 @@ def resolve_segments(
9898
# segments with no diff changes and at least 1 unintended change
9999
segments = [segment for segment in segments if segment.has_unintended_changes]
100100
elif filters.get("has_unintended_changes") is False:
101-
# segments with at least 1 diff change
102-
segments = [segment for segment in segments if segment.has_diff_changes]
101+
new_segments = []
102+
for segment in segments:
103+
if segment.has_diff_changes:
104+
segment.remove_unintended_changes()
105+
new_segments.append(segment)
106+
segments = new_segments
103107

104108
return SegmentComparisons(results=segments)
105109

services/comparison.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -481,6 +481,15 @@ def has_unintended_changes(self):
481481
return True
482482
return False
483483

484+
def remove_unintended_changes(self):
485+
filtered = []
486+
for line in self._lines:
487+
base_cov = line.coverage["base"]
488+
head_cov = line.coverage["head"]
489+
if (line.added or line.removed) or (base_cov == head_cov):
490+
filtered.append(line)
491+
self._lines = filtered
492+
484493

485494
class FileComparison:
486495
def __init__(

services/tests/test_comparison.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
LineComparison,
3737
MissingComparisonReport,
3838
PullRequestComparison,
39+
Segment,
3940
)
4041

4142
# Pulled from shared.django_apps.core.tests.factories.CommitFactory files.
@@ -1784,6 +1785,21 @@ def test_file_has_changes(self):
17841785
)
17851786
assert file.has_changes is True
17861787

1788+
def test_remove_unintended_changes(self):
1789+
lines = [
1790+
LineComparison([1, "", [], 0, 0], [1, "", [], 0, 0], 1, 1, "line1", False),
1791+
LineComparison([1, "", [], 0, 0], [0, "", [], 0, 0], 2, 2, "line2", False),
1792+
LineComparison(None, [0, "", [], 0, 0], None, 3, "+line3", True),
1793+
LineComparison([0, "", [], 0, 0], None, 4, None, "-line4", True),
1794+
LineComparison([1, "", [], 0, 0], [0, "", [], 0, 0], 5, 5, "line5", False),
1795+
]
1796+
1797+
segment = Segment(lines)
1798+
segment.remove_unintended_changes()
1799+
1800+
assert len(segment.lines) == 3
1801+
assert [line.value for line in segment.lines] == ["line1", "+line3", "-line4"]
1802+
17871803

17881804
class CommitComparisonTests(TestCase):
17891805
def setUp(self):

0 commit comments

Comments
 (0)