diff options
author | Ahmad Sharif <asharif@chromium.org> | 2012-02-02 16:37:18 -0800 |
---|---|---|
committer | Ahmad Sharif <asharif@chromium.org> | 2012-02-02 16:37:18 -0800 |
commit | 0dcbc4b1714260820fd4b8d6536fbb05e139cc0f (patch) | |
tree | f8e4825ddcfc2a51f77a504dc371bc67d55fcd8f /crosperf/image_checksummer.py | |
parent | 70de27bdb5a05716befea67cdf72a87714fcc0da (diff) | |
download | toolchain-utils-0dcbc4b1714260820fd4b8d6536fbb05e139cc0f.tar.gz |
Synced repos to: 58208
Diffstat (limited to 'crosperf/image_checksummer.py')
-rw-r--r-- | crosperf/image_checksummer.py | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/crosperf/image_checksummer.py b/crosperf/image_checksummer.py new file mode 100644 index 00000000..f75dc944 --- /dev/null +++ b/crosperf/image_checksummer.py @@ -0,0 +1,49 @@ +#!/usr/bin/python + +# Copyright 2011 Google Inc. All Rights Reserved. + +import threading +from utils import logger +from utils.file_utils import FileUtils + + +class ImageChecksummer(object): + class PerImageChecksummer(object): + def __init__(self, filename): + self._lock = threading.Lock() + self.filename = filename + self._checksum = None + + def Checksum(self): + with self._lock: + if not self._checksum: + logger.GetLogger().LogOutput("Computing checksum for '%s'." % + self.filename) + self._checksum = FileUtils().Md5File(self.filename) + logger.GetLogger().LogOutput("Checksum is: %s" % self._checksum) + return self._checksum + + _instance = None + _lock = threading.Lock() + _per_image_checksummers = {} + + def __new__(cls, *args, **kwargs): + with cls._lock: + if not cls._instance: + cls._instance = super(ImageChecksummer, cls).__new__(cls, + *args, **kwargs) + return cls._instance + + def Checksum(self, filename): + with self._lock: + if filename not in self._per_image_checksummers: + self._per_image_checksummers[filename] = (ImageChecksummer. + PerImageChecksummer(filename)) + checksummer = self._per_image_checksummers[filename] + + try: + return checksummer.Checksum() + except Exception, e: + logger.GetLogger().LogError("Could not compute checksum of file '%s'." + % filename) + raise e |