Skip to content

Commit 157996f

Browse files
Fix label recalculation (#200)
When Codecov doesn't return the absent labels we were re-calculating only the absent labels. The issue is that, becaue Codecov didn't have them in the first place they couldn't filter out labels that might have been changed in the current commit. And we (CLI) weren't doing that either. That's an issue because pytest fails if you tell it to run a label that doesn't exist. So if we get the payload back with no absent labels we have to recalculate everything.
1 parent 5f3d7f0 commit 157996f

File tree

3 files changed

+37
-14
lines changed

3 files changed

+37
-14
lines changed

codecov_cli/commands/labelanalysis.py

+21-3
Original file line numberDiff line numberDiff line change
@@ -178,11 +178,29 @@ def _potentially_calculate_absent_labels(
178178
request_result, requested_labels
179179
) -> LabelAnalysisRequestResult:
180180
if request_result["absent_labels"]:
181+
# This means that Codecov already calculated everything for us
181182
return LabelAnalysisRequestResult(request_result)
183+
# Here we have to calculate the absent labels
184+
# And also remove labels that maybe don't exist anymore from the set of labels to test
185+
# Because codecov didn't have this info previously
182186
requested_labels_set = set(requested_labels)
183-
present_labels_set = set(request_result["present_report_labels"])
184-
request_result["absent_labels"] = list(requested_labels_set - present_labels_set)
185-
return LabelAnalysisRequestResult(request_result)
187+
present_diff_labels_set = set(request_result.get("present_diff_labels", []))
188+
present_report_labels_set = set(request_result.get("present_report_labels", []))
189+
global_level_labels_set = set(request_result.get("global_level_labels", []))
190+
return LabelAnalysisRequestResult(
191+
{
192+
"present_report_labels": sorted(
193+
present_report_labels_set & requested_labels_set
194+
),
195+
"present_diff_labels": sorted(
196+
present_diff_labels_set & requested_labels_set
197+
),
198+
"absent_labels": sorted(requested_labels_set - present_report_labels_set),
199+
"global_level_labels": sorted(
200+
global_level_labels_set & requested_labels_set
201+
),
202+
}
203+
)
186204

187205

188206
def _patch_labels(payload, url, token_header):

setup.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
setup(
1212
name="codecov-cli",
13-
version="0.1.15",
13+
version="0.1.16",
1414
packages=find_packages(exclude=["contrib", "docs", "tests*"]),
1515
description="Codecov Command Line Interface",
1616
long_description=long_description,

tests/commands/test_invoke_labelanalysis.py

+15-10
Original file line numberDiff line numberDiff line change
@@ -52,21 +52,26 @@ def get_labelanalysis_deps(mocker):
5252

5353

5454
class TestLabelAnalysisNotInvoke(object):
55-
def test_potentially_calculate_labels(self):
55+
def test_potentially_calculate_labels_recalculate(self):
5656
request_result = {
57-
"present_report_labels": ["label_1", "label_2", "label_3"],
57+
"present_report_labels": [
58+
"label_1",
59+
"label_2",
60+
"label_3",
61+
"label_old",
62+
"label_older",
63+
],
5864
"absent_labels": [],
65+
"present_diff_labels": ["label_2", "label_3", "label_old"],
66+
"global_level_labels": ["label_1", "label_older"],
67+
}
68+
collected_labels = ["label_1", "label_2", "label_3", "label_4"]
69+
expected = {
5970
"present_diff_labels": ["label_2", "label_3"],
6071
"global_level_labels": ["label_1"],
72+
"absent_labels": ["label_4"],
73+
"present_report_labels": ["label_1", "label_2", "label_3"],
6174
}
62-
collected_labels = ["label_1", "label_2", "label_3", "label_4"]
63-
expected = {**request_result, "absent_labels": ["label_4"]}
64-
assert (
65-
_potentially_calculate_absent_labels(request_result, collected_labels)
66-
== expected
67-
)
68-
request_result["absent_labels"] = ["label_4", "label_5"]
69-
expected["absent_labels"].append("label_5")
7075
assert (
7176
_potentially_calculate_absent_labels(request_result, collected_labels)
7277
== expected

0 commit comments

Comments
 (0)