Vor langer Zeit wurde es notwendig, den Zeichencode des Quellcodes zu überprüfen, also habe ich es mit Python gemacht und es regelmäßig mit Jenkis laufen lassen, so dass Memo
Bei der Entwicklung eines Spiels kommt die Unterstützung aus Übersee heraus, und wenn Japanisch in der Quelle von s-Jis geschrieben ist, ist dies tendenziell ein Problem.
Kommentare werden beim Anzeigen des Quellcodes im Web verstümmelt! (Es ist schwer, den Code unterwegs zu überprüfen)
Obwohl ich einen Kommentar im Doxygen-Format geschrieben habe, ist alles verstümmelt.
Unverständliche Kompilierungsfehler können auftreten oder nicht.
mojicodecheck.py
#! /usr/bin/env python
# -*- coding: utf-8 -*-
"""
@kurze Zeichencodeprüfung
@author DM
@date 2012/10/13
"""
import os, os.path, sys, re, time
import glob
import codecs
import chardet
#Zu ignorierende Ordner
ignorelist = ["tgs","tools_src","shader","ext"]
#Dateierweiterung zu überprüfen
extention = [".c",".cpp",".h",".inc",".inl",".hpp"]
# main
def main():
sys.stdout = codecs.getwriter("shift_jis")(sys.stdout) #Ausgabe
sys.stdin = codecs.getreader("shift_jis")(sys.stdin) #Eingang
#Nutzungsanzeige
if len(sys.argv) < 2 or len(sys.argv) > 4:
__usage()
sys.exit(0)
start_time = time.clock()
#Projektverzeichnis
path = os.path.normpath(sys.argv[1]) #Holen Sie sich den Pfad der Moduldatei
print(path)
ret = True
for (root, dirs, files) in os.walk(path):
for file in files:
file_path = os.path.join(root, file)
base, ext = os.path.splitext(file_path)
ignore = False
for d in ignorelist:
if file_path.find(d) > 0:
ignore = True
break;
if ignore == True:
continue
if ext in extention:
try:
f = open(file_path, 'r')
data = f.read()
p = chardet.detect(data)
if p['encoding'] == 'SHIFT_JIS':
print('error',p['encoding'],file_path)
ret = False
except IOError:
print(file_path, 'cannot be opened.')
finally:
f.close()
end_time = time.clock()
print("complete![time: ",(end_time - start_time),"sec]")
if ret == False:
CODE='S001'
MESSAGE='shift-jis still exists!!'
EXPECTED='S999-error'
ACTUAL='sample ' + CODE +' '+ MESSAGE
sys.exit(EXPECTED+' '+ACTUAL)
# __main__
if __name__ == '__main__':
#psyco.full()
main()
python mojicodecheck.py ${BUILD_DIR}
Wenn Sie ausführen
[MojiCodeCheck] $ /bin/sh -xe /tmp/hudson2121374754708119058.sh
+ python /var/lib/jenkins/workspace/soilproject/common/tools/mojicodecheck.py /var/lib/jenkins/workspace/soilproject
/var/lib/jenkins/workspace/soilproject
('error', 'SHIFT_JIS', '/var/lib/jenkins/workspace/soilproject/common/tgl/src/TGLSystemTypes.h')
('error', 'SHIFT_JIS', '/var/lib/jenkins/workspace/soilproject/common/tgl/src/Effect/TGLEffectEmit.h')
('error', 'SHIFT_JIS', '/var/lib/jenkins/workspace/soilproject/common/tgl/src/Effect/Program/EPrgZanplu.h')
('error', 'SHIFT_JIS', '/var/lib/jenkins/workspace/soilproject/common/tgl/src/Effect/Program/EPrgSpiral.cpp')
('complete![time: ', 15.200000000000001, 'sec]')
S999-error sample S001 shift-jis still exists!!
Build step 'Execute shell' marked build as failure
Notifying upstream projects of job completion
Finished: FAILURE
Die s-Jis-Quelle wird wie folgt in das Protokoll ausgegeben.
Das ist es.
Recommended Posts