1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
|
# -*- coding: ascii -*-
#
# Copyright 2007 - 2025
# Andr\xe9 Malo or his licensors, as applicable
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""
Dist building code
~~~~~~~~~~~~~~~~~~
"""
import os as _os
# pylint: disable = import-outside-toplevel
def compress(ctx, filename, cmd, ext):
"""Compress tar file"""
prog = ctx.shell.frompath(cmd)
if prog is None:
return None
ctx.run(
"%s -c9 <%s >%s"
% (ctx.q(prog), ctx.q(filename), ctx.q(filename + ext)),
echo=True,
)
return filename + ext
def digest(ctx, files, digestname):
"""Make digest file"""
import hashlib as _hashlib
result = {}
for filename in files:
basename = _os.path.basename(filename)
result[basename] = []
for method in ("md5", "sha1", "sha256"):
sign = getattr(_hashlib, method)()
with open(filename, "rb") as fp:
for block in iter(lambda fp=fp: fp.read(8192), b""):
sign.update(block)
result[basename].append(sign.hexdigest())
with open(digestname, "wb") as fp:
fp.write(b"\n# The file contains MD5, SHA1 and SHA256 digests\n")
fp.write(b"# Check archive integrity with, e.g. md5sum -c\n")
fp.write(b"# Check digest file integrity with PGP\n\n")
for basename, digests in sorted(result.items()):
for sign in digests:
fp.write(("%s *%s\n" % (sign, basename)).encode("utf-8"))
_sign_inline(ctx, digestname)
def _sign_inline(ctx, filename):
"""Sign file (inline)"""
gpg = ctx.shell.frompath("gpg")
ctx.run(
ctx.c(
"""
%s --output %s --clearsign -- %s
""",
gpg,
filename + ".signed",
filename,
),
echo=True,
)
_os.rename(filename + ".signed", filename)
def copy_changes(ctx):
"""Copy changelog"""
version = ctx.run("python setup.py --version", hide=True).stdout.strip()
from_ = "CHANGES"
to_ = "dist/CHANGES-%s" % (version,)
ctx.shell.cp(from_, to_)
|