diff options
Diffstat (limited to 'buildscripts/errorcodes.py')
| -rw-r--r-- | buildscripts/errorcodes.py | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/buildscripts/errorcodes.py b/buildscripts/errorcodes.py new file mode 100644 index 00000000000..7a7e01701d3 --- /dev/null +++ b/buildscripts/errorcodes.py @@ -0,0 +1,85 @@ +#!/usr/bin/python + +import os +import sys +import re + +def getAllSourceFiles( arr=None , prefix="." ): + if arr is None: + arr = [] + + for x in os.listdir( prefix ): + if x.startswith( "." ) or x.startswith( "pcre-" ) or x.startswith( "32bit" ) or x.startswith( "mongodb-" ): + continue + full = prefix + "/" + x + if os.path.isdir( full ): + getAllSourceFiles( arr , full ) + else: + if full.endswith( ".cpp" ) or full.endswith( ".h" ) or full.endswith( ".c" ): + arr.append( full ) + + return arr + +assertNames = [ "uassert" , "massert" ] + +def assignErrorCodes(): + cur = 10000 + for root in assertNames: + for x in getAllSourceFiles(): + print( x ) + didAnything = False + fixed = "" + for line in open( x ): + s = line.partition( root + "(" ) + if s[1] == "" or line.startswith( "#define " + root): + fixed += line + continue + fixed += s[0] + root + "( " + str( cur ) + " , " + s[2] + cur = cur + 1 + didAnything = True + if didAnything: + out = open( x , 'w' ) + out.write( fixed ) + out.close() + + +def readErrorCodes( callback ): + ps = [ re.compile( "([um]asser(t|ted)) *\( *(\d+)" ) , + re.compile( "(User|Msg)Exceptio(n)\( *(\d+)" ) + ] + for x in getAllSourceFiles(): + lineNum = 1 + for line in open( x ): + for p in ps: + for m in p.findall( line ): + callback( x , lineNum , line , m[2] ) + lineNum = lineNum + 1 + + +def getNextCode(): + highest = [0] + def check( fileName , lineNum , line , code ): + code = int( code ) + if code > highest[0]: + highest[0] = code + readErrorCodes( check ) + return highest[0] + 1 + +def checkErrorCodes(): + seen = {} + errors = [] + def checkDups( fileName , lineNum , line , code ): + if code in seen: + print( "DUPLICATE IDS" ) + print( "%s:%d:%s %s" % ( fileName , lineNum , line.strip() , code ) ) + print( "%s:%d:%s %s" % seen[code] ) + errors.append( seen[code] ) + seen[code] = ( fileName , lineNum , line , code ) + readErrorCodes( checkDups ) + return len( errors ) == 0 + +if __name__ == "__main__": + ok = checkErrorCodes() + print( "ok:" + str( ok ) ) + print( "next: " + str( getNextCode() ) ) + |
