diff options
Diffstat (limited to 'buildscripts/errorcodes.py')
-rwxr-xr-x[-rw-r--r--] | buildscripts/errorcodes.py | 59 |
1 files changed, 56 insertions, 3 deletions
diff --git a/buildscripts/errorcodes.py b/buildscripts/errorcodes.py index 7a7e017..d87b7ad 100644..100755 --- a/buildscripts/errorcodes.py +++ b/buildscripts/errorcodes.py @@ -3,23 +3,24 @@ import os import sys import re +import utils 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-" ): + if x.startswith( "." ) or x.startswith( "pcre-" ) or x.startswith( "32bit" ) or x.startswith( "mongodb-" ) or x.startswith("debian") or x.startswith( "mongo-cxx-driver" ): continue full = prefix + "/" + x - if os.path.isdir( full ): + if os.path.isdir( full ) and not os.path.islink( 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(): @@ -43,6 +44,8 @@ def assignErrorCodes(): out.close() +codes = [] + def readErrorCodes( callback ): ps = [ re.compile( "([um]asser(t|ted)) *\( *(\d+)" ) , re.compile( "(User|Msg)Exceptio(n)\( *(\d+)" ) @@ -52,6 +55,7 @@ def readErrorCodes( callback ): for line in open( x ): for p in ps: for m in p.findall( line ): + codes.append( ( x , lineNum , line , m[2] ) ) callback( x , lineNum , line , m[2] ) lineNum = lineNum + 1 @@ -78,8 +82,57 @@ def checkErrorCodes(): readErrorCodes( checkDups ) return len( errors ) == 0 +def getBestMessage( err , start ): + err = err.partition( start )[2] + if not err: + return "" + err = err.partition( "\"" )[2] + if not err: + return "" + err = err.rpartition( "\"" )[0] + if not err: + return "" + return err + +def genErrorOutput(): + + g = utils.getGitVersion() + + if os.path.exists( "docs/errors.md" ): + i = open( "docs/errors.md" , "r" ) + + + out = open( "docs/errors.md" , 'w' ) + out.write( "MongoDB Error Codes\n==========\n\n\n" ) + + prev = "" + seen = {} + + codes.sort( key=lambda x: x[0]+"-"+x[3] ) + for f,l,line,num in codes: + if num in seen: + continue + seen[num] = True + + if f.startswith( "./" ): + f = f[2:] + + if f != prev: + out.write( "\n\n" ) + out.write( f + "\n----\n" ) + prev = f + + url = "http://github.com/mongodb/mongo/blob/" + g + "/" + f + "#L" + str(l) + + out.write( "* " + str(num) + " [code](" + url + ") " + getBestMessage( line , str(num) ) + "\n" ) + + out.write( "\n" ) + out.close() + if __name__ == "__main__": ok = checkErrorCodes() print( "ok:" + str( ok ) ) print( "next: " + str( getNextCode() ) ) + if ok: + genErrorOutput() |