Temp public utils

This commit is contained in:
斟酌 鵬兄 2016-03-04 01:36:33 +08:00
parent 400d487b6b
commit 8d98222094

104
python/temp-public.py Normal file
View File

@ -0,0 +1,104 @@
#!/usr/bin/env python3
'''
This script temporary change all fields to public
This purpose is to let the signed code to compile
Once the dll is complied, revert the code in git
'''
import os
import sys
import re
from tempfile import mkstemp
from shutil import move
types = "(class|enum|interface|delegate)"
pubType = re.compile( r".+public (\w+ )?" + types )
priType = re.compile( r".+private (\w+ )?" + types )
intType = re.compile( r".+internal (\w+ )?" + types )
sealed = re.compile( ".+sealed.+" )
typeMatch = re.compile( r"[\s\t]+(internal )?(sealed )?(partial )?(abstract |static )?" + types )
Comment = re.compile( "^[ ]+/[\*/]" )
typeSub = re.compile( "(|sealed )(|partial )(|static )" + types )
typeIntSub = re.compile( "internal (|sealed)(|partial )(abstract |static )" + types )
intOnly = re.compile( "^([ ]+)(internal) (.+)" )
intProps = re.compile( ".+internal (set|get)" )
def ClassToPublic( dirName, fileName ):
source = os.path.join( dirName, fileName )
'''
if "DateTimeFormatHelper" not in source:
return
'''
# '''
f = open( source )
fh, target = mkstemp()
f2 = open( target, "w" )
for line in f:
if intOnly.match( line ) is not None:
if intProps.match( line ) is None:
f2.write( intOnly.sub( r"\1 /*_Internal_*/ public \3", line ) )
else:
f2.write( line.replace( "internal", "/*_Internal_O_*/" ) )
continue
if ( typeMatch.match( line ) is not None
and Comment.match( line ) is None ):
if ( priType.match( line ) is None
and pubType.match( line ) is None ):
if intType.match( line ) is None:
f2.write( typeSub.sub( r"/*_TMP_PUB_*/ public \1\2\3\4", line ) )
else:
f2.write( typeIntSub.sub( r"/*_Internal_*/ public \1\2\3\4", line ) )
continue
f2.write( line )
f.close()
f2.close()
print( source )
'''
with( open( target ) ) as f:
print( f.read() )
'''
move( source, os.path.join( dirName, "__" + fileName ) )
move( target, source )
# '''
def Restore( dirName, fileName ):
target = os.path.join( dirName, fileName[2:] )
print( "Restore: " + target )
os.remove( target )
move( os.path.join( dirName, fileName ), target )
revert = False
if 1 < len( sys.argv ):
revert = sys.argv[1] == "r"
if revert:
for root, dirs, files in os.walk( "." ):
for file in files:
if file.startswith( "__" ):
Restore( root, file )
else:
for root, dirs, files in os.walk( "." ):
for file in files:
if ( file.endswith( ".cs" )
and not file.endswith( ".g.cs" )
and not file.endswith( ".i.cs" )
and not file.startswith( "TemporaryGeneratedFile" ) ):
ClassToPublic( root, file )