index ca57d61c1a7057d1f40ad7adf8e1c7db24f4184c..51becb0880fffc929ee93ee67a914d96392ababa 100644 (file)
--- a/roundup/install_util.py
+++ b/roundup/install_util.py
# BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE,
# SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
#
-# $Id: install_util.py,v 1.5 2001-11-12 23:17:38 jhermann Exp $
+# $Id: install_util.py,v 1.11 2006-01-25 03:11:43 richard Exp $
-import os, sha, shutil
+"""Support module to generate and check fingerprints of installed files.
+"""
+__docformat__ = 'restructuredtext'
-sgml_file_types = [".xml", ".ent", ".html", ".filter", ".index", ".item"]
-hash_file_types = [".py", ".sh", ".conf", ".cgi", '']
+import os, shutil
+from roundup.anypy.hashlib_ import sha1
+
+sgml_file_types = [".xml", ".ent", ".html"]
+hash_file_types = [".py", ".sh", ".conf", ".cgi"]
slast_file_types = [".css"]
digested_file_types = sgml_file_types + hash_file_types + slast_file_types
-
-def checkDigest(filename):
- """Read file, check for valid fingerprint, return TRUE if ok"""
- # open and read file
- inp = open(filename, "r")
- lines = inp.readlines()
- inp.close()
-
+def extractFingerprint(lines):
# get fingerprint from last line
- if lines[-1][:6] == "#SHA: ":
+ if lines[-1].startswith("#SHA: "):
# handle .py/.sh comment
- fingerprint = lines[-1][6:].strip()
- elif lines[-1][:10] == "<!-- SHA: ":
+ return lines[-1][6:].strip()
+ elif lines[-1].startswith("<!-- SHA: "):
# handle xml/html files
fingerprint = lines[-1][10:]
fingerprint = fingerprint.replace('-->', '')
- fingerprint = fingerprint.strip()
- elif lines[-1][:8] == "/* SHA: ":
+ return fingerprint.strip()
+ elif lines[-1].startswith("/* SHA: "):
# handle css files
fingerprint = lines[-1][8:]
fingerprint = fingerprint.replace('*/', '')
- fingerprint = fingerprint.strip()
- else:
+ return fingerprint.strip()
+ return None
+
+def checkDigest(filename):
+ """Read file, check for valid fingerprint, return TRUE if ok"""
+ # open and read file
+ inp = open(filename, "r")
+ lines = inp.readlines()
+ inp.close()
+
+ fingerprint = extractFingerprint(lines)
+ if fingerprint is None:
return 0
del lines[-1]
# calculate current digest
- digest = sha.new()
+ digest = sha1()
for line in lines:
digest.update(line)
def __init__(self, filename):
self.filename = filename
- self.digest = sha.new()
+ self.digest = sha1()
self.file = open(self.filename, "w")
def write(self, data):
+ lines = data.splitlines()
+ # if the file is coming from an installed tracker being used as a
+ # template, then we will want to re-calculate the SHA
+ fingerprint = extractFingerprint(lines)
+ if fingerprint is not None:
+ data = '\n'.join(lines[:-1]) + '\n'
self.file.write(data)
self.digest.update(data)
def close(self):
file, ext = os.path.splitext(self.filename)
- # ".filter", ".index", ".item" are roundup-specific
if ext in sgml_file_types:
self.file.write("<!-- SHA: %s -->\n" % (self.digest.hexdigest(),))
elif ext in hash_file_types:
if __name__ == '__main__':
test()
-#
-# $Log: not supported by cvs2svn $
-# Revision 1.4 2001/11/12 23:14:40 jhermann
-# Copy function, and proper handling of unknown file types
-#
-# Revision 1.3 2001/11/12 22:38:48 richard
-# bleah typo
-#
-# Revision 1.2 2001/11/12 22:37:13 richard
-# Handle all the various file formats in roundup
-#
-# Revision 1.1 2001/11/12 22:26:32 jhermann
-# Added install utils (digest calculation)
-#
-
+# vim: set filetype=python ts=4 sw=4 et si