X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=roundup%2Finstall_util.py;h=97c16f410ba78c34270424e467c2a66661a0dd26;hb=a843c3dcb4912b1c9554da696238c00c8670b8dc;hp=9477a4920ba0c1b6355e4cb6dca8b2ca27b7065e;hpb=08f82167fbccac6ddc506c32d3b88db6d79ed86f;p=roundup.git diff --git a/roundup/install_util.py b/roundup/install_util.py index 9477a49..97c16f4 100644 --- a/roundup/install_util.py +++ b/roundup/install_util.py @@ -15,39 +15,47 @@ # BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE, # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. # -# $Id: install_util.py,v 1.4 2001-11-12 23:14:40 jhermann Exp $ +# $Id: install_util.py,v 1.10 2004-02-11 23:55:08 richard Exp $ + +"""Support module to generate and check fingerprints of installed files. +""" +__docformat__ = 'restructuredtext' import os, sha, shutil -sgml_file_types = [".xml", ".ent", ".html", ".filter", ".index", ".item"] +# ".filter", ".index", ".item", ".newitem" are roundup-specific +sgml_file_types = [".xml", ".ent", ".html", ".filter", ".index", ".item", ".newitem"] 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] == "', '') - 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] @@ -71,13 +79,18 @@ class DigestFile: 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("\n" % (self.digest.hexdigest(),)) elif ext in hash_file_types: @@ -99,9 +112,9 @@ def copyDigestedFile(src, dst, copystat=1): dummy, ext = os.path.splitext(src) if ext not in digested_file_types: if copystat: - return shutil.copy2(srcname, dstname) + return shutil.copy2(src, dst) else: - return shutil.copyfile(srcname, dstname) + return shutil.copyfile(src, dst) fsrc = None fdst = None @@ -143,15 +156,4 @@ def test(): if __name__ == '__main__': test() -# -# $Log: not supported by cvs2svn $ -# 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