build: tools: Add json collection of installed files with hashes.

Adds installed-files.json in addition to installed-files.txt
Further sorts the file list to be ordered within the same size bucket.

Test: manual, cross-checked checksums with sha256sum utility
      checked build outputs.

Bug: 19988819
Change-Id: Ifb632eb4df65ec48645c8f93e36bae44ccc52ba8
Signed-off-by: Sasha Levitskiy <sanek@google.com>
This commit is contained in:
Sasha Levitskiy
2016-10-10 22:48:10 -07:00
parent 76b3f7a725
commit 83561d1f98
3 changed files with 95 additions and 11 deletions

View File

@@ -15,12 +15,24 @@
# limitations under the License.
#
import operator, os, sys
import json, hashlib, operator, os, sys
def get_file_size(path):
st = os.lstat(path)
return st.st_size;
def get_file_digest(path):
if os.path.isfile(path) == False:
return "----------------------------------------------------------------"
digest = hashlib.sha256()
with open(path, 'rb') as f:
while True:
buf = f.read(1024*1024)
if not buf:
break
digest.update(buf)
return digest.hexdigest();
def main(argv):
output = []
roots = argv[1:]
@@ -30,16 +42,17 @@ def main(argv):
relative = dir[base:]
for f in files:
try:
row = (
get_file_size(os.path.sep.join((dir, f))),
os.path.sep.join((relative, f)),
)
path = os.path.sep.join((dir, f))
row = {
"Size": get_file_size(path),
"Name": os.path.sep.join((relative, f)),
"SHA256": get_file_digest(path),
}
output.append(row)
except os.error:
pass
output.sort(key=operator.itemgetter(0), reverse=True)
for row in output:
print "%12d %s" % row
output.sort(key=operator.itemgetter("Size", "Name"), reverse=True)
print json.dumps(output, indent=2, separators=(',',': '))
if __name__ == '__main__':
main(sys.argv)