iBoot/tools/generate_debug_hashes.py

48 lines
1.5 KiB
Python

#!/usr/bin/python
import os
import hashlib
import hmac
import argparse
import sys
argparser = argparse.ArgumentParser(description='Generates obfuscated logging file IDs for iBoot release builds')
argparser.add_argument('--src', required=True, help='iBoot source tree')
args = argparser.parse_args()
id_file_map = {}
directory = args.src
base_hmac = hmac.new('obfuscation of filename for release build logging', '', hashlib.sha1)
for (path, dirnames, filenames) in os.walk(directory):
# strip the part of the pathname we supplied off the pathname
shortened_path = path[len(directory)+1:]
# don't iterate into paths we don't care about
thisdir = os.path.split(shortened_path)[1]
if thisdir in ['build', '.git', '.svn']:
del dirnames[:]
continue
for filename in filenames:
# ignore file types we don't care about
extension = os.path.splitext(filename)[1]
if extension not in ['.c', '.cpp', '.s', '.S', '.h']:
continue
full_path = os.path.join(shortened_path, filename)
current_hmac = base_hmac.copy()
current_hmac.update(full_path)
file_id = current_hmac.hexdigest()[:16]
if file_id in id_file_map and id_file_map[file_id] != full_path:
print >> sys.stderr, 'Error: Files "{}" and "{}" both have the same ID {}'.format(full_path, id_file_map[file_id], file_id)
sys.exit(1)
else:
id_file_map[file_id] = full_path
print '{}:{}'.format(full_path, file_id)