summaryrefslogtreecommitdiffstats
path: root/third_party/python/taskcluster_taskgraph/taskgraph/optimize
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/python/taskcluster_taskgraph/taskgraph/optimize')
-rw-r--r--third_party/python/taskcluster_taskgraph/taskgraph/optimize/base.py12
-rw-r--r--third_party/python/taskcluster_taskgraph/taskgraph/optimize/strategies.py16
2 files changed, 23 insertions, 5 deletions
diff --git a/third_party/python/taskcluster_taskgraph/taskgraph/optimize/base.py b/third_party/python/taskcluster_taskgraph/taskgraph/optimize/base.py
index 367b94e1de..e5477d35b7 100644
--- a/third_party/python/taskcluster_taskgraph/taskgraph/optimize/base.py
+++ b/third_party/python/taskcluster_taskgraph/taskgraph/optimize/base.py
@@ -271,14 +271,19 @@ def replace_tasks(
dependencies_of = target_task_graph.graph.links_dict()
for label in target_task_graph.graph.visit_postorder():
+ logger.debug(f"replace_tasks: {label}")
# if we're not allowed to optimize, that's easy..
if label in do_not_optimize:
+ logger.debug(f"replace_tasks: {label} is in do_not_optimize")
continue
# if this task depends on un-replaced, un-removed tasks, do not replace
if any(
l not in replaced and l not in removed_tasks for l in dependencies_of[label]
):
+ logger.debug(
+ f"replace_tasks: {label} depends on an unreplaced or unremoved task"
+ )
continue
# if the task already exists, that's an easy replacement
@@ -287,6 +292,7 @@ def replace_tasks(
label_to_taskid[label] = repl
replaced.add(label)
opt_counts["existing_tasks"] += 1
+ logger.debug(f"replace_tasks: {label} replaced from existing_tasks")
continue
# call the optimization strategy
@@ -304,14 +310,20 @@ def replace_tasks(
repl = opt.should_replace_task(task, params, deadline, arg)
if repl:
if repl is True:
+ logger.debug(f"replace_tasks: {label} removed by optimization strategy")
# True means remove this task; get_subgraph will catch any
# problems with removed tasks being depended on
removed_tasks.add(label)
else:
+ logger.debug(
+ f"replace_tasks: {label} replaced by optimization strategy"
+ )
label_to_taskid[label] = repl
replaced.add(label)
opt_counts[opt_by] += 1
continue
+ else:
+ logger.debug(f"replace_tasks: {label} kept by optimization strategy")
_log_optimization("replaced", opt_counts)
return replaced
diff --git a/third_party/python/taskcluster_taskgraph/taskgraph/optimize/strategies.py b/third_party/python/taskcluster_taskgraph/taskgraph/optimize/strategies.py
index 973b550632..5baecfe645 100644
--- a/third_party/python/taskcluster_taskgraph/taskgraph/optimize/strategies.py
+++ b/third_party/python/taskcluster_taskgraph/taskgraph/optimize/strategies.py
@@ -1,8 +1,8 @@
import logging
from datetime import datetime
-from taskgraph import files_changed
from taskgraph.optimize.base import OptimizationStrategy, register_strategy
+from taskgraph.util.path import match as match_path
from taskgraph.util.taskcluster import find_task_id, status_task
logger = logging.getLogger(__name__)
@@ -48,17 +48,23 @@ class IndexSearch(OptimizationStrategy):
@register_strategy("skip-unless-changed")
class SkipUnlessChanged(OptimizationStrategy):
+
+ def check(self, files_changed, patterns):
+ for pattern in patterns:
+ for path in files_changed:
+ if match_path(path, pattern):
+ return True
+ return False
+
def should_remove_task(self, task, params, file_patterns):
# pushlog_id == -1 - this is the case when run from a cron.yml job or on a git repository
if params.get("repository_type") == "hg" and params.get("pushlog_id") == -1:
return False
- changed = files_changed.check(params, file_patterns)
+ changed = self.check(params["files_changed"], file_patterns)
if not changed:
logger.debug(
- 'no files found matching a pattern in `skip-unless-changed` for "{}"'.format(
- task.label
- )
+ f'no files found matching a pattern in `skip-unless-changed` for "{task.label}"'
)
return True
return False