[PYTHON] Skript zur Überprüfung des Quellcode-Zeichencodes

Einführung

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

Warum muss der Zeichencode des Quellcodes überprüft werden?

Implementierung

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

Skript zur Überprüfung des Quellcode-Zeichencodes
Zeichencode
Python-Zeichencode
Installieren Sie ansible aus dem Quellcode
Tool zum Überprüfen des Codestils
2.x, 3.x Serienzeichencode von Python
Überprüfen Sie den Code mit flake8
In Python gelernter Zeichencode
Überprüfen Sie immer PEP8, während Sie den Python-Quellcode in Emacs bearbeiten
Zeichencode † Dunkelheit † Begegnungsbericht Teil1
Code: 2 "Hello World" im "Choregraphe-Python-Skript"
Überprüfen Sie den Python-Codestil mit pep8
Zeichencode-bezogene Linux-Befehle
[Python] Lesen Sie den Flask-Quellcode
Jinja2 Quellcode Formatierung mit Atom-Verschönerung
Anzahl Quellcodezeilen (SLOC)