105 lines
2.5 KiB
Python
105 lines
2.5 KiB
Python
|
#!/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 )
|