48 lines
1.5 KiB
Python
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)
|