Loading core/Makefile +4 −2 Original line number Diff line number Diff line Loading @@ -1092,7 +1092,8 @@ $(INSTALLED_FILES_FILE): $(FULL_SYSTEMIMAGE_DEPS) @echo Installed file list: $@ @mkdir -p $(dir $@) @rm -f $@ $(hide) build/tools/fileslist.py $(TARGET_OUT) > $@ $(hide) build/tools/fileslist.py $(TARGET_OUT) > $(@:.txt=.json) $(hide) build/tools/fileslist_util.py -c $(@:.txt=.json) > $@ .PHONY: installed-file-list installed-file-list: $(INSTALLED_FILES_FILE) Loading Loading @@ -1495,7 +1496,8 @@ $(INSTALLED_FILES_FILE_VENDOR) : $(INTERNAL_VENDORIMAGE_FILES) @echo Installed file list: $@ @mkdir -p $(dir $@) @rm -f $@ $(hide) build/tools/fileslist.py $(TARGET_OUT_VENDOR) > $@ $(hide) build/tools/fileslist.py $(TARGET_OUT_VENDOR) > $(@:.txt=.json) $(hide) build/tools/fileslist_util.py -c $(@:.txt=.json) > $@ vendorimage_intermediates := \ $(call intermediates-dir-for,PACKAGING,vendor) Loading tools/fileslist.py +21 −8 Original line number Diff line number Diff line Loading @@ -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:] Loading @@ -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) tools/fileslist_util.py 0 → 100755 +68 −0 Original line number Diff line number Diff line #!/usr/bin/env python # # Copyright (C) 2016 The Android Open Source Project # # Licensed under the Apache License, Version 2.0 (the 'License'); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an 'AS IS' BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # import getopt, json, sys def PrintFileNames(path): with open(path) as jf: data = json.load(jf) for line in data: print(line["Name"]) def PrintCanonicalList(path): with open(path) as jf: data = json.load(jf) for line in data: print "{0:12d} {1}".format(line["Size"], line["Name"]) def PrintUsage(name): print(""" Usage: %s -[nc] json_files_list -n produces list of files only -c produces classic installed-files.txt """ % (name)) def main(argv): try: opts, args = getopt.getopt(argv[1:], "nc", "") except getopt.GetoptError, err: print(err) PrintUsage(argv[0]) sys.exit(2) if len(opts) == 0: print("No conversion option specified") PrintUsage(argv[0]) sys.exit(2) if len(args) == 0: print("No input file specified") PrintUsage(argv[0]) sys.exit(2) for o, a in opts: if o == ("-n"): PrintFileNames(args[0]) sys.exit() elif o == ("-c"): PrintCanonicalList(args[0]) sys.exit() else: assert False, "Unsupported option" if __name__ == '__main__': main(sys.argv) Loading
core/Makefile +4 −2 Original line number Diff line number Diff line Loading @@ -1092,7 +1092,8 @@ $(INSTALLED_FILES_FILE): $(FULL_SYSTEMIMAGE_DEPS) @echo Installed file list: $@ @mkdir -p $(dir $@) @rm -f $@ $(hide) build/tools/fileslist.py $(TARGET_OUT) > $@ $(hide) build/tools/fileslist.py $(TARGET_OUT) > $(@:.txt=.json) $(hide) build/tools/fileslist_util.py -c $(@:.txt=.json) > $@ .PHONY: installed-file-list installed-file-list: $(INSTALLED_FILES_FILE) Loading Loading @@ -1495,7 +1496,8 @@ $(INSTALLED_FILES_FILE_VENDOR) : $(INTERNAL_VENDORIMAGE_FILES) @echo Installed file list: $@ @mkdir -p $(dir $@) @rm -f $@ $(hide) build/tools/fileslist.py $(TARGET_OUT_VENDOR) > $@ $(hide) build/tools/fileslist.py $(TARGET_OUT_VENDOR) > $(@:.txt=.json) $(hide) build/tools/fileslist_util.py -c $(@:.txt=.json) > $@ vendorimage_intermediates := \ $(call intermediates-dir-for,PACKAGING,vendor) Loading
tools/fileslist.py +21 −8 Original line number Diff line number Diff line Loading @@ -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:] Loading @@ -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)
tools/fileslist_util.py 0 → 100755 +68 −0 Original line number Diff line number Diff line #!/usr/bin/env python # # Copyright (C) 2016 The Android Open Source Project # # Licensed under the Apache License, Version 2.0 (the 'License'); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an 'AS IS' BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # import getopt, json, sys def PrintFileNames(path): with open(path) as jf: data = json.load(jf) for line in data: print(line["Name"]) def PrintCanonicalList(path): with open(path) as jf: data = json.load(jf) for line in data: print "{0:12d} {1}".format(line["Size"], line["Name"]) def PrintUsage(name): print(""" Usage: %s -[nc] json_files_list -n produces list of files only -c produces classic installed-files.txt """ % (name)) def main(argv): try: opts, args = getopt.getopt(argv[1:], "nc", "") except getopt.GetoptError, err: print(err) PrintUsage(argv[0]) sys.exit(2) if len(opts) == 0: print("No conversion option specified") PrintUsage(argv[0]) sys.exit(2) if len(args) == 0: print("No input file specified") PrintUsage(argv[0]) sys.exit(2) for o, a in opts: if o == ("-n"): PrintFileNames(args[0]) sys.exit() elif o == ("-c"): PrintCanonicalList(args[0]) sys.exit() else: assert False, "Unsupported option" if __name__ == '__main__': main(sys.argv)