taskcluster-taskgraph 10.0.0__tar.gz → 10.0.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (139) hide show
  1. {taskcluster-taskgraph-10.0.0/src/taskcluster_taskgraph.egg-info → taskcluster-taskgraph-10.0.2}/PKG-INFO +1 -1
  2. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2/src/taskcluster_taskgraph.egg-info}/PKG-INFO +1 -1
  3. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/src/taskgraph/__init__.py +1 -1
  4. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/src/taskgraph/optimize/strategies.py +2 -2
  5. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/src/taskgraph/transforms/run/__init__.py +3 -1
  6. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/src/taskgraph/util/vcs.py +3 -0
  7. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/test/test_optimize_strategies.py +8 -2
  8. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/test/test_transforms_run.py +39 -0
  9. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/test/test_util_vcs.py +29 -12
  10. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/LICENSE +0 -0
  11. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/MANIFEST.in +0 -0
  12. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/README.rst +0 -0
  13. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/pyproject.toml +0 -0
  14. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/requirements/base.in +0 -0
  15. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/requirements/base.txt +0 -0
  16. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/requirements/dev.in +0 -0
  17. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/requirements/dev.txt +0 -0
  18. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/requirements/test.in +0 -0
  19. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/requirements/test.txt +0 -0
  20. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/setup.cfg +0 -0
  21. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/setup.py +0 -0
  22. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/src/taskcluster_taskgraph.egg-info/SOURCES.txt +0 -0
  23. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/src/taskcluster_taskgraph.egg-info/dependency_links.txt +0 -0
  24. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/src/taskcluster_taskgraph.egg-info/entry_points.txt +0 -0
  25. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/src/taskcluster_taskgraph.egg-info/requires.txt +0 -0
  26. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/src/taskcluster_taskgraph.egg-info/top_level.txt +0 -0
  27. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/src/taskgraph/actions/__init__.py +0 -0
  28. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/src/taskgraph/actions/add_new_jobs.py +0 -0
  29. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/src/taskgraph/actions/cancel.py +0 -0
  30. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/src/taskgraph/actions/cancel_all.py +0 -0
  31. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/src/taskgraph/actions/rebuild_cached_tasks.py +0 -0
  32. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/src/taskgraph/actions/registry.py +0 -0
  33. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/src/taskgraph/actions/retrigger.py +0 -0
  34. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/src/taskgraph/actions/util.py +0 -0
  35. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/src/taskgraph/config.py +0 -0
  36. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/src/taskgraph/create.py +0 -0
  37. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/src/taskgraph/decision.py +0 -0
  38. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/src/taskgraph/docker.py +0 -0
  39. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/src/taskgraph/filter_tasks.py +0 -0
  40. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/src/taskgraph/generator.py +0 -0
  41. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/src/taskgraph/graph.py +0 -0
  42. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/src/taskgraph/loader/__init__.py +0 -0
  43. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/src/taskgraph/loader/default.py +0 -0
  44. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/src/taskgraph/loader/transform.py +0 -0
  45. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/src/taskgraph/main.py +0 -0
  46. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/src/taskgraph/morph.py +0 -0
  47. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/src/taskgraph/optimize/__init__.py +0 -0
  48. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/src/taskgraph/optimize/base.py +0 -0
  49. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/src/taskgraph/parameters.py +0 -0
  50. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/src/taskgraph/run-task/fetch-content +0 -0
  51. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/src/taskgraph/run-task/hgrc +0 -0
  52. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/src/taskgraph/run-task/robustcheckout.py +0 -0
  53. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/src/taskgraph/run-task/run-task +0 -0
  54. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/src/taskgraph/target_tasks.py +0 -0
  55. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/src/taskgraph/task.py +0 -0
  56. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/src/taskgraph/taskgraph.py +0 -0
  57. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/src/taskgraph/transforms/__init__.py +0 -0
  58. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/src/taskgraph/transforms/base.py +0 -0
  59. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/src/taskgraph/transforms/cached_tasks.py +0 -0
  60. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/src/taskgraph/transforms/chunking.py +0 -0
  61. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/src/taskgraph/transforms/code_review.py +0 -0
  62. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/src/taskgraph/transforms/docker_image.py +0 -0
  63. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/src/taskgraph/transforms/fetch.py +0 -0
  64. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/src/taskgraph/transforms/from_deps.py +0 -0
  65. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/src/taskgraph/transforms/notify.py +0 -0
  66. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/src/taskgraph/transforms/run/common.py +0 -0
  67. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/src/taskgraph/transforms/run/index_search.py +0 -0
  68. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/src/taskgraph/transforms/run/run_task.py +0 -0
  69. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/src/taskgraph/transforms/run/toolchain.py +0 -0
  70. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/src/taskgraph/transforms/task.py +0 -0
  71. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/src/taskgraph/transforms/task_context.py +0 -0
  72. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/src/taskgraph/util/__init__.py +0 -0
  73. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/src/taskgraph/util/archive.py +0 -0
  74. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/src/taskgraph/util/attributes.py +0 -0
  75. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/src/taskgraph/util/cached_tasks.py +0 -0
  76. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/src/taskgraph/util/copy.py +0 -0
  77. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/src/taskgraph/util/dependencies.py +0 -0
  78. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/src/taskgraph/util/docker.py +0 -0
  79. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/src/taskgraph/util/hash.py +0 -0
  80. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/src/taskgraph/util/keyed_by.py +0 -0
  81. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/src/taskgraph/util/parameterization.py +0 -0
  82. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/src/taskgraph/util/path.py +0 -0
  83. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/src/taskgraph/util/python_path.py +0 -0
  84. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/src/taskgraph/util/readonlydict.py +0 -0
  85. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/src/taskgraph/util/schema.py +0 -0
  86. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/src/taskgraph/util/set_name.py +0 -0
  87. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/src/taskgraph/util/shell.py +0 -0
  88. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/src/taskgraph/util/taskcluster.py +0 -0
  89. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/src/taskgraph/util/taskgraph.py +0 -0
  90. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/src/taskgraph/util/templates.py +0 -0
  91. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/src/taskgraph/util/time.py +0 -0
  92. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/src/taskgraph/util/treeherder.py +0 -0
  93. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/src/taskgraph/util/verify.py +0 -0
  94. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/src/taskgraph/util/workertypes.py +0 -0
  95. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/src/taskgraph/util/yaml.py +0 -0
  96. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/test/test_actions_rebuild_cached_tasks.py +0 -0
  97. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/test/test_actions_registry.py +0 -0
  98. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/test/test_create.py +0 -0
  99. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/test/test_decision.py +0 -0
  100. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/test/test_docker.py +0 -0
  101. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/test/test_generator.py +0 -0
  102. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/test/test_graph.py +0 -0
  103. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/test/test_main.py +0 -0
  104. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/test/test_morph.py +0 -0
  105. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/test/test_optimize.py +0 -0
  106. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/test/test_parameters.py +0 -0
  107. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/test/test_scripts_fetch_content.py +0 -0
  108. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/test/test_scripts_run_task.py +0 -0
  109. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/test/test_target_tasks.py +0 -0
  110. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/test/test_taskgraph.py +0 -0
  111. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/test/test_transform_chunking.py +0 -0
  112. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/test/test_transform_docker_image.py +0 -0
  113. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/test/test_transform_task_context.py +0 -0
  114. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/test/test_transforms_base.py +0 -0
  115. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/test/test_transforms_cached_tasks.py +0 -0
  116. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/test/test_transforms_fetch.py +0 -0
  117. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/test/test_transforms_from_deps.py +0 -0
  118. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/test/test_transforms_notify.py +0 -0
  119. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/test/test_transforms_run_run_task.py +0 -0
  120. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/test/test_transforms_run_toolchain.py +0 -0
  121. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/test/test_transforms_task.py +0 -0
  122. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/test/test_util_archive.py +0 -0
  123. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/test/test_util_attributes.py +0 -0
  124. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/test/test_util_cached_tasks.py +0 -0
  125. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/test/test_util_copy.py +0 -0
  126. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/test/test_util_dependencies.py +0 -0
  127. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/test/test_util_docker.py +0 -0
  128. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/test/test_util_parameterization.py +0 -0
  129. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/test/test_util_path.py +0 -0
  130. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/test/test_util_python_path.py +0 -0
  131. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/test/test_util_readonlydict.py +0 -0
  132. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/test/test_util_schema.py +0 -0
  133. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/test/test_util_taskcluster.py +0 -0
  134. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/test/test_util_templates.py +0 -0
  135. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/test/test_util_time.py +0 -0
  136. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/test/test_util_treeherder.py +0 -0
  137. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/test/test_util_verify.py +0 -0
  138. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/test/test_util_workertypes.py +0 -0
  139. {taskcluster-taskgraph-10.0.0 → taskcluster-taskgraph-10.0.2}/test/test_util_yaml.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: taskcluster-taskgraph
3
- Version: 10.0.0
3
+ Version: 10.0.2
4
4
  Summary: Build taskcluster taskgraphs
5
5
  Home-page: https://github.com/taskcluster/taskgraph
6
6
  Classifier: Development Status :: 5 - Production/Stable
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: taskcluster-taskgraph
3
- Version: 10.0.0
3
+ Version: 10.0.2
4
4
  Summary: Build taskcluster taskgraphs
5
5
  Home-page: https://github.com/taskcluster/taskgraph
6
6
  Classifier: Development Status :: 5 - Production/Stable
@@ -2,7 +2,7 @@
2
2
  # License, v. 2.0. If a copy of the MPL was not distributed with this
3
3
  # file, You can obtain one at http://mozilla.org/MPL/2.0/.
4
4
 
5
- __version__ = "10.0.0"
5
+ __version__ = "10.0.2"
6
6
 
7
7
  # Maximum number of dependencies a single task can have
8
8
  # https://docs.taskcluster.net/reference/platform/taskcluster-queue/references/api#createTask
@@ -50,7 +50,7 @@ class IndexSearch(OptimizationStrategy):
50
50
  # (e.g. test-action-callback)
51
51
  if not status or status.get("state") in ("exception", "failed"):
52
52
  logger.debug(
53
- f'not replacing {task["label"]} with {task_id} because it is in failed or exception state'
53
+ f"not replacing {task.label} with {task_id} because it is in failed or exception state"
54
54
  )
55
55
  continue
56
56
 
@@ -58,7 +58,7 @@ class IndexSearch(OptimizationStrategy):
58
58
  status["expires"], self.fmt
59
59
  ) < datetime.strptime(deadline, self.fmt):
60
60
  logger.debug(
61
- f'not replacing {task["label"]} with {task_id} because it expires before {deadline}'
61
+ f"not replacing {task.label} with {task_id} because it expires before {deadline}"
62
62
  )
63
63
  continue
64
64
 
@@ -251,7 +251,9 @@ def use_fetches(config, tasks):
251
251
  for kind in sorted(fetches):
252
252
  artifacts = fetches[kind]
253
253
  if kind in ("fetch", "toolchain"):
254
- for artifact in sorted(artifacts):
254
+ for artifact in sorted(
255
+ artifacts, key=lambda a: a if isinstance(a, str) else a["artifact"]
256
+ ):
255
257
  # Convert name only fetch entries to full fledged ones for
256
258
  # easier processing.
257
259
  if isinstance(artifact, str):
@@ -445,6 +445,9 @@ class GitRepository(Repository):
445
445
  cmd = ["log", "--format=format:", revision_argument]
446
446
 
447
447
  cmd.append("--name-only")
448
+ cmd.append(
449
+ "--no-renames"
450
+ ) # Consider renames as deletion of old, addition of new.
448
451
  cmd.append("--diff-filter=" + diff_filter.upper())
449
452
 
450
453
  files = self.run(*cmd).splitlines()
@@ -33,6 +33,7 @@ def params():
33
33
  False,
34
34
  (
35
35
  "not replacing {label} with {taskid} because it expires before {deadline}",
36
+ "not replacing {label} with {taskid} because it expires before {deadline}",
36
37
  ),
37
38
  ),
38
39
  ("completed", "2021-06-08T14:53:16.937Z", "abc", ()),
@@ -42,6 +43,7 @@ def params():
42
43
  False,
43
44
  (
44
45
  "not replacing {label} with {taskid} because it is in failed or exception state",
46
+ "not replacing {label} with {taskid} because it is in failed or exception state",
45
47
  ),
46
48
  ),
47
49
  (
@@ -50,6 +52,7 @@ def params():
50
52
  False,
51
53
  (
52
54
  "not replacing {label} with {taskid} because it is in failed or exception state",
55
+ "not replacing {label} with {taskid} because it is in failed or exception state",
53
56
  ),
54
57
  ),
55
58
  ),
@@ -90,7 +93,7 @@ def test_index_search(caplog, responses, params, state, expires, expected, logs)
90
93
  deadline = "2021-06-07T19:03:20.482Z"
91
94
  assert (
92
95
  opt.should_replace_task(
93
- {"label": "task-label"},
96
+ make_task("task-label"),
94
97
  params,
95
98
  deadline,
96
99
  ([index_path], label_to_taskid, taskid_to_status),
@@ -98,7 +101,10 @@ def test_index_search(caplog, responses, params, state, expires, expected, logs)
98
101
  == expected
99
102
  )
100
103
  # test the non-batched variant as well
101
- assert opt.should_replace_task({}, params, deadline, [index_path]) == expected
104
+ assert (
105
+ opt.should_replace_task(make_task("task-label"), params, deadline, [index_path])
106
+ == expected
107
+ )
102
108
 
103
109
  if logs:
104
110
  log_records = [
@@ -96,6 +96,23 @@ def assert_use_fetches_toolchain_extract_false(task):
96
96
  assert fetches[0]["extract"] is False
97
97
 
98
98
 
99
+ def assert_use_fetches_toolchain_mixed(task):
100
+ fetches = json.loads(task["worker"]["env"]["MOZ_FETCHES"]["task-reference"])
101
+ assert len(fetches) == 2
102
+ assert fetches == [
103
+ {
104
+ "artifact": "bar.zip",
105
+ "extract": True,
106
+ "task": "<toolchain-bar>",
107
+ },
108
+ {
109
+ "artifact": "target.whl",
110
+ "extract": False,
111
+ "task": "<toolchain-foo>",
112
+ },
113
+ ]
114
+
115
+
99
116
  @pytest.mark.parametrize(
100
117
  "task,kind_dependencies_tasks",
101
118
  (
@@ -128,6 +145,28 @@ def assert_use_fetches_toolchain_extract_false(task):
128
145
  ],
129
146
  id="toolchain_extract_false",
130
147
  ),
148
+ pytest.param(
149
+ {"fetches": {"toolchain": [{"artifact": "foo", "extract": False}, "bar"]}},
150
+ [
151
+ Task(
152
+ kind="toolchain",
153
+ label="toolchain-foo",
154
+ attributes={
155
+ "toolchain-artifact": "target.whl",
156
+ },
157
+ task={},
158
+ ),
159
+ Task(
160
+ kind="toolchain",
161
+ label="toolchain-bar",
162
+ attributes={
163
+ "toolchain-artifact": "bar.zip",
164
+ },
165
+ task={},
166
+ ),
167
+ ],
168
+ id="toolchain_mixed",
169
+ ),
131
170
  ),
132
171
  )
133
172
  def test_use_fetches(
@@ -277,42 +277,59 @@ def test_get_changed_files_one_added_file(repo):
277
277
  def test_get_changed_files_two_revisions(repo):
278
278
  with open(os.path.join(repo.path, "second_file"), "w") as f:
279
279
  f.write("some data for the second file")
280
- repo.run("add", "second_file")
281
- repo.run("commit", "-m", "Add second_file")
280
+ with open(os.path.join(repo.path, "fourth_file"), "w") as f:
281
+ f.write("some data for the fourth file")
282
+ repo.run("add", "second_file", "fourth_file")
283
+ repo.run("commit", "-m", "Add second_file and fourth_file")
282
284
 
283
285
  os.remove(os.path.join(repo.path, "first_file"))
284
286
  with open(os.path.join(repo.path, "second_file"), "w") as f:
285
287
  f.write("new data for second file")
286
288
  with open(os.path.join(repo.path, "third_file"), "w") as f:
287
289
  f.write("third type of data")
290
+ os.rename(
291
+ os.path.join(repo.path, "fourth_file"),
292
+ os.path.join(repo.path, "fourth_file_new"),
293
+ )
288
294
 
289
- repo.run("rm", "first_file")
295
+ repo.run("rm", "first_file", "fourth_file")
290
296
  repo.run("add", ".")
291
- repo.run("commit", "-m", "Remove first_file; modify second_file; add third_file")
297
+ repo.run(
298
+ "commit",
299
+ "-m",
300
+ "Remove first_file; modify second_file; add third_file, rename fourth_file",
301
+ )
292
302
 
293
303
  last_revision = "HEAD" if repo.tool == "git" else "."
294
- assert_files(repo.get_changed_files("A", "all", last_revision), ["third_file"])
304
+ assert_files(
305
+ repo.get_changed_files("A", "all", last_revision),
306
+ ["third_file", "fourth_file_new"],
307
+ )
295
308
  assert_files(repo.get_changed_files("M", "all", last_revision), ["second_file"])
296
- assert_files(repo.get_changed_files("D", "all", last_revision), ["first_file"])
309
+ assert_files(
310
+ repo.get_changed_files("D", "all", last_revision), ["first_file", "fourth_file"]
311
+ )
297
312
  assert_files(
298
313
  repo.get_changed_files("AMD", "all", last_revision),
299
- ["first_file", "second_file", "third_file"],
314
+ ["first_file", "second_file", "third_file", "fourth_file_new", "fourth_file"],
300
315
  )
301
316
 
302
317
  one_before_last_revision = "HEAD~1" if repo.tool == "git" else ".^"
303
318
  assert_files(
304
- repo.get_changed_files("A", "all", one_before_last_revision), ["second_file"]
319
+ repo.get_changed_files("A", "all", one_before_last_revision),
320
+ ["second_file", "fourth_file"],
305
321
  )
306
322
  assert_files(repo.get_changed_files("M", "all", one_before_last_revision), [])
307
323
  assert_files(repo.get_changed_files("D", "all", one_before_last_revision), [])
308
324
  assert_files(
309
- repo.get_changed_files("AMD", "all", one_before_last_revision), ["second_file"]
325
+ repo.get_changed_files("AMD", "all", one_before_last_revision),
326
+ ["second_file", "fourth_file"],
310
327
  )
311
328
 
312
329
  two_before_last_revision = "HEAD~2" if repo.tool == "git" else ".^^"
313
330
  assert_files(
314
331
  repo.get_changed_files("A", "all", last_revision, two_before_last_revision),
315
- ["third_file", "second_file"],
332
+ ["third_file", "second_file", "fourth_file", "fourth_file_new"],
316
333
  )
317
334
  assert_files(
318
335
  repo.get_changed_files("M", "all", last_revision, two_before_last_revision),
@@ -320,11 +337,11 @@ def test_get_changed_files_two_revisions(repo):
320
337
  )
321
338
  assert_files(
322
339
  repo.get_changed_files("D", "all", last_revision, two_before_last_revision),
323
- ["first_file"],
340
+ ["first_file", "fourth_file"],
324
341
  )
325
342
  assert_files(
326
343
  repo.get_changed_files("AMD", "all", last_revision, two_before_last_revision),
327
- ["first_file", "second_file", "third_file"],
344
+ ["first_file", "second_file", "third_file", "fourth_file", "fourth_file_new"],
328
345
  )
329
346
 
330
347