| # Copyright 2014 The Chromium Authors. All rights reserved. | |
| # Use of this source code is governed by a BSD-style license that can be | |
| # found in the LICENSE file. | |
| import logging | |
| # pylint: disable=E0611 | |
| from hashlib import sha256 | |
| from mopy.memoize import memoize | |
| _logging = logging.getLogger() | |
| @memoize | |
| def file_hash(filename): | |
| """Returns a string representing the hash of the given file.""" | |
| _logging.debug("Hashing %s ...", filename) | |
| with open(filename, mode='rb') as f: | |
| m = sha256() | |
| while True: | |
| block = f.read(4096) | |
| if not block: | |
| break | |
| m.update(block) | |
| _logging.debug(" => %s", m.hexdigest()) | |
| return m.hexdigest() |