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():
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(
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()