jolt 0.9.123__py3-none-any.whl → 0.9.435__py3-none-any.whl

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 (196) hide show
  1. jolt/__init__.py +80 -7
  2. jolt/__main__.py +9 -1
  3. jolt/bin/fstree-darwin-x86_64 +0 -0
  4. jolt/bin/fstree-linux-x86_64 +0 -0
  5. jolt/cache.py +832 -362
  6. jolt/chroot.py +156 -0
  7. jolt/cli.py +281 -162
  8. jolt/common_pb2.py +63 -0
  9. jolt/common_pb2_grpc.py +4 -0
  10. jolt/config.py +98 -41
  11. jolt/error.py +19 -4
  12. jolt/filesystem.py +2 -6
  13. jolt/graph.py +705 -117
  14. jolt/hooks.py +43 -0
  15. jolt/influence.py +122 -3
  16. jolt/loader.py +369 -121
  17. jolt/log.py +225 -63
  18. jolt/manifest.py +28 -38
  19. jolt/options.py +35 -10
  20. jolt/pkgs/abseil.py +42 -0
  21. jolt/pkgs/asio.py +25 -0
  22. jolt/pkgs/autoconf.py +41 -0
  23. jolt/pkgs/automake.py +41 -0
  24. jolt/pkgs/b2.py +31 -0
  25. jolt/pkgs/boost.py +111 -0
  26. jolt/pkgs/boringssl.py +32 -0
  27. jolt/pkgs/busybox.py +39 -0
  28. jolt/pkgs/bzip2.py +43 -0
  29. jolt/pkgs/cares.py +29 -0
  30. jolt/pkgs/catch2.py +36 -0
  31. jolt/pkgs/cbindgen.py +17 -0
  32. jolt/pkgs/cista.py +19 -0
  33. jolt/pkgs/clang.py +44 -0
  34. jolt/pkgs/cli11.py +24 -0
  35. jolt/pkgs/cmake.py +48 -0
  36. jolt/pkgs/cpython.py +196 -0
  37. jolt/pkgs/crun.py +29 -0
  38. jolt/pkgs/curl.py +38 -0
  39. jolt/pkgs/dbus.py +18 -0
  40. jolt/pkgs/double_conversion.py +24 -0
  41. jolt/pkgs/fastfloat.py +21 -0
  42. jolt/pkgs/ffmpeg.py +28 -0
  43. jolt/pkgs/flatbuffers.py +29 -0
  44. jolt/pkgs/fmt.py +27 -0
  45. jolt/pkgs/fstree.py +20 -0
  46. jolt/pkgs/gflags.py +18 -0
  47. jolt/pkgs/glib.py +18 -0
  48. jolt/pkgs/glog.py +25 -0
  49. jolt/pkgs/glslang.py +21 -0
  50. jolt/pkgs/golang.py +16 -11
  51. jolt/pkgs/googlebenchmark.py +18 -0
  52. jolt/pkgs/googletest.py +46 -0
  53. jolt/pkgs/gperf.py +15 -0
  54. jolt/pkgs/grpc.py +73 -0
  55. jolt/pkgs/hdf5.py +19 -0
  56. jolt/pkgs/help2man.py +14 -0
  57. jolt/pkgs/inja.py +28 -0
  58. jolt/pkgs/jsoncpp.py +31 -0
  59. jolt/pkgs/libarchive.py +43 -0
  60. jolt/pkgs/libcap.py +44 -0
  61. jolt/pkgs/libdrm.py +44 -0
  62. jolt/pkgs/libedit.py +42 -0
  63. jolt/pkgs/libevent.py +31 -0
  64. jolt/pkgs/libexpat.py +27 -0
  65. jolt/pkgs/libfastjson.py +21 -0
  66. jolt/pkgs/libffi.py +16 -0
  67. jolt/pkgs/libglvnd.py +30 -0
  68. jolt/pkgs/libogg.py +28 -0
  69. jolt/pkgs/libpciaccess.py +18 -0
  70. jolt/pkgs/libseccomp.py +21 -0
  71. jolt/pkgs/libtirpc.py +24 -0
  72. jolt/pkgs/libtool.py +42 -0
  73. jolt/pkgs/libunwind.py +35 -0
  74. jolt/pkgs/libva.py +18 -0
  75. jolt/pkgs/libvorbis.py +33 -0
  76. jolt/pkgs/libxml2.py +35 -0
  77. jolt/pkgs/libxslt.py +17 -0
  78. jolt/pkgs/libyajl.py +16 -0
  79. jolt/pkgs/llvm.py +81 -0
  80. jolt/pkgs/lua.py +54 -0
  81. jolt/pkgs/lz4.py +26 -0
  82. jolt/pkgs/m4.py +14 -0
  83. jolt/pkgs/make.py +17 -0
  84. jolt/pkgs/mesa.py +81 -0
  85. jolt/pkgs/meson.py +17 -0
  86. jolt/pkgs/mstch.py +28 -0
  87. jolt/pkgs/mysql.py +60 -0
  88. jolt/pkgs/nasm.py +49 -0
  89. jolt/pkgs/ncurses.py +30 -0
  90. jolt/pkgs/ng_log.py +25 -0
  91. jolt/pkgs/ninja.py +45 -0
  92. jolt/pkgs/nlohmann_json.py +25 -0
  93. jolt/pkgs/nodejs.py +19 -11
  94. jolt/pkgs/opencv.py +24 -0
  95. jolt/pkgs/openjdk.py +26 -0
  96. jolt/pkgs/openssl.py +103 -0
  97. jolt/pkgs/paho.py +76 -0
  98. jolt/pkgs/patchelf.py +16 -0
  99. jolt/pkgs/perl.py +42 -0
  100. jolt/pkgs/pkgconfig.py +64 -0
  101. jolt/pkgs/poco.py +39 -0
  102. jolt/pkgs/protobuf.py +77 -0
  103. jolt/pkgs/pugixml.py +27 -0
  104. jolt/pkgs/python.py +19 -0
  105. jolt/pkgs/qt.py +35 -0
  106. jolt/pkgs/rapidjson.py +26 -0
  107. jolt/pkgs/rapidyaml.py +28 -0
  108. jolt/pkgs/re2.py +30 -0
  109. jolt/pkgs/re2c.py +17 -0
  110. jolt/pkgs/readline.py +15 -0
  111. jolt/pkgs/rust.py +41 -0
  112. jolt/pkgs/sdl.py +28 -0
  113. jolt/pkgs/simdjson.py +27 -0
  114. jolt/pkgs/soci.py +46 -0
  115. jolt/pkgs/spdlog.py +29 -0
  116. jolt/pkgs/spirv_llvm.py +21 -0
  117. jolt/pkgs/spirv_tools.py +24 -0
  118. jolt/pkgs/sqlite.py +83 -0
  119. jolt/pkgs/ssl.py +12 -0
  120. jolt/pkgs/texinfo.py +15 -0
  121. jolt/pkgs/tomlplusplus.py +22 -0
  122. jolt/pkgs/wayland.py +26 -0
  123. jolt/pkgs/x11.py +58 -0
  124. jolt/pkgs/xerces_c.py +20 -0
  125. jolt/pkgs/xorg.py +360 -0
  126. jolt/pkgs/xz.py +29 -0
  127. jolt/pkgs/yamlcpp.py +30 -0
  128. jolt/pkgs/zeromq.py +47 -0
  129. jolt/pkgs/zlib.py +87 -0
  130. jolt/pkgs/zstd.py +33 -0
  131. jolt/plugins/alias.py +3 -0
  132. jolt/plugins/allure.py +5 -2
  133. jolt/plugins/autotools.py +66 -0
  134. jolt/plugins/cache.py +133 -0
  135. jolt/plugins/cmake.py +74 -6
  136. jolt/plugins/conan.py +238 -0
  137. jolt/plugins/cxx.py +698 -0
  138. jolt/plugins/cxxinfo.py +7 -0
  139. jolt/plugins/dashboard.py +1 -1
  140. jolt/plugins/docker.py +80 -23
  141. jolt/plugins/email.py +2 -2
  142. jolt/plugins/email.xslt +144 -101
  143. jolt/plugins/environ.py +11 -0
  144. jolt/plugins/fetch.py +141 -0
  145. jolt/plugins/gdb.py +39 -19
  146. jolt/plugins/gerrit.py +1 -14
  147. jolt/plugins/git.py +283 -85
  148. jolt/plugins/googletest.py +2 -1
  149. jolt/plugins/http.py +36 -38
  150. jolt/plugins/libtool.py +63 -0
  151. jolt/plugins/linux.py +990 -0
  152. jolt/plugins/logstash.py +4 -4
  153. jolt/plugins/meson.py +61 -0
  154. jolt/plugins/ninja-compdb.py +99 -30
  155. jolt/plugins/ninja.py +468 -166
  156. jolt/plugins/paths.py +11 -1
  157. jolt/plugins/pkgconfig.py +219 -0
  158. jolt/plugins/podman.py +136 -92
  159. jolt/plugins/python.py +137 -0
  160. jolt/plugins/remote_execution/__init__.py +0 -0
  161. jolt/plugins/remote_execution/administration_pb2.py +46 -0
  162. jolt/plugins/remote_execution/administration_pb2_grpc.py +170 -0
  163. jolt/plugins/remote_execution/log_pb2.py +32 -0
  164. jolt/plugins/remote_execution/log_pb2_grpc.py +68 -0
  165. jolt/plugins/remote_execution/scheduler_pb2.py +41 -0
  166. jolt/plugins/remote_execution/scheduler_pb2_grpc.py +141 -0
  167. jolt/plugins/remote_execution/worker_pb2.py +38 -0
  168. jolt/plugins/remote_execution/worker_pb2_grpc.py +112 -0
  169. jolt/plugins/report.py +12 -2
  170. jolt/plugins/rust.py +25 -0
  171. jolt/plugins/scheduler.py +710 -0
  172. jolt/plugins/selfdeploy/setup.py +8 -4
  173. jolt/plugins/selfdeploy.py +138 -88
  174. jolt/plugins/strings.py +35 -22
  175. jolt/plugins/symlinks.py +26 -11
  176. jolt/plugins/telemetry.py +5 -2
  177. jolt/plugins/timeline.py +13 -3
  178. jolt/plugins/volume.py +46 -48
  179. jolt/scheduler.py +589 -192
  180. jolt/tasks.py +625 -121
  181. jolt/templates/timeline.html.template +44 -47
  182. jolt/timer.py +22 -0
  183. jolt/tools.py +638 -282
  184. jolt/utils.py +211 -7
  185. jolt/version.py +1 -1
  186. jolt/xmldom.py +12 -2
  187. {jolt-0.9.123.dist-info → jolt-0.9.435.dist-info}/METADATA +97 -38
  188. jolt-0.9.435.dist-info/RECORD +207 -0
  189. {jolt-0.9.123.dist-info → jolt-0.9.435.dist-info}/WHEEL +1 -1
  190. jolt/plugins/amqp.py +0 -834
  191. jolt/plugins/debian.py +0 -338
  192. jolt/plugins/ftp.py +0 -181
  193. jolt/plugins/repo.py +0 -253
  194. jolt-0.9.123.dist-info/RECORD +0 -77
  195. {jolt-0.9.123.dist-info → jolt-0.9.435.dist-info}/entry_points.txt +0 -0
  196. {jolt-0.9.123.dist-info → jolt-0.9.435.dist-info}/top_level.txt +0 -0
jolt/hooks.py CHANGED
@@ -8,6 +8,9 @@ class TaskHook(object):
8
8
  def task_created(self, task):
9
9
  pass
10
10
 
11
+ def task_queued(self, task):
12
+ pass
13
+
11
14
  def task_started(self, task):
12
15
  pass
13
16
 
@@ -36,6 +39,9 @@ class TaskHook(object):
36
39
  def task_failed(self, task):
37
40
  pass
38
41
 
42
+ def task_unstable(self, task):
43
+ pass
44
+
39
45
  def task_pruned(self, task):
40
46
  pass
41
47
 
@@ -95,6 +101,10 @@ class TaskHookRegistry(object):
95
101
  for ext in self.hooks:
96
102
  utils.call_and_catch_and_log(ext.task_created, task)
97
103
 
104
+ def task_queued(self, task):
105
+ for ext in self.hooks:
106
+ utils.call_and_catch_and_log(ext.task_queued, task)
107
+
98
108
  def task_started(self, task):
99
109
  if task.is_resource():
100
110
  return
@@ -149,6 +159,12 @@ class TaskHookRegistry(object):
149
159
  for ext in self.hooks:
150
160
  utils.call_and_catch_and_log(ext.task_failed, task)
151
161
 
162
+ def task_unstable(self, task):
163
+ if task.is_resource():
164
+ return
165
+ for ext in self.hooks:
166
+ utils.call_and_catch_and_log(ext.task_unstable, task)
167
+
152
168
  def task_pruned(self, task):
153
169
  if task.is_resource():
154
170
  return
@@ -222,6 +238,10 @@ class CliHook(object):
222
238
  def cli_download(self, *args, **kwargs):
223
239
  yield
224
240
 
241
+ @contextmanager
242
+ def cli_report(self, *args, **kwargs):
243
+ yield
244
+
225
245
 
226
246
  class CliHookFactory(object):
227
247
  @staticmethod
@@ -262,11 +282,22 @@ class CliHookRegistry(object):
262
282
  stack.enter_context(ext.cli_download(*args, **kwargs))
263
283
  yield
264
284
 
285
+ @contextmanager
286
+ def cli_report(self, *args, **kwargs):
287
+ with ExitStack() as stack:
288
+ for ext in self.hooks:
289
+ stack.enter_context(ext.cli_report(*args, **kwargs))
290
+ yield
291
+
265
292
 
266
293
  def task_created(task):
267
294
  TaskHookRegistry.get().task_created(task)
268
295
 
269
296
 
297
+ def task_queued(task):
298
+ TaskHookRegistry.get().task_queued(task)
299
+
300
+
270
301
  def task_started(task):
271
302
  TaskHookRegistry.get().task_started(task)
272
303
 
@@ -287,6 +318,10 @@ def task_failed(task):
287
318
  TaskHookRegistry.get().task_failed(task)
288
319
 
289
320
 
321
+ def task_unstable(task):
322
+ TaskHookRegistry.get().task_unstable(task)
323
+
324
+
290
325
  def task_finished(task):
291
326
  TaskHookRegistry.get().task_finished(task)
292
327
 
@@ -361,3 +396,11 @@ def cli_download(cmd):
361
396
  with CliHookRegistry.get().cli_download():
362
397
  return cmd(*args, **kwargs)
363
398
  return decorator
399
+
400
+
401
+ def cli_report(cmd):
402
+ @functools.wraps(cmd)
403
+ def decorator(*args, **kwargs):
404
+ with CliHookRegistry.get().cli_report():
405
+ return cmd(*args, **kwargs)
406
+ return decorator
jolt/influence.py CHANGED
@@ -3,6 +3,7 @@ import hashlib
3
3
  import os
4
4
  from pathlib import Path, PurePath
5
5
 
6
+ from jolt import config as jolt_config
6
7
  from jolt import inspection
7
8
  from jolt import utils
8
9
  from jolt import filesystem as fs
@@ -201,6 +202,71 @@ def source(name, obj=None):
201
202
  return _decorate
202
203
 
203
204
 
205
+ class ConfigInfluence(HashInfluenceProvider):
206
+ name = "Config"
207
+
208
+ def __init__(self, section, key):
209
+ self.section = section
210
+ self.key = key
211
+
212
+ def get_influence(self, task):
213
+ value = jolt_config.get(self.section, self.key)
214
+ if value is None:
215
+ value = "<unset>"
216
+ return "{}.{}: {}".format(self.section, self.key, value)
217
+
218
+
219
+ def config(section, key):
220
+ """ Add configuration value as hash influence.
221
+
222
+ Note that the configuration value is read at the time
223
+ when the task is prepared, not when it is executed.
224
+ This means that if the configuration value changes after
225
+ influence has been calculated, the task will not be re-executed.
226
+ This is true also in distributed mode, where the task
227
+ is prepared locally and executed remotely on a worker
228
+ where the configuration value may be different.
229
+
230
+ Args:
231
+ section (str): Name of the configuration section.
232
+ key (str): Name of the configuration key.
233
+
234
+ Example:
235
+ .. code-block:: python
236
+
237
+ from jolt import influence
238
+
239
+ @influence.config("jolt", "task_timeout")
240
+ class Example(Task):
241
+
242
+ """
243
+ def _decorate(cls):
244
+ _old_influence = cls._influence
245
+
246
+ def _influence(self, *args, **kwargs):
247
+ influence = _old_influence(self, *args, **kwargs)
248
+ influence.append(ConfigInfluence(section, key))
249
+ return influence
250
+
251
+ cls._influence = _influence
252
+ return cls
253
+
254
+ return _decorate
255
+
256
+
257
+ def global_config(section, key):
258
+ """ Register a configuration influence globally.
259
+
260
+ See :py:func:`config` for more information.
261
+
262
+ Args:
263
+ section (str): Name of the configuration section.
264
+ key (str): Name of the configuration key.
265
+ """
266
+
267
+ HashInfluenceRegistry.get().register(ConfigInfluence(section, key))
268
+
269
+
204
270
  class TaskClassSourceInfluence(HashInfluenceProvider):
205
271
  name = "Source"
206
272
 
@@ -222,6 +288,18 @@ class TaskClassSourceInfluence(HashInfluenceProvider):
222
288
  return result
223
289
 
224
290
 
291
+ class CallbackInfluence(HashInfluenceProvider):
292
+ def __init__(self, desc, fn, *args, **kwargs):
293
+ self.name = "Callback"
294
+ self.desc = desc
295
+ self.fn = fn
296
+ self.args = args
297
+ self.kwargs = kwargs
298
+
299
+ def get_influence(self, task):
300
+ return self.desc + ": " + str(self.fn(*self.args, **self.kwargs))
301
+
302
+
225
303
  class TaskRequirementInfluence(HashInfluenceProvider):
226
304
  name = "Requirement"
227
305
 
@@ -233,6 +311,13 @@ class TaskRequirementInfluence(HashInfluenceProvider):
233
311
  return "{}: {}".format(self._identity, self._name)
234
312
 
235
313
 
314
+ class CacheLocationInfluence(HashInfluenceProvider):
315
+ name = "Cache"
316
+
317
+ def get_influence(self, task):
318
+ return jolt_config.get_cachedir()
319
+
320
+
236
321
  @HashInfluenceRegistry.Register
237
322
  class TaskNameInfluence(HashInfluenceProvider):
238
323
  name = "Name"
@@ -590,15 +675,49 @@ def whitelist(pathname):
590
675
  class StringInfluence(HashInfluenceProvider):
591
676
  name = "String"
592
677
 
593
- def __init__(self, value):
678
+ def __init__(self, value, selfdeploy=False):
594
679
  self.value = value
680
+ self.selfdeploy = selfdeploy
595
681
 
596
682
  def get_influence(self, task):
683
+ if not self.selfdeploy and task.name in ["jolt"]:
684
+ return "jolt"
597
685
  return self.value
598
686
 
599
687
 
600
- def global_string(string):
601
- HashInfluenceRegistry.get().register(StringInfluence(string))
688
+ def string(string, selfdeploy=False):
689
+ """ Add string hash influence.
690
+
691
+ Args:
692
+ string (str): A string that will influence the hash of the task.
693
+
694
+ Example:
695
+
696
+ .. code-block:: python
697
+
698
+ from jolt import influence
699
+
700
+ @influence.string("example")
701
+ class Example(Task):
702
+
703
+ """
704
+
705
+ def _decorate(cls):
706
+ _old_influence = cls._influence
707
+
708
+ def _influence(self, *args, **kwargs):
709
+ influence = _old_influence(self, *args, **kwargs)
710
+ influence.append(StringInfluence(string, selfdeploy=selfdeploy))
711
+ return influence
712
+
713
+ cls._influence = _influence
714
+ return cls
715
+
716
+ return _decorate
717
+
718
+
719
+ def global_string(string, selfdeploy=False):
720
+ HashInfluenceRegistry.get().register(StringInfluence(string, selfdeploy=selfdeploy))
602
721
 
603
722
 
604
723
  class VersionInfluence(HashInfluenceProvider):