python git log
# -*- 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
:
match
=
re.search(
'Bug:? \d+ '
, line).group()
try
:
bug_id
=
match.split(
'Bug: '
)[
1
].split(
'\n'
)[
0
]
except
Exception, e:
bug_id
=
match.split(
'Bug '
)[
1
].split(
' '
)[
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解析git log后生成页面显示git更新日志信息
使用git log可以查到git上项目的更新日志. 如下两个git项目,我想把git的日志信息解析成一个便于在浏览器上查看的页面. https://github.com/gityf/lua https ...
- git log命令全解析,打log还能这么随心所欲!
git log命令非常强大而好用,在复杂系统的版本管理中扮演着重要的角色,但默认的git log命令显示出的东西实在太丑,不好好打扮一下根本没法见人,打扮好了用alias命令拍个照片,就正式出道了! ...
- [译]git log进阶
格式化log输出 oneline --oneline标记将每个commit压缩成一行. 默认情况下显示一个commit ID和commit描述的第一行. 输出如下: 0e25143 Merge bra ...
- [git]Git log 输出格式化(转载)
转载于:https://havee.me/linux/2015-05/git-pretty-output.html 美化完的格式: git log --graph --pretty=format:'% ...
- git log 格式化输出
Git log --graph --pretty=format: '%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)& ...
- git log 常用命令及技巧
git log常用命令以及技巧 1.git log 如果不带任何参数,它会列出所有历史记录,最近的排在最上方,显示提交对象的哈希值,作者.提交日期.和提交说明.如果记录过多,则按Page Up.Pag ...
- git log --stat常用命令
1,显示被修改文件的修改统计信息,添加或删除了多少行. git log --stat 2,显示最近两条的修改 git log --stat -2 3,显示具体的修改 git log -p -2 4, ...
- [译]git log
git log git log命令用来显示提交的快照. 能列出来你项目的历史, 能过滤和搜索你指定的一些修改. git status能让你检查工作目录和stage区的状态, git log只提供被co ...
- git log控制输出宽度
%<(N, trunc) 下一个单元的输出宽度限制为N列, 左对齐 %<|(N, trunc) 下一个单元输出至全局第N列, 左对齐 %>, %>|, %>>, % ...
随机推荐
- Codeforces 835 F Roads in the Kingdom(树形dp)
F. Roads in the Kingdom(树形dp) 题意: 给一张n个点n条边的无向带权图 定义不便利度为所有点对最短距离中的最大值 求出删一条边之后,保证图还连通时不便利度的最小值 $n & ...
- FOJ ——Problem 1759 Super A^B mod C
Problem 1759 Super A^B mod C Accept: 1368 Submit: 4639Time Limit: 1000 mSec Memory Limit : 32 ...
- spring in action学习笔记十六:配置数据源的几种方式
第一种方式:JNDI的方式. 用xml配置的方式的代码如下: 1 <jee:jndi-lookup jndi-name="/jdbc/spittrDS" resource-r ...
- 转:Java NIO
Java NIO(New IO)是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的Java IO API.本系列教程将有助于你学习和理解Java NIO.感谢并发编程网的翻译和投递 ...
- 追加window.onload函数
function addLoadEvent(func) { var old_onload = window.onload; if (typeof window.onload != 'function' ...
- 傻逼数学题(math)
傻逼数学题 题目描述 由于乱码,复制不下来,只好截图了 输入格式 第一行一个正整数n 接下来n行每行两个整数x,y,表示第i个点的坐标 输出格式 一行一个数表示最小距离和,保留6位小数 样例输入 4 ...
- RxVolley报错:Caused by: java.lang.RuntimeException: RequestQueue-> DiskBasedCache cache dir error
Caused by: java.lang.RuntimeException: RequestQueue-> DiskBasedCache cache dir error 这是因为SD卡动态权限导 ...
- ajax验证前端页面
1.html页面 用ajax验证表单的时候不需要form标签,并把提交按钮由type=“submit ”改为type=“button” 数据表结构 ajax.html <!DOCTYPE htm ...
- 使用Sublime Text 3 编写python
1,下载Sublime Text 3 链接:http://pan.baidu.com/s/1eROBpB0 密码:cqjr 2,安装 注意安装时去掉捆绑的软件安装选项,有两处. 3,安装完成打开软件, ...
- 打印控件Lodop的使用
前些天发现一个不错的打印的控件Lodop,下面就来介绍一下具体使用! 首先到官网:http://www.lodop.net/download.html 下载最新版,文档的话官网中有很详细的介绍,这里演 ...