Il y a longtemps, il devenait nécessaire de vérifier le code de caractère du code source, donc je l'ai fait avec python et l'ai fait tourner régulièrement avec Jenkis, donc ce mémo
Lors du développement d'un jeu, un support à l'étranger est fourni, et si le japonais est écrit dans la source de s-Jis, cela a tendance à être un problème.
Les commentaires sont tronqués lors de la visualisation du code source sur le Web! (Il est difficile de vérifier le code en déplacement)
Même si j'ai écrit un commentaire au format Doxygen, tout est brouillé.
Des erreurs de compilation incompréhensibles peuvent survenir ou non.
mojicodecheck.py
#! /usr/bin/env python
# -*- coding: utf-8 -*-
"""
@brève vérification du code de caractère
@author DM
@date 2012/10/13
"""
import os, os.path, sys, re, time
import glob
import codecs
import chardet
#Dossiers à ignorer
ignorelist = ["tgs","tools_src","shader","ext"]
#Extension de fichier à vérifier
extention = [".c",".cpp",".h",".inc",".inl",".hpp"]
# main
def main():
sys.stdout = codecs.getwriter("shift_jis")(sys.stdout) #production
sys.stdin = codecs.getreader("shift_jis")(sys.stdin) #contribution
#Affichage d'utilisation
if len(sys.argv) < 2 or len(sys.argv) > 4:
__usage()
sys.exit(0)
start_time = time.clock()
#Répertoire de projets
path = os.path.normpath(sys.argv[1]) #Obtenez le chemin du fichier du module
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}
Si vous exécutez
[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
La source s-Jis est sortie dans le journal comme ceci.
C'est tout.
Recommended Posts