summaryrefslogtreecommitdiff
path: root/summainlib.py
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2011-06-11 19:44:54 +0100
committerLars Wirzenius <liw@liw.fi>2011-06-11 19:44:54 +0100
commit7fcf5e9d351868f0af460d6a2fe619ece5c3e5c8 (patch)
tree28f83350bae8a6475d813e2e7929a9326ac2e420 /summainlib.py
parent1ab89da3a33a218ee07743a2e3a996cf0b34e71f (diff)
downloadsummain-7fcf5e9d351868f0af460d6a2fe619ece5c3e5c8.tar.gz
Implement MD5 header.
Diffstat (limited to 'summainlib.py')
-rw-r--r--summainlib.py18
1 files changed, 16 insertions, 2 deletions
diff --git a/summainlib.py b/summainlib.py
index 141eacc..347d525 100644
--- a/summainlib.py
+++ b/summainlib.py
@@ -207,7 +207,11 @@ class FilesystemObject(object):
def _compute_group(self):
return self.lookup_group(self._stat_result.st_gid)
- def _compute_sha_1(self):
+ def _compute_md5(self):
+ if stat.S_ISREG(self._stat_result.st_mode):
+ return self.compute_md5(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)
@@ -228,6 +232,16 @@ 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:
@@ -287,7 +301,7 @@ class FilesystemObject(object):
name = self.relative_path(root)
keys = ['Mtime', 'Mode', 'Ino', 'Dev', 'Nlink', 'Size',
- 'Uid', 'Username', 'Gid', 'Group', 'Sha-1', 'Target']
+ 'Uid', 'Username', 'Gid', 'Group', 'Sha1', 'Target']
values = [('Name', name)]
values += [(k, self[k]) for k in keys if self[k] != '']
return ''.join('%s: %s\n' % (k, v) for k, v in values if v != '')