python git log
# -*- coding: utf-8 -*-# created by vince67 Feb.2014# nuovince@gmail.comimport reimport osimport subprocessdef 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 branchdef 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 filedef 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 logdef 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 projectdef 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_listif __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列, 左对齐 %>, %>|, %>>, % ...
随机推荐
- Python字符串相关
#字符串的相关操作 #基本操作 #+ 字符串连接操作 str1 = '来是come走是go' str2 = '点头yes摇头no' result = str1 + str2 print(result) ...
- 【Luogu】P3228数列(数学题)
题目链接 考虑我们把所有的增加量拿出来做成一个序列b. 那么在所有n中开头中$1~\sum\limits_{i=1}^{k-1}b[i]$是合法的 也就是说我们枚举所有b[i],然后答案就是$n*m^ ...
- 【ZBH选讲·模数和】
[问题描述]你是能看到第二题的friends呢.——laekovHja和Yjq在玩游戏,这个游戏中Hja给了Yjq两个数,希望Yjq找到一些非负整数使得这些数的和等于n,并且所有数模maaaaaaaa ...
- eclipse安装使用jetty
安装: 直接从eclipse中的eclipse_market中下载即可,关键说下配置项目的访问路径:
- java泛型的一些解释
public <A extends Annotation> A getAnnotation(Class<A> annotationClass)我们经常在帮助文档中看到这样的方法 ...
- Registering RHEL6 Clients into spacewalk
Before Starting(login to spacwalk server) 1.Create a base channel within Spacewalk (Channels > Ma ...
- shell,perl,python的区别
shell+sed+awk严格的讲, shell不是一种编程语言, 但是shell有自己的控制流结构(判断,循环,选择),运算以及函数等编程语言特性, 加上shell命令组织在一起构成脚本, 能够完成 ...
- .ini配置读取
ini文件的格式 格式 INI文件由节.键.值组成. 节 [section] 参数(键=值) name=value 注解 注解使用分号表示(;).在分号后面的文字,直到该行结尾都全部为注解. ...
- 理想中的SQL语句条件拼接方式 (二)
问题以及想要的效果,不重复叙述,如果需要的请先看 理想中的SQL语句条件拼接方式 . 效果 现在有2个类映射数据库的2张表,结构如下: public class User { public int U ...
- 【IDEA】IDEA创建Maven的Web项目并运行以及打包
0.IDEA集成Maven并设置Maven的配置 idea15之后的版本,都自带了maven插件,idea14貌似需要自己安装,方法也很简单:File->Settings->Plugin ...