diff options
author | Lars Wirzenius <liw@liw.fi> | 2011-06-11 19:50:23 +0100 |
---|---|---|
committer | Lars Wirzenius <liw@liw.fi> | 2011-06-11 19:50:23 +0100 |
commit | 6dee09fe1b6bf92ae8bd190edc014df84fea19cb (patch) | |
tree | 15915ef0c0b168e95659f0f6338964915eaac6fb /summainlib.py | |
parent | 7fcf5e9d351868f0af460d6a2fe619ece5c3e5c8 (diff) | |
download | summain-6dee09fe1b6bf92ae8bd190edc014df84fea19cb.tar.gz |
Refactor things so that checksumming happens in one place only.
DRY.
Diffstat (limited to 'summainlib.py')
-rw-r--r-- | summainlib.py | 36 |
1 files changed, 13 insertions, 23 deletions
diff --git a/summainlib.py b/summainlib.py index 347d525..3cc92d5 100644 --- a/summainlib.py +++ b/summainlib.py @@ -208,12 +208,10 @@ class FilesystemObject(object): return self.lookup_group(self._stat_result.st_gid) def _compute_md5(self): - if stat.S_ISREG(self._stat_result.st_mode): - return self.compute_md5(self._filename, self._md5) + return self.compute_checksum(self._filename, self._md5) def _compute_sha1(self): - if stat.S_ISREG(self._stat_result.st_mode): - return self.compute_sha1(self._filename, self._sha1) + return self.compute_checksum(self._filename, self._sha1) def _compute_target(self): if stat.S_ISLNK(self._stat_result.st_mode): @@ -232,25 +230,17 @@ class FilesystemObject(object): def lookup_group(self, gid): return grp.getgrgid(gid).gr_name - def compute_md5(self, filename, md5): - f = self.open_file(filename) - while True: - data = f.read(64*1024) # 64 KiB seems reasonable. - if not data: - break - md5.update(data) - f.close() - return md5.hexdigest() - - def compute_sha1(self, filename, sha1): - f = self.open_file(filename) - while True: - data = f.read(64*1024) # 64 KiB seems reasonable. - if not data: - break - sha1.update(data) - f.close() - return sha1.hexdigest() + def compute_checksum(self, filename, checksummer): + if stat.S_ISREG(self._stat_result.st_mode): + with self.open_file(filename) as f: + while True: + data = f.read(64*1024) # 64 KiB seems reasonable. + if not data: + break + checksummer.update(data) + return checksummer.hexdigest() + else: + return '' def _normalize_key(self, key): key = key.lower() |