jolt 0.9.390__tar.gz → 0.9.395__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.
- {jolt-0.9.390 → jolt-0.9.395}/PKG-INFO +1 -1
- {jolt-0.9.390 → jolt-0.9.395}/jolt/cli.py +1 -1
- {jolt-0.9.390 → jolt-0.9.395}/jolt/influence.py +67 -2
- {jolt-0.9.390 → jolt-0.9.395}/jolt/plugins/linux.py +49 -2
- {jolt-0.9.390 → jolt-0.9.395}/jolt/plugins/podman.py +10 -1
- {jolt-0.9.390 → jolt-0.9.395}/jolt/tools.py +3 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt/utils.py +10 -1
- jolt-0.9.395/jolt/version.py +1 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt.egg-info/PKG-INFO +1 -1
- jolt-0.9.390/jolt/version.py +0 -1
- {jolt-0.9.390 → jolt-0.9.395}/README.rst +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt/__init__.py +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt/__main__.py +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt/bin/fstree-darwin-x86_64 +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt/bin/fstree-linux-x86_64 +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt/cache.py +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt/chroot.py +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt/colors.py +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt/common_pb2.py +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt/common_pb2_grpc.py +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt/config.py +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt/error.py +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt/expires.py +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt/filesystem.py +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt/graph.py +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt/hooks.py +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt/inspection.py +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt/loader.py +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt/log.py +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt/manifest.py +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt/options.py +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt/pkgs/__init__.py +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt/pkgs/golang.py +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt/pkgs/nodejs.py +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt/plugins/__init__.py +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt/plugins/alias.py +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt/plugins/allure.py +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt/plugins/autoweight.py +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt/plugins/cache.py +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt/plugins/cmake.py +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt/plugins/conan.py +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt/plugins/cxx.py +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt/plugins/cxxinfo.py +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt/plugins/dashboard.py +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt/plugins/docker.py +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt/plugins/email.py +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt/plugins/email.xslt +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt/plugins/environ.py +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt/plugins/gdb.py +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt/plugins/gerrit.py +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt/plugins/git.py +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt/plugins/golang.py +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt/plugins/googletest.py +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt/plugins/http.py +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt/plugins/junit.py +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt/plugins/logstash.py +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt/plugins/ninja-compdb.py +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt/plugins/ninja.py +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt/plugins/nodejs.py +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt/plugins/paths.py +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt/plugins/python.py +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt/plugins/remote_execution/__init__.py +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt/plugins/remote_execution/administration_pb2.py +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt/plugins/remote_execution/administration_pb2_grpc.py +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt/plugins/remote_execution/log_pb2.py +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt/plugins/remote_execution/log_pb2_grpc.py +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt/plugins/remote_execution/scheduler_pb2.py +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt/plugins/remote_execution/scheduler_pb2_grpc.py +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt/plugins/remote_execution/worker_pb2.py +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt/plugins/remote_execution/worker_pb2_grpc.py +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt/plugins/report.py +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt/plugins/scheduler.py +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt/plugins/selfdeploy.py +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt/plugins/strings.py +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt/plugins/symlinks.py +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt/plugins/telemetry.py +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt/plugins/timeline.py +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt/plugins/volume.py +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt/plugins/yaml-ninja.py +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt/plugins/yamltask.py +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt/scheduler.py +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt/tasks.py +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt/templates/cxxexecutable.cmake.template +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt/templates/cxxlibrary.cmake.template +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt/templates/export.sh.template +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt/templates/timeline.html.template +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt/timer.py +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt/version_utils.py +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt/xmldom.py +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt.egg-info/SOURCES.txt +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt.egg-info/dependency_links.txt +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt.egg-info/entry_points.txt +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt.egg-info/requires.txt +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/jolt.egg-info/top_level.txt +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/setup.cfg +0 -0
- {jolt-0.9.390 → jolt-0.9.395}/setup.py +0 -0
|
@@ -375,7 +375,7 @@ def build(ctx, task, network, keep_going, default, local,
|
|
|
375
375
|
# If asked to force rebuild, taint all goal tasks
|
|
376
376
|
if force:
|
|
377
377
|
for goal in dag.goals:
|
|
378
|
-
goal.taint()
|
|
378
|
+
goal.get_extended_task().taint()
|
|
379
379
|
|
|
380
380
|
# Collect information about artifact presence before starting prune or build
|
|
381
381
|
acache.precheck(dag.persistent_artifacts, remote=not local)
|
|
@@ -3,7 +3,7 @@ import hashlib
|
|
|
3
3
|
import os
|
|
4
4
|
from pathlib import Path, PurePath
|
|
5
5
|
|
|
6
|
-
from jolt import config
|
|
6
|
+
from jolt import config as jolt_config
|
|
7
7
|
from jolt import inspection
|
|
8
8
|
from jolt import utils
|
|
9
9
|
from jolt import filesystem as fs
|
|
@@ -202,6 +202,71 @@ def source(name, obj=None):
|
|
|
202
202
|
return _decorate
|
|
203
203
|
|
|
204
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
|
+
|
|
205
270
|
class TaskClassSourceInfluence(HashInfluenceProvider):
|
|
206
271
|
name = "Source"
|
|
207
272
|
|
|
@@ -250,7 +315,7 @@ class CacheLocationInfluence(HashInfluenceProvider):
|
|
|
250
315
|
name = "Cache"
|
|
251
316
|
|
|
252
317
|
def get_influence(self, task):
|
|
253
|
-
return
|
|
318
|
+
return jolt_config.get_cachedir()
|
|
254
319
|
|
|
255
320
|
|
|
256
321
|
@HashInfluenceRegistry.Register
|
|
@@ -21,6 +21,7 @@ def linux_arch_to_container_platform(arch):
|
|
|
21
21
|
Returns:
|
|
22
22
|
- linux/amd64
|
|
23
23
|
- linux/arm
|
|
24
|
+
- linux/arm/v5
|
|
24
25
|
- linux/arm64
|
|
25
26
|
- linux/mips
|
|
26
27
|
- linux/ppc64
|
|
@@ -30,6 +31,7 @@ def linux_arch_to_container_platform(arch):
|
|
|
30
31
|
platforms = {
|
|
31
32
|
"arm": "linux/arm",
|
|
32
33
|
"arm64": "linux/arm64",
|
|
34
|
+
"armv5": "linux/arm/v5",
|
|
33
35
|
"mips": "linux/mips64le",
|
|
34
36
|
"powerpc": "linux/ppc64le",
|
|
35
37
|
"riscv": "linux/riscv64",
|
|
@@ -63,6 +65,7 @@ def linux_arch_to_debian_arch(arch):
|
|
|
63
65
|
"amd64": "amd64",
|
|
64
66
|
"arm": "armhf",
|
|
65
67
|
"arm64": "arm64",
|
|
68
|
+
"armv5": "armel",
|
|
66
69
|
"mips": "mips",
|
|
67
70
|
"powerpc": "ppc64el",
|
|
68
71
|
"riscv": "riscv64",
|
|
@@ -81,6 +84,7 @@ class ArchParameter(Parameter):
|
|
|
81
84
|
- amd64
|
|
82
85
|
- arm
|
|
83
86
|
- arm64
|
|
87
|
+
- armv5
|
|
84
88
|
- mips
|
|
85
89
|
- powerpc
|
|
86
90
|
- riscv
|
|
@@ -94,6 +98,7 @@ class ArchParameter(Parameter):
|
|
|
94
98
|
"amd64",
|
|
95
99
|
"arm",
|
|
96
100
|
"arm64",
|
|
101
|
+
"armv5",
|
|
97
102
|
"mips",
|
|
98
103
|
"powerpc",
|
|
99
104
|
"riscv",
|
|
@@ -111,7 +116,7 @@ class _ContainerImageBase(podman.ContainerImage):
|
|
|
111
116
|
""" Must be subclassed """
|
|
112
117
|
|
|
113
118
|
arch = ArchParameter()
|
|
114
|
-
""" Target architecture [amd64, arm, arm64, mips, powerpc, riscv, s390, x86] """
|
|
119
|
+
""" Target architecture [amd64, arm, arm64, armv5, mips, powerpc, riscv, s390, x86] """
|
|
115
120
|
|
|
116
121
|
@property
|
|
117
122
|
def target(self):
|
|
@@ -169,13 +174,14 @@ class DebianHostSdk(Task):
|
|
|
169
174
|
""" Must be subclassed """
|
|
170
175
|
|
|
171
176
|
arch = ArchParameter()
|
|
172
|
-
""" Target architecture [amd64, arm, arm64, mips, powerpc, riscv, s390, x86] """
|
|
177
|
+
""" Target architecture [amd64, arm, arm64, armv5, mips, powerpc, riscv, s390, x86] """
|
|
173
178
|
|
|
174
179
|
def publish(self, artifact, tools):
|
|
175
180
|
arch_to_cross_compile = {
|
|
176
181
|
"amd64": "x86_64-linux-gnu-",
|
|
177
182
|
"arm": "arm-linux-gnueabihf-",
|
|
178
183
|
"arm64": "aarch64-linux-gnu-",
|
|
184
|
+
"armv5": "arm-linux-gnueabi-",
|
|
179
185
|
"mips": "mips-linux-gnu-",
|
|
180
186
|
"powerpc": "powerpc64-linux-gnu-",
|
|
181
187
|
"riscv": "riscv64-linux-gnu-",
|
|
@@ -264,6 +270,47 @@ class Squashfs(_ContainerImageBase):
|
|
|
264
270
|
artifact.paths.squashfs = "squashfs/{_imagefile}.squashfs"
|
|
265
271
|
|
|
266
272
|
|
|
273
|
+
class Ext4(_ContainerImageBase):
|
|
274
|
+
"""
|
|
275
|
+
Builds an ext4 image using Podman.
|
|
276
|
+
|
|
277
|
+
The task builds a container image using the given Dockerfile and converts
|
|
278
|
+
the resulting container filesystem to an ext4 image which is published.
|
|
279
|
+
|
|
280
|
+
When building images for an architecture other than the host, the
|
|
281
|
+
binfmt-support package must be installed and configured to support running
|
|
282
|
+
applications for the target architecture. The package is available in most
|
|
283
|
+
Linux distributions.
|
|
284
|
+
|
|
285
|
+
The location of the resulting squashfs image is stored in the
|
|
286
|
+
``artifact.paths.squashfs`` artifact attribute.
|
|
287
|
+
"""
|
|
288
|
+
abstract = True
|
|
289
|
+
""" Must be subclassed """
|
|
290
|
+
|
|
291
|
+
output = ["ext4"]
|
|
292
|
+
|
|
293
|
+
size = None
|
|
294
|
+
"""
|
|
295
|
+
Size of the ext4 image.
|
|
296
|
+
|
|
297
|
+
Typically used to align the image size to a supported SD card size (power of two).
|
|
298
|
+
|
|
299
|
+
Supported units are 'K', 'M', 'G', 'T'.
|
|
300
|
+
"""
|
|
301
|
+
|
|
302
|
+
def run(self, deps, tools):
|
|
303
|
+
super().run(deps, tools)
|
|
304
|
+
if self.size:
|
|
305
|
+
with tools.cwd(tools.builddir("ext4")):
|
|
306
|
+
tools.run("fallocate -l {size} image.ext4")
|
|
307
|
+
|
|
308
|
+
def publish(self, artifact, tools):
|
|
309
|
+
super().publish(artifact, tools)
|
|
310
|
+
artifact.strings.arch = str(self.arch)
|
|
311
|
+
artifact.paths.ext4 = "ext4/{_imagefile}.ext4"
|
|
312
|
+
|
|
313
|
+
|
|
267
314
|
class _KernelBase(Task):
|
|
268
315
|
abstract = True
|
|
269
316
|
""" Must be subclassed """
|
|
@@ -483,6 +483,7 @@ class ContainerImage(Task):
|
|
|
483
483
|
- custom
|
|
484
484
|
- directory
|
|
485
485
|
- docker-archive
|
|
486
|
+
- ext4
|
|
486
487
|
- oci-archive
|
|
487
488
|
- oci-directory
|
|
488
489
|
- squashfs
|
|
@@ -516,6 +517,9 @@ class ContainerImage(Task):
|
|
|
516
517
|
The ``podman/login`` Jolt resource can be used for that purpose.
|
|
517
518
|
"""
|
|
518
519
|
|
|
520
|
+
size = None
|
|
521
|
+
""" Size of the image, e.g. "64M" (for certain output formats). """
|
|
522
|
+
|
|
519
523
|
squash = False
|
|
520
524
|
""" Squash image layers """
|
|
521
525
|
|
|
@@ -594,7 +598,7 @@ class ContainerImage(Task):
|
|
|
594
598
|
tools.run("podman image save --format={output} {} -o {}", self.tags[0], "image.tar")
|
|
595
599
|
if output == "oci-directory":
|
|
596
600
|
tools.run("podman image save --format=oci-dir {} -o {}", self.tags[0], "image.dir")
|
|
597
|
-
if output in ["archive", "cpio", "custom", "directory", "squashfs"]:
|
|
601
|
+
if output in ["archive", "cpio", "custom", "directory", "ext4", "squashfs"]:
|
|
598
602
|
ctr = tools.run("podman create {}", self.tags[0])
|
|
599
603
|
try:
|
|
600
604
|
with tools.runprefix("podman unshare "):
|
|
@@ -606,6 +610,9 @@ class ContainerImage(Task):
|
|
|
606
610
|
elif output == "cpio":
|
|
607
611
|
with tools.cwd(mount_path):
|
|
608
612
|
tools.run("find | podman unshare cpio -o -F {}/image.cpio -H newc", outdir, output_on_error=True)
|
|
613
|
+
elif output == "ext4":
|
|
614
|
+
assert self.size, "Size must be set for ext4 output"
|
|
615
|
+
tools.run("mke2fs -t ext4 -F -L rootfs -d {} image.ext4 {size}", mount_path, output_on_error=True)
|
|
609
616
|
elif output == "squashfs":
|
|
610
617
|
tools.run("mksquashfs {} image.squashfs", mount_path, output_on_error=True)
|
|
611
618
|
else:
|
|
@@ -660,6 +667,8 @@ class ContainerImage(Task):
|
|
|
660
667
|
self.publish_custom(artifact, tools)
|
|
661
668
|
if output in ["directory"]:
|
|
662
669
|
artifact.paths.rootfs = output
|
|
670
|
+
if output in ["ext4"]:
|
|
671
|
+
artifact.collect("image.ext4", output + "/{_imagefile}.ext4")
|
|
663
672
|
if output in ["squashfs"]:
|
|
664
673
|
artifact.collect("image.squashfs", output + "/{_imagefile}.squashfs")
|
|
665
674
|
|
|
@@ -1546,6 +1546,9 @@ class Tools(object):
|
|
|
1546
1546
|
refuses to terminate, it will be killed after an additional
|
|
1547
1547
|
10 seconds have passed. Default: None.
|
|
1548
1548
|
|
|
1549
|
+
Returns:
|
|
1550
|
+
str: stdout from command unless output=False
|
|
1551
|
+
|
|
1549
1552
|
Example:
|
|
1550
1553
|
|
|
1551
1554
|
.. code-block:: python
|
|
@@ -415,7 +415,16 @@ def delayed_signal(signum):
|
|
|
415
415
|
|
|
416
416
|
@contextlib.contextmanager
|
|
417
417
|
def delayed_interrupt():
|
|
418
|
-
|
|
418
|
+
if hasattr(signal, 'pthread_sigmask'):
|
|
419
|
+
try:
|
|
420
|
+
# Temporarily block the SIGINT signal
|
|
421
|
+
signal.pthread_sigmask(signal.SIG_BLOCK, {signal.SIGINT})
|
|
422
|
+
yield
|
|
423
|
+
finally:
|
|
424
|
+
# Unblock the SIGINT signal after the code block
|
|
425
|
+
signal.pthread_sigmask(signal.SIG_UNBLOCK, {signal.SIGINT})
|
|
426
|
+
else:
|
|
427
|
+
# Fallback for systems without pthread_sigmask
|
|
419
428
|
yield
|
|
420
429
|
|
|
421
430
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.9.395"
|
jolt-0.9.390/jolt/version.py
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "0.9.390"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|