# -*- coding:utf-8;mode:python;mode:font-lock -*- ## # Example configuration for enforcer. ## # Copyright (c) 2005 Wilfredo Sanchez Vega . # All rights reserved. # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL # WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED # WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE # AUTHORS BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL # DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR # PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. ## import os import re def cxx_comment_start(line): # FIXME: This doesn't work correctly if // is quoted (eg. in a string). return line.find("//") def verify_file_modified(filename): """ Here we verify files which may not meet our requirements. Any failure, even if not due to the specific changes in the commit will raise an error. """ ext = os.path.splitext(filename)[1] # # Find WODebug=true in WOD files # # Test cases: # r19866: # if ext == ".wod": wod_file = open_file(filename) try: regex_wodebug = re.compile("WODebug\s*=\s*(true|yes|1)") for line in wod_file: if line[-1] == "\n": line = line[:-1] # Zap trailing newline comment_start = cxx_comment_start(line) if comment_start != -1: line = line[:comment_start] if regex_wodebug.match(line): raise ValueError("WODebug enabled in WOD file %r" % filename) finally: wod_file.close() def verify_line_added(filename, line): """ Here we verify new lines of code which may not meet our requirements. Code not changed as part of this commit is not verified. """ ext = os.path.splitext(filename)[1] # # Find NSLog calls and unauthorized println calls in Java code # # Test cases: # r10814: unauthorized println calls # r25692: NSLog calls # r25729: authorized println calls # if ext == ".java": comment_start = cxx_comment_start(line) if comment_start == -1: authorized = False code = line else: if line[comment_start:].startswith("// (authorized)"): authorized = True else: authorized = False code = line[:comment_start] # Strip out comment if code.find("NSLog") != -1: raise ValueError("NSLog call found in Java code file %r: %s" % (filename, line.strip())) if not authorized and code.find("println") != -1: raise ValueError("unauthorized println call found in Java code file %r: %s" % (filename, line.strip())) def verify_property_line_added(filename, property, line): """ Here we verify new lines in a property which may not meet our requirements. Lines not changed as part of this commit are not verified. """ # # Don't commit a file which has the x-no-commit property set on it. # if property == "x-no-commit": raise ValueError("x-no-commit property is set on file %r: %s" % (filename, line))