def test_file_signature(self): file1 = os.path.join(autoconfig.data_directory, "decl_cache_file1.txt") file1_dup = os.path.join(autoconfig.data_directory, "decl_cache_file1_duplicate.txt") file2 = os.path.join(autoconfig.data_directory, "decl_cache_file2.txt") sig1 = declarations_cache.file_signature(file1) sig1_dup = declarations_cache.file_signature(file1_dup) sig2 = declarations_cache.file_signature(file2) self.assert_(sig1 == sig1_dup) self.assert_(sig1 != sig2)
def test_file_signature(self): file1 = os.path.join(autoconfig.data_directory, 'decl_cache_file1.txt') file1_dup = os.path.join(autoconfig.data_directory, 'decl_cache_file1_duplicate.txt') file2 = os.path.join(autoconfig.data_directory, 'decl_cache_file2.txt') sig1 = declarations_cache.file_signature(file1) sig1_dup = declarations_cache.file_signature(file1_dup) sig2 = declarations_cache.file_signature(file2) self.assertTrue(sig1 == sig1_dup) self.assertTrue(sig1 != sig2)
def getCachedTree(self, sourceFiles, configSig): """ Attempt to read a cache decl tree from the cache. sourceFiles - A list of source files for the module builder configuration - A pygccxml configuration object being used. returns: None if failed sigs or none found. """ ret_val = None if os.path.exists(self.cacheFileName): src_and_cfg_digest = self.computeSrcAndCfgDigest(sourceFiles, configSig) self.logger.info("Attempting to load module cache file: %s"%self.cacheFileName) cache_file = file(self.cacheFileName, 'rb') (cached_src_and_cfg_digest, includes_digest, includes) = cPickle.load(cache_file) if (cached_src_and_cfg_digest == src_and_cfg_digest): inc_sig = md5.new() for f in [ x for x in includes if os.path.isfile(x)]: inc_sig.update(file_signature(f)) if inc_sig.hexdigest() == includes_digest: load_start_time = time.time() self.logger.info(" Signatures matched, loading data.") ret_val = cPickle.load(cache_file) self._module_builder_t__code_creator = None self.logger.info(" Loading complete. %ss"%(time.time()-load_start_time)) else: self.logger.info(" Sig mis-match: Implicit include files changes.") else: self.logger.info(" Sig mis-match: Source files or configuration changed.") cache_file.close() return ret_val
def dumpCachedTree(self, sourceFiles, configSig, declTree): self.logger.info("Writing module cache... ") cache_file = file(self.cacheFileName,'wb') src_and_cfg_digest = self.computeSrcAndCfgDigest(sourceFiles, configSig) decl_files = [ f for f in decls_package.declaration_files(declTree) if os.path.isfile(f)] inc_sig = md5.new() for f in decl_files: inc_sig.update(file_signature(f)) cPickle.dump( (src_and_cfg_digest, inc_sig.hexdigest(), decl_files), cache_file, cPickle.HIGHEST_PROTOCOL) cPickle.dump(declTree, cache_file, cPickle.HIGHEST_PROTOCOL) cache_file.close() self.logger.info("Complete.")
def computeSrcAndCfgDigest(self, srcFiles, configSig): sig = md5.new() sig.update(configSig) for f in srcFiles: sig.update(file_signature(f)) return sig.hexdigest()