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.
- jolt/__init__.py +80 -7
- jolt/__main__.py +9 -1
- jolt/bin/fstree-darwin-x86_64 +0 -0
- jolt/bin/fstree-linux-x86_64 +0 -0
- jolt/cache.py +832 -362
- jolt/chroot.py +156 -0
- jolt/cli.py +281 -162
- jolt/common_pb2.py +63 -0
- jolt/common_pb2_grpc.py +4 -0
- jolt/config.py +98 -41
- jolt/error.py +19 -4
- jolt/filesystem.py +2 -6
- jolt/graph.py +705 -117
- jolt/hooks.py +43 -0
- jolt/influence.py +122 -3
- jolt/loader.py +369 -121
- jolt/log.py +225 -63
- jolt/manifest.py +28 -38
- jolt/options.py +35 -10
- jolt/pkgs/abseil.py +42 -0
- jolt/pkgs/asio.py +25 -0
- jolt/pkgs/autoconf.py +41 -0
- jolt/pkgs/automake.py +41 -0
- jolt/pkgs/b2.py +31 -0
- jolt/pkgs/boost.py +111 -0
- jolt/pkgs/boringssl.py +32 -0
- jolt/pkgs/busybox.py +39 -0
- jolt/pkgs/bzip2.py +43 -0
- jolt/pkgs/cares.py +29 -0
- jolt/pkgs/catch2.py +36 -0
- jolt/pkgs/cbindgen.py +17 -0
- jolt/pkgs/cista.py +19 -0
- jolt/pkgs/clang.py +44 -0
- jolt/pkgs/cli11.py +24 -0
- jolt/pkgs/cmake.py +48 -0
- jolt/pkgs/cpython.py +196 -0
- jolt/pkgs/crun.py +29 -0
- jolt/pkgs/curl.py +38 -0
- jolt/pkgs/dbus.py +18 -0
- jolt/pkgs/double_conversion.py +24 -0
- jolt/pkgs/fastfloat.py +21 -0
- jolt/pkgs/ffmpeg.py +28 -0
- jolt/pkgs/flatbuffers.py +29 -0
- jolt/pkgs/fmt.py +27 -0
- jolt/pkgs/fstree.py +20 -0
- jolt/pkgs/gflags.py +18 -0
- jolt/pkgs/glib.py +18 -0
- jolt/pkgs/glog.py +25 -0
- jolt/pkgs/glslang.py +21 -0
- jolt/pkgs/golang.py +16 -11
- jolt/pkgs/googlebenchmark.py +18 -0
- jolt/pkgs/googletest.py +46 -0
- jolt/pkgs/gperf.py +15 -0
- jolt/pkgs/grpc.py +73 -0
- jolt/pkgs/hdf5.py +19 -0
- jolt/pkgs/help2man.py +14 -0
- jolt/pkgs/inja.py +28 -0
- jolt/pkgs/jsoncpp.py +31 -0
- jolt/pkgs/libarchive.py +43 -0
- jolt/pkgs/libcap.py +44 -0
- jolt/pkgs/libdrm.py +44 -0
- jolt/pkgs/libedit.py +42 -0
- jolt/pkgs/libevent.py +31 -0
- jolt/pkgs/libexpat.py +27 -0
- jolt/pkgs/libfastjson.py +21 -0
- jolt/pkgs/libffi.py +16 -0
- jolt/pkgs/libglvnd.py +30 -0
- jolt/pkgs/libogg.py +28 -0
- jolt/pkgs/libpciaccess.py +18 -0
- jolt/pkgs/libseccomp.py +21 -0
- jolt/pkgs/libtirpc.py +24 -0
- jolt/pkgs/libtool.py +42 -0
- jolt/pkgs/libunwind.py +35 -0
- jolt/pkgs/libva.py +18 -0
- jolt/pkgs/libvorbis.py +33 -0
- jolt/pkgs/libxml2.py +35 -0
- jolt/pkgs/libxslt.py +17 -0
- jolt/pkgs/libyajl.py +16 -0
- jolt/pkgs/llvm.py +81 -0
- jolt/pkgs/lua.py +54 -0
- jolt/pkgs/lz4.py +26 -0
- jolt/pkgs/m4.py +14 -0
- jolt/pkgs/make.py +17 -0
- jolt/pkgs/mesa.py +81 -0
- jolt/pkgs/meson.py +17 -0
- jolt/pkgs/mstch.py +28 -0
- jolt/pkgs/mysql.py +60 -0
- jolt/pkgs/nasm.py +49 -0
- jolt/pkgs/ncurses.py +30 -0
- jolt/pkgs/ng_log.py +25 -0
- jolt/pkgs/ninja.py +45 -0
- jolt/pkgs/nlohmann_json.py +25 -0
- jolt/pkgs/nodejs.py +19 -11
- jolt/pkgs/opencv.py +24 -0
- jolt/pkgs/openjdk.py +26 -0
- jolt/pkgs/openssl.py +103 -0
- jolt/pkgs/paho.py +76 -0
- jolt/pkgs/patchelf.py +16 -0
- jolt/pkgs/perl.py +42 -0
- jolt/pkgs/pkgconfig.py +64 -0
- jolt/pkgs/poco.py +39 -0
- jolt/pkgs/protobuf.py +77 -0
- jolt/pkgs/pugixml.py +27 -0
- jolt/pkgs/python.py +19 -0
- jolt/pkgs/qt.py +35 -0
- jolt/pkgs/rapidjson.py +26 -0
- jolt/pkgs/rapidyaml.py +28 -0
- jolt/pkgs/re2.py +30 -0
- jolt/pkgs/re2c.py +17 -0
- jolt/pkgs/readline.py +15 -0
- jolt/pkgs/rust.py +41 -0
- jolt/pkgs/sdl.py +28 -0
- jolt/pkgs/simdjson.py +27 -0
- jolt/pkgs/soci.py +46 -0
- jolt/pkgs/spdlog.py +29 -0
- jolt/pkgs/spirv_llvm.py +21 -0
- jolt/pkgs/spirv_tools.py +24 -0
- jolt/pkgs/sqlite.py +83 -0
- jolt/pkgs/ssl.py +12 -0
- jolt/pkgs/texinfo.py +15 -0
- jolt/pkgs/tomlplusplus.py +22 -0
- jolt/pkgs/wayland.py +26 -0
- jolt/pkgs/x11.py +58 -0
- jolt/pkgs/xerces_c.py +20 -0
- jolt/pkgs/xorg.py +360 -0
- jolt/pkgs/xz.py +29 -0
- jolt/pkgs/yamlcpp.py +30 -0
- jolt/pkgs/zeromq.py +47 -0
- jolt/pkgs/zlib.py +87 -0
- jolt/pkgs/zstd.py +33 -0
- jolt/plugins/alias.py +3 -0
- jolt/plugins/allure.py +5 -2
- jolt/plugins/autotools.py +66 -0
- jolt/plugins/cache.py +133 -0
- jolt/plugins/cmake.py +74 -6
- jolt/plugins/conan.py +238 -0
- jolt/plugins/cxx.py +698 -0
- jolt/plugins/cxxinfo.py +7 -0
- jolt/plugins/dashboard.py +1 -1
- jolt/plugins/docker.py +80 -23
- jolt/plugins/email.py +2 -2
- jolt/plugins/email.xslt +144 -101
- jolt/plugins/environ.py +11 -0
- jolt/plugins/fetch.py +141 -0
- jolt/plugins/gdb.py +39 -19
- jolt/plugins/gerrit.py +1 -14
- jolt/plugins/git.py +283 -85
- jolt/plugins/googletest.py +2 -1
- jolt/plugins/http.py +36 -38
- jolt/plugins/libtool.py +63 -0
- jolt/plugins/linux.py +990 -0
- jolt/plugins/logstash.py +4 -4
- jolt/plugins/meson.py +61 -0
- jolt/plugins/ninja-compdb.py +99 -30
- jolt/plugins/ninja.py +468 -166
- jolt/plugins/paths.py +11 -1
- jolt/plugins/pkgconfig.py +219 -0
- jolt/plugins/podman.py +136 -92
- jolt/plugins/python.py +137 -0
- jolt/plugins/remote_execution/__init__.py +0 -0
- jolt/plugins/remote_execution/administration_pb2.py +46 -0
- jolt/plugins/remote_execution/administration_pb2_grpc.py +170 -0
- jolt/plugins/remote_execution/log_pb2.py +32 -0
- jolt/plugins/remote_execution/log_pb2_grpc.py +68 -0
- jolt/plugins/remote_execution/scheduler_pb2.py +41 -0
- jolt/plugins/remote_execution/scheduler_pb2_grpc.py +141 -0
- jolt/plugins/remote_execution/worker_pb2.py +38 -0
- jolt/plugins/remote_execution/worker_pb2_grpc.py +112 -0
- jolt/plugins/report.py +12 -2
- jolt/plugins/rust.py +25 -0
- jolt/plugins/scheduler.py +710 -0
- jolt/plugins/selfdeploy/setup.py +8 -4
- jolt/plugins/selfdeploy.py +138 -88
- jolt/plugins/strings.py +35 -22
- jolt/plugins/symlinks.py +26 -11
- jolt/plugins/telemetry.py +5 -2
- jolt/plugins/timeline.py +13 -3
- jolt/plugins/volume.py +46 -48
- jolt/scheduler.py +589 -192
- jolt/tasks.py +625 -121
- jolt/templates/timeline.html.template +44 -47
- jolt/timer.py +22 -0
- jolt/tools.py +638 -282
- jolt/utils.py +211 -7
- jolt/version.py +1 -1
- jolt/xmldom.py +12 -2
- {jolt-0.9.123.dist-info → jolt-0.9.435.dist-info}/METADATA +97 -38
- jolt-0.9.435.dist-info/RECORD +207 -0
- {jolt-0.9.123.dist-info → jolt-0.9.435.dist-info}/WHEEL +1 -1
- jolt/plugins/amqp.py +0 -834
- jolt/plugins/debian.py +0 -338
- jolt/plugins/ftp.py +0 -181
- jolt/plugins/repo.py +0 -253
- jolt-0.9.123.dist-info/RECORD +0 -77
- {jolt-0.9.123.dist-info → jolt-0.9.435.dist-info}/entry_points.txt +0 -0
- {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
|
|
601
|
-
|
|
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):
|