[gnome-chess] Add a pre-commit hook to check coding guidelines
- From: Sahil Sareen <ssareen src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-chess] Add a pre-commit hook to check coding guidelines
- Date: Tue, 10 Mar 2015 17:06:55 +0000 (UTC)
commit 8be49c2b4d1b2be921071753cb7697fcfaa77653
Author: Sahil Sareen <sahil sareen hotmail com>
Date: Tue Mar 10 22:36:02 2015 +0530
Add a pre-commit hook to check coding guidelines
Add scripts/pre-commit
Modify autogen.sh
autogen.sh | 3 +
scripts/pre-commit | 134 ++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 137 insertions(+), 0 deletions(-)
---
diff --git a/autogen.sh b/autogen.sh
index 5fe9c50..7d6633b 100755
--- a/autogen.sh
+++ b/autogen.sh
@@ -11,4 +11,7 @@ REQUIRED_YELP_TOOLS_VERSION=3.1.1
REQUIRED_GETTEXT_VERSION=0.12
REQUIRED_INTLTOOL_VERSION=0.40.4
+cp ./scripts/pre-commit ./.git/hooks/
+chmod +x ./.git/hooks/pre-commit
+
. gnome-autogen.sh
diff --git a/scripts/pre-commit b/scripts/pre-commit
new file mode 100755
index 0000000..44e1788
--- /dev/null
+++ b/scripts/pre-commit
@@ -0,0 +1,134 @@
+#!/usr/bin/env python
+
+# script to check if any GNOME coding guidelines are violated
+# Copyright (C) 2015 Sahil Sareen (ssareen [ AT ] gnome [ DOT ] org)
+
+import sys
+import re
+import os
+
+def find( s, ch ):
+ return [ i for i, ltr in enumerate( s ) if ltr == ch ]
+
+
+def main():
+ print "Validating the diff ..."
+
+ p = os.popen( 'git diff --unified=0', "r" )
+
+ # Read the diff
+ lines = []
+ lineNum = 0
+ fileName = ''
+ nIssues = 0
+
+ while True:
+ line = p.readline()
+
+ if not line: break
+ if line.startswith( '@@' ):
+ lineNumSearch = re.search( r'.* .* \+(\d+).*', line )
+ lineNum = int( lineNumSearch.groups()[ 0 ] )
+ elif line.startswith( '+' ):
+ if line.startswith( '+++' ):
+ pos = line.rfind( '/' )
+ fileName = line[ pos + 1 : -1 ]
+ elif fileName.endswith( 'vala' ):
+ lines += [ ( fileName, lineNum, line[ 1 : ] ) ]
+ lineNum += 1
+
+ def getLineFileName( line ):
+ return line[ 0 ]
+
+ def getLineNum( line ):
+ return line[ 1 ]
+
+ def getLineData( line, pos = -1 ):
+ if pos == -1:
+ return line[ 2 ]
+ else:
+ return line[ 2 ][ pos ]
+
+ def getLineWidth( line ):
+ return len( getLineData( line ) )
+
+ def printIssue( line, msg ):
+ print getLineFileName( line ), " => Line ", getLineNum( line ), msg
+
+ for lineNum in xrange( 0, len( lines ) ):
+
+ currLine = lines[ lineNum ]
+
+ # Line Width
+ if getLineWidth( currLine ) > 120:
+ printIssue( currLine, "is greater than 120 charecters" )
+ nIssues += 1
+
+ # Lines with trailing white-space or tabs
+ if getLineData( currLine ).endswith( ' \n' ):
+ printIssue( currLine, "has trailing whitespace" )
+ nIssues += 1
+
+ if getLineData( currLine ).endswith( '\t\n' ):
+ printIssue( currLine, "has trailing tabspace" )
+ nIssues += 1
+
+ # Single whitespace before "{"
+ indexes = find( getLineData( currLine ), '{' )
+ for index in indexes:
+ if index > 1:
+ if getLineData( currLine, index - 1 ) not in [ ' ', '_' ]:
+ printIssue( currLine, "missing whitespace before {" )
+ nIssues += 1
+ elif getLineData( currLine, index - 2 ) == ' ' \
+ and getLineData( currLine, index - 1 ) != '_' \
+ and not ( re.findall( "\s*{", getLineData( currLine ) ) != [] \
+ and getLineData( currLine, 0 ) in [ '\t', ' ' ] ):
+ printIssue( currLine, "multiple whitespace before {" )
+ nIssues += 1
+
+ # Single whitespace before "("
+ indexes = find( getLineData( currLine ), '(' )
+ for index in indexes:
+ if index > 1:
+ if getLineData( currLine, index - 1 ) != ' ' \
+ and getLineData( currLine, index - 1 ) not in [ '_', '(', '&', '*', '-', '(',
'!','\t' ]:
+ printIssue( currLine, "missing whitespace before (" )
+ nIssues += 1
+ elif getLineData( currLine, index - 2 ) == ' ' \
+ and getLineData( currLine, index - 1 ) not in [ '_', '(' ] \
+ and not ( getLineData( currLine ).startswith( " *" ) \
+ or getLineData( currLine ).startswith("#") \
+ or ( re.findall( "\s*\(", getLineData( currLine ) != [] \
+ and getLineData( currLine, 0 ) in [ '\t', ' ' ] )
) ):
+ printIssue( currLine, "multiple whitespace before (" )
+ nIssues += 1
+
+ # No whitespce between round brackets "(xyz)"
+ indexes = find( getLineData( currLine ), '(' )
+ for index in indexes:
+ if index > 1:
+ if getLineData( currLine, index + 1 ) == ' ':
+ printIssue( currLine, "has whitespace after (" )
+ nIssues += 1
+
+ indexes = find( getLineData( currLine ), ')' )
+ for index in indexes:
+ if index > 1:
+ if getLineData( currLine, index - 1 ) == ' ':
+ printIssue( currLine, "has whitespace before )" )
+ nIssues += 1
+
+ if nIssues != 0:
+ if nIssues == 1:
+ print "Guideline checker found", nIssues, "issue..."
+ else:
+ print "Guideline checker found", nIssues, "issues..."
+
+ print "We strongly reccomend you to fix these, to ignore use `git commit --no-verify`"
+ return -1
+
+ return 0
+
+if __name__ == "__main__":
+ sys.exit( main() )
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]