File: _dist.py

package info (click to toggle)
python-rcssmin 1%3A1.1.2-4
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 3,196 kB
  • sloc: python: 2,379; ansic: 1,216; sh: 110; makefile: 20
file content (64 lines) | stat: -rw-r--r-- 1,852 bytes parent folder | download | duplicates (4)
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
# -*- encoding: ascii -*-
"""
Dist building code
~~~~~~~~~~~~~~~~~~

"""

import os as _os


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_ = 'docs/CHANGES'
    to_ = 'dist/CHANGES-%s' % (version,)
    ctx.shell.cp(from_, to_)