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列, 左对齐 %>, %>|, %>>, % ...
随机推荐
- Window系统命令行调用控制面板程序
Window系统命令行调用控制面板程序 control.exe /name microsoft.folderoptions 启动资源管理器的 文件夹属性 选项卡 control.exe /name M ...
- BZOJ 2453 维护队列 | 分块
题目: http://www.lydsy.com/JudgeOnline/problem.php?id=2453 题解: 考虑维护每个位置的颜色上一次出现在哪里,计为pre[i],在询问l到r的时候, ...
- Vue,watch观察对象中的某个属性的变化
你只需要属性这样写,用引号引起来
- CSS实现放大镜/狙击镜效果
图片放大,这是一个比较容易的效果了.当然,今天说的可不是简简单单的在一个框里放大,而是一个圆.就像放大镜或是狙击镜那样,只有圆圈里的放大,圈外的当然还是原来的图片.这是不是很不可思议? 当然不是.做过 ...
- Windows Server 创建环回网卡
1.以管理员身份运行cmd后,在cmd命令窗口中执行:hdwwiz 启动硬件添加向导. 2.在添加硬件向导中选择手动安装或自动搜索都可以.然后选择网络适配器. 3.选择网络适配器:厂商选择Micros ...
- 解决PKIX path building failed
起因 上周在生产环境部署时,把安全证书加到k8s-ingress中时发现报该错误 解决 找网上解决方案,因为这种问题相对比较少见,也没百度,直接谷歌,找到解决方案如下:https://stackove ...
- centos 安装squid http代理
yum -y install squid service squid start service iptables stop
- python自动化测试windows gui
http://sourceforge.net/projects/pywinauto/files/pywinauto/ http://www.microsoft.com/en-us/download/c ...
- poj 2002(好题 链式hash+已知正方形两点求另外两点)
Squares Time Limit: 3500MS Memory Limit: 65536K Total Submissions: 18493 Accepted: 7124 Descript ...
- [BZOJ1193][HNOI2006]马步距离 大范围贪心小范围爆搜
1193: [HNOI2006]马步距离 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1988 Solved: 905[Submit][Statu ...