diff options
author | Joe Guo <joeg@catalyst.net.nz> | 2019-03-20 12:26:48 +1300 |
---|---|---|
committer | Stefan Metzmacher <metze@samba.org> | 2019-04-18 12:09:34 +0000 |
commit | 37676409926a89bd83dd3b916144dd9aaae151f3 (patch) | |
tree | 3ef24309c11cfc0043a8e6bc0a60301a675b3acf /bootstrap/template.py | |
parent | da0567e00b113baccad7f41f9dab5dc82cc7f996 (diff) | |
download | samba-37676409926a89bd83dd3b916144dd9aaae151f3.tar.gz |
bootstrap/template.py: add sha1sum support
1. calc sha1sum for files under bootstrap/ (except README.md
and *.pyc files) after render and write to bootstrap/sha1sum.txt file.
2. add a new option to print sha1sum, so we can use it to compare in ci
Pair-Programmed-With: Stefan Metzmacher <metze@samba.org>
Signed-off-by: Joe Guo <joeg@catalyst.net.nz>
Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Andreas Schneider <asn@samba.org>
Diffstat (limited to 'bootstrap/template.py')
-rwxr-xr-x | bootstrap/template.py | 70 |
1 files changed, 69 insertions, 1 deletions
diff --git a/bootstrap/template.py b/bootstrap/template.py index 1e101c8f0e0..e12e2e0dc82 100755 --- a/bootstrap/template.py +++ b/bootstrap/template.py @@ -25,14 +25,65 @@ Author: Joe Guo <joeg@catalyst.net.nz> import io import os +import hashlib import logging import argparse from config import DISTS, VAGRANTFILE, OUT +HERE = os.path.abspath(os.path.dirname(__file__)) +SHA1SUM_FILE_PATH = os.path.join(HERE, 'sha1sum.txt') +README_FILE_PATH = os.path.join(HERE, 'READMD.md') + logging.basicConfig(level='INFO') log = logging.getLogger(__file__) +def get_files(path): + """Get all files recursively in path as a list""" + filepaths = [] + for root, dirnames, filenames in os.walk(path): + for filename in filenames: + filepath = os.path.join(root, filename) + filepaths.append(filepath) + return filepaths + + +def get_sha1sum(debug=False): + """Get sha1sum for dists + .gitlab-ci.yml""" + filepaths = get_files(HERE) + m = hashlib.sha1() + i = 0 + for filepath in sorted(list(filepaths)): + _filepath = os.path.relpath(filepath) + i += 1 + if filepath == SHA1SUM_FILE_PATH: + d = "skip " + if debug: + print("%s: %s: %s" % (i, d, _filepath)) + continue + if filepath == README_FILE_PATH: + d = "skip " + if debug: + print("%s: %s: %s" % (i, d, _filepath)) + continue + if filepath.endswith('.pyc'): + d = "skip " + if debug: + print("%s: %s: %s" % (i, d, _filepath)) + continue + with io.open(filepath, mode='rb') as _file: + _bytes = _file.read() + + m1 = hashlib.sha1() + m1.update(_bytes) + d = m1.hexdigest() + if debug: + print("%s: %s: %s" % (i, d, _filepath)) + + m.update(_bytes) + return m.hexdigest() + + def render(dists): """Render files for all dists""" for dist, config in dists.items(): @@ -52,6 +103,12 @@ def render(dists): with io.open(path, mode='wt', encoding='utf8') as fp: fp.write(VAGRANTFILE) + # always calc sha1sum after render + sha1sum = get_sha1sum() + log.info('write sha1sum to %s: %s', SHA1SUM_FILE_PATH, sha1sum) + with io.open(SHA1SUM_FILE_PATH, mode='wt', encoding='utf8') as fp: + fp.write(sha1sum + "\n") + def main(): parser = argparse.ArgumentParser( @@ -62,11 +119,22 @@ def main(): parser.add_argument( '-r', '--render', action='store_true', help='Render templates') + parser.add_argument( + '-s', '--sha1sum', action='store_true', help='Print sha1sum') + parser.add_argument( + '-d', '--debug', action='store_true', help='Debug sha1sum') + args = parser.parse_args() + need_help = True if args.render: render(DISTS) - else: + need_help = False + if args.sha1sum: + # we will use the output to check sha1sum in ci + print(get_sha1sum(args.debug)) + need_help = False + if need_help: parser.print_help() |