手机
当前位置:查字典教程网 >脚本专栏 >python >使用python分析git log日志示例
使用python分析git log日志示例
摘要:用git来管理工程的开发,gitlog是非常有用的‘历史'资料,需求就是来自这里,我们希望能对gitlog有一个定制性强的过滤。此段脚本就是...

用git来管理工程的开发,git log是非常有用的‘历史'资料,需求就是来自这里,我们希望能对git log有一个定制性强的过滤。此段脚本就是在完成这种类型的任务。对于一个repo所有branch中的commit,脚本将会把message中存在BUG ID的一类commits给提取整理出来,并提供了额外的search_key, 用于定制过滤。

复制代码 代码如下:

# -*- coding: utf-8 -*-

# created by vince67 Feb.2014

# nuovince@gmail.com

import re

import os

import subprocess

def run(project_dir, date_from, date_to, search_key, filename):

bug_dic = {}

bug_branch_dic = {}

try:

os.chdir(project_dir)

except Exception, e:

raise e

branches_list = []

branches_list = get_branches()

for branch in branches_list:

bug_branch_dic = deal_branch(date_from,

date_to,

branch,

search_key)

for item in bug_branch_dic:

if item not in bug_dic:

bug_dic[item] = bug_branch_dic[item]

else:

bug_dic[item] += bug_branch_dic[item]

log_output(filename, bug_dic)

# abstract log of one branch

def deal_branch(date_from, date_to, branch, search_key):

try:

os.system('git checkout ' + branch)

os.system('git pull ')

except Exception, error:

print error

cmd_git_log = ["git",

"log",

"--stat",

"--no-merges",

"-m",

"--after="+date_from,

"--before="+date_to]

proc = subprocess.Popen(cmd_git_log,

stdout=subprocess.PIPE,

stderr=subprocess.PIPE)

stdout, stderr = proc.communicate()

bug_branch_dic = deal_lines(date_from,

date_to,

search_key,

stdout)

return bug_branch_dic

# write commits log to file

def log_output(filename, bug_dic):

fi = open(filename, 'w')

for item in bug_dic:

m1 = '--'*5 + 'BUG:' + item + '--'*20 + 'n'

fi.write(m1)

for commit in bug_dic[item]:

fi.write(commit)

fi.close()

# analyze log

def deal_lines(date_from, date_to, search_key, stdout):

bug_dic = {}

for line in stdout.split('commit '):

if re.search('Bug: d+', line) is not None and re.search(search_key, line) is not None:

bug_id = line.split('Bug: ')[1].split('n')[0]

if bug_id not in bug_dic:

bug_dic[bug_id] = [line]

else:

bug_dic[bug_id] += [line]

return bug_dic

# get all branches of a project

def get_branches():

branch_list = []

branches = []

tmp_str = ''

try:

cmd_git_remote = 'git remote show origin'

proc = subprocess.Popen(cmd_git_remote.split(),

stdout=subprocess.PIPE,

stderr=subprocess.PIPE)

stdout, stderr = proc.communicate()

tmp_str = stdout.split('Local branches configured')[0]

try:

tmp_str = tmp_str.split('Remote branches:n')[1]

except:

tmp_str = tmp_str.split('Remote branch:n')[1]

branches = tmp_str.split('n')

for branch in branches[0:-1]:

if re.search(' tracked', branch) is not None:

branch = branch.replace('tracked', '').strip(' ')

branch_list.append(branch)

except Exception, error:

if branch_list == []:

print "Can not get any branch!"

return branch_list

if __name__ == '__main__':

# path of the .git project. example: "/home/username/projects/jekyll_vincent"

project_dir = ""

date_from = "2014-01-25"

date_to = "2014-02-26"

# only search 'Bug: d+' for default

search_key = ""

# name of output file. example:"/home/username/jekyll_0125_0226.log"

filename = ""

run(project_dir, date_from, date_to, search_key, filename)

【使用python分析git log日志示例】相关文章:

python求素数示例分享

利用python获得时间的实例说明

python动态监控日志内容的示例

python多线程扫描端口示例

python解析文件示例

python切换hosts文件代码示例

使用python装饰器验证配置文件示例

python命令行参数sys.argv使用示例

使用python统计文件行数示例分享

python实现爬虫下载漫画示例

精品推荐
分类导航