# This file is part of Rubber and thus covered by the GPL
# (c) Emmanuel Beffara, 2002--2006
"""
This module contains utility functions and classes used by the main system and
by the modules for various tasks.
"""
try:
import hashlib
except ImportError:
# Fallback for python 2.4:
import md5 as hashlib
import os
from msg import _, msg
def md5_file(fname):
"""
Compute the MD5 sum of a given file.
"""
m = hashlib.md5()
file = open(fname)
for line in file.readlines():
m.update(line)
file.close()
return m.digest()
class Watcher:
"""
Watch for any changes of the files to survey, by checking the file MD5 sums.
"""
def __init__(self):
self.files = {}
def watch(self, file):
if os.path.exists(file):
self.files[file] = md5_file(file)
else:
self.files[file] = None
def update(self):
"""
Update the MD5 sums of all files watched, and return the name of one
of the files that changed, or None of they didn't change.
"""
changed = []
for file in self.files.keys():
if os.path.exists(file):
new = md5_file(file)
if self.files[file] != new:
msg.debug(_("%s MD5 checksum changed") % \
os.path.basename(file))
changed.append(file)
self.files[file] = new
return changed