summaryrefslogtreecommitdiff
path: root/buildscripts/errorcodes.py
diff options
context:
space:
mode:
Diffstat (limited to 'buildscripts/errorcodes.py')
-rwxr-xr-x[-rw-r--r--]buildscripts/errorcodes.py59
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()