blob: 39118266381efbe893c78dfaca959a7c82167a05 [file] [log] [blame]
# -*- coding:utf-8;mode:python;mode:font-lock -*-
##
# Example configuration for enforcer.
##
# Copyright (c) 2005 Wilfredo Sanchez Vega <wsanchez@wsanchez.net>.
# 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))