Skip to content

Commit bfa5fe9

Browse files
committed
refactor: update SkipUnlessChanged optimization to use new 'files_changed' parameter
1 parent 6158bce commit bfa5fe9

File tree

2 files changed

+43
-3
lines changed

2 files changed

+43
-3
lines changed

src/taskgraph/optimize/strategies.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import logging
22
from datetime import datetime
33

4-
from taskgraph import files_changed
54
from taskgraph.optimize.base import OptimizationStrategy, register_strategy
5+
from taskgraph.util.path import match as match_path
66
from taskgraph.util.taskcluster import find_task_id, status_task
77

88
logger = logging.getLogger(__name__)
@@ -48,12 +48,20 @@ def should_replace_task(self, task, params, deadline, index_paths):
4848

4949
@register_strategy("skip-unless-changed")
5050
class SkipUnlessChanged(OptimizationStrategy):
51+
52+
def check(self, files_changed, patterns):
53+
for pattern in patterns:
54+
for path in files_changed:
55+
if match_path(path, pattern):
56+
return True
57+
return False
58+
5159
def should_remove_task(self, task, params, file_patterns):
5260
# pushlog_id == -1 - this is the case when run from a cron.yml job or on a git repository
5361
if params.get("repository_type") == "hg" and params.get("pushlog_id") == -1:
5462
return False
5563

56-
changed = files_changed.check(params, file_patterns)
64+
changed = self.check(params["files_changed"], file_patterns)
5765
if not changed:
5866
logger.debug(
5967
f'no files found matching a pattern in `skip-unless-changed` for "{task.label}"'

test/test_optimize_strategies.py

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,12 @@
33

44
import os
55
from datetime import datetime
6+
from test.fixtures.gen import make_task
67
from time import mktime
78

89
import pytest
910

10-
from taskgraph.optimize.strategies import IndexSearch
11+
from taskgraph.optimize.strategies import IndexSearch, SkipUnlessChanged
1112

1213

1314
@pytest.fixture
@@ -68,3 +69,34 @@ def test_index_search(responses, params, state, expires, expected):
6869
opt = IndexSearch()
6970
deadline = "2021-06-07T19:03:20.482Z"
7071
assert opt.should_replace_task({}, params, deadline, (index_path,)) == expected
72+
73+
74+
@pytest.mark.parametrize(
75+
"params,file_patterns,should_optimize",
76+
(
77+
pytest.param({"files_changed": []}, ["foo.txt"], True, id="no files changed"),
78+
pytest.param(
79+
{"files_changed": ["foo.txt"]}, ["foo.txt"], False, id="files match"
80+
),
81+
pytest.param(
82+
{"files_changed": ["foo.txt"]},
83+
["bar.tx", "foo.txt"],
84+
False,
85+
id="files match multiple",
86+
),
87+
pytest.param(
88+
{"files_changed": ["bar.txt"]}, ["foo.txt"], True, id="files don't match"
89+
),
90+
pytest.param(
91+
{"repository_type": "hg", "pushlog_id": -1, "files_changed": ["bar.txt"]},
92+
["foo.txt"],
93+
False,
94+
id="cron task",
95+
),
96+
),
97+
)
98+
def test_skip_unless_changed(params, file_patterns, should_optimize):
99+
task = make_task("task")
100+
101+
opt = SkipUnlessChanged()
102+
assert opt.should_remove_task(task, params, file_patterns) == should_optimize

0 commit comments

Comments
 (0)