Add "gooftool log_source_hashes" command.
BUG=chrome-os-partner:30847
TEST=Unit tests, `gooftool log_source_hashes`
Change-Id: I21c4ebb1ff44144cff1ddbf3fbcc0c4c7039d17d
Reviewed-on: https://chromium-review.googlesource.com/209870
Tested-by: Jon Salz <jsalz@chromium.org>
Reviewed-by: Bowgo Tsai <bowgotsai@chromium.org>
Reviewed-by: Hung-Te Lin <hungte@chromium.org>
Commit-Queue: Jon Salz <jsalz@chromium.org>
diff --git a/py/gooftool/gooftool.py b/py/gooftool/gooftool.py
index 6c88e7c..4a784c1 100755
--- a/py/gooftool/gooftool.py
+++ b/py/gooftool/gooftool.py
@@ -13,6 +13,7 @@
"""
import collections
+import hashlib
import logging
import os
import pipes
@@ -42,7 +43,9 @@
from cros.factory.hwdb import hwid_tool
from cros.factory.hwid import common
from cros.factory.hwid import hwid_utils
+from cros.factory.test import factory
from cros.factory.test.factory import FACTORY_LOG_PATH, DEVICE_STATEFUL_PATH
+from cros.factory.utils import file_utils
from cros.factory.utils.process_utils import Spawn
from cros.factory.privacy import FilterDict
@@ -689,6 +692,21 @@
else:
logging.warning('No stateful files at %s', tar_file)
+
+@Command('log_source_hashes')
+def LogSourceHashes(options): # pylint: disable=W0613
+ """Logs hashes of source files in the factory toolkit."""
+ event_log.Log(
+ 'source_hashes',
+ # Log hash function used, just in case we ever want to change it
+ hash_function='sha1prefix',
+ hashes=file_utils.HashFiles(
+ os.path.join(factory.FACTORY_PATH, 'py'),
+ lambda path: path.endswith('.py'),
+ # Use first 4 bytes of SHA1
+ hash_function=lambda data: hashlib.sha1(data).hexdigest()[0:8]))
+
+
@Command('log_system_details')
def LogSystemDetails(options): # pylint: disable=W0613
"""Write miscellaneous system details to the event log."""
@@ -823,6 +841,7 @@
next boot.
"""
Verify(options)
+ LogSourceHashes(options)
UntarStatefulFiles(options)
SetFirmwareBitmapLocale(options)
ClearGBBFlags(options)