summaryrefslogtreecommitdiff
path: root/summainlib.py
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2011-06-11 19:50:23 +0100
committerLars Wirzenius <liw@liw.fi>2011-06-11 19:50:23 +0100
commit6dee09fe1b6bf92ae8bd190edc014df84fea19cb (patch)
tree15915ef0c0b168e95659f0f6338964915eaac6fb /summainlib.py
parent7fcf5e9d351868f0af460d6a2fe619ece5c3e5c8 (diff)
downloadsummain-6dee09fe1b6bf92ae8bd190edc014df84fea19cb.tar.gz
Refactor things so that checksumming happens in one place only.
DRY.
Diffstat (limited to 'summainlib.py')
-rw-r--r--summainlib.py36
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()