Code

- fix some format errors in italian translation
[roundup.git] / roundup / install_util.py
index 8bea4cf76d5f866c71d362aa301f054301deb73d..51becb0880fffc929ee93ee67a914d96392ababa 100644 (file)
 # BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE,
 # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
 # 
-# $Id: install_util.py,v 1.6 2001-11-22 15:46:42 jhermann Exp $
+# $Id: install_util.py,v 1.11 2006-01-25 03:11:43 richard Exp $
 
-__doc__ = """
-Support module to generate and check fingerprints of installed files.
+"""Support module to generate and check fingerprints of installed files.
 """
+__docformat__ = 'restructuredtext'
 
-import os, sha, shutil
+import os, shutil
+from roundup.anypy.hashlib_ import sha1
 
-sgml_file_types = [".xml", ".ent", ".html", ".filter", ".index", ".item"]
-hash_file_types = [".py", ".sh", ".conf", ".cgi", '']
+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)
 
@@ -71,17 +75,22 @@ class DigestFile:
 
     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:
@@ -147,21 +156,4 @@ def test():
 if __name__ == '__main__':
     test()
 
-#
-# $Log: not supported by cvs2svn $
-# Revision 1.5  2001/11/12 23:17:38  jhermann
-# Code using copyDigestedFile() that passes unit tests
-#
-# 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