#!/usr/bin/env python3
#coding=utf-8
import unicodedata
import os
import re
import sys
import subprocess
current_path = os.getcwd()
#print(current_path)
with os.popen('find $PWD -maxdepth 1 -type d -name "*chi-cdk"') as chi_fd:
chi_path = chi_fd.read().strip()
with os.popen('find $PWD -maxdepth 1 -type d -name "*camx"') as camx_fd:
camx_path = camx_fd.read().strip()
#print(chi_path)
#print(camx_path)
#def writeCommitToCSV(inFile):
def writeCommitToCSV(inFile, outFile):
'''
# write header
to_write = "序号,TagName,Count,来源,优化措施,备注\n"
out_fd = open(outFile, 'w')
out_fd.write(to_write)
out_fd.close()
'''
# write to csv output file
out_fd = open(outFile, 'w+', encoding='utf-8')
#header = "序号,TagName,Count,来源,优化措施,备注\n"
header = "NO.,TagName,Count,CommitID,Method,Note\n"
#out_fd.write(header)
line_num = 1 # line num
target_src = "" # target file for parsing who commit it.
line_src = 0 # line of src for parsing
with open(inFile, 'r', encoding='utf-8') as in_fd:
line = in_fd.readline()
while line:
# add `()` for group to get src file to parse
#line_group = re.search(r'(.*\] )(.*(?=:))', line)
#line_group = re.search(r'(.*\] )(.*(?=:)):((?<=:)\d+(?= ))(.*\(\)).*((?<=)\d+(?=$))', line)
#line_group = re.search(r'(.*\] )(.*(?=:)):((?<=:)\d+(?= ))(.*\(\))\s+((?<=\s)\d+(?=$))', line)
line_group = re.search(r'(.*\] )(.*(?=:)):((?<=:)\d+(?= ))(.*\(\))\s+((?<=\s)\d+)', line)
if not line_group:
if(re.match(r'^Time.*', line)):
out_fd.write('"' + line.strip() + '"\n')
if(re.match(r'^TagName.*', line)):
out_fd.write(header)
line_num = 1
line = in_fd.readline()
continue
print(line_group.group())
target_src = line_group.group(2)
line_src = line_group.group(3)
count = line_group.group(5)
tagName = line_group.group(1) + line_group.group(2) + line_group.group(3) + line_group.group(4)
'''
print(target_src)
print(line_src)
print(count)
print(tagName)
'''
# scan chi-cdk and camx
os.chdir(chi_path)
#print("chi111: Current Working Directory " , os.getcwd())
find_cmd = 'find ./ -type f -name ' + target_src
with os.popen(find_cmd) as find_chi_fd:
relative_src_path = find_chi_fd.read().strip()
if not relative_src_path:
os.chdir(camx_path)
#print("camx222: Current Working Directory " , os.getcwd())
with os.popen(find_cmd) as find_camx_fd:
relative_src_path = find_camx_fd.read().strip()
#print("Current Working Directory " , os.getcwd())
#print(relative_src_path)
blame_cmd='git blame ' + relative_src_path + ' -L ' + line_src+','+line_src
#print(blame_cmd)
with os.popen(blame_cmd) as blame_fd:
commit_search = re.search(r'.*(?= \d\d:)', blame_fd.read().strip())
if commit_search:
commit_owner = commit_search.group()
else:
commit_owner = 'warning: commit not found'
#print(commit_owner)
line_to_csv = str(line_num) + ',' + tagName + ',' + count + ',' + commit_owner + ', ' + ', ' + '\n'
out_fd.write(line_to_csv)
'''
'''
line_num += 1
os.chdir(current_path)
line = in_fd.readline()
out_fd.close()
print("\nGenerated: " + outFile)
print("Please open csv by excel and copy all of table to KM.")
inputFile = current_path + '/out_limit'
if len(sys.argv) == 1:
print("Use default out_limit file to be parsed.")
else:
para_list = sys.argv
inputFile = current_path + '/' + para_list[1]
outputFile = inputFile + '_parse.csv'
'''
print(current_path)
print(inputFile)
print(outputFile)
'''
#writeCommitToCSV(inputFile)
writeCommitToCSV(inputFile, outputFile)
一个解析日志的脚本
最新推荐文章于 2024-05-09 12:22:22 发布
这段代码实现了一个自动化脚本,用于读取Git日志,解析特定格式的行,查找对应的源文件,并通过Git blame获取提交者信息。它将这些信息写入CSV文件,用于后续分析或优化。脚本首先定位到包含'chi-cdk'和'camx'目录,然后搜索目标源文件并使用正则表达式匹配关键数据,最后通过Git blame确定提交者。
摘要由CSDN通过智能技术生成