ruby脚本统计git管理的修改过的文件,得到每个author写的代码行数
来源:互联网 发布:遗传算法区域描述器 编辑:程序博客网 时间:2024/06/03 03:15
#!/usr/bin/ruby
#coding=utf-8
#执行脚本,输入git链接和需要统计的版本范围,就可得到此范围内每个author修改过的代码行数author_count
Encoding.default_external = 'UTF-8'
#获取当前路径并删掉换行符
path_prev = `echo %cd%`.chomp!
#puts "#{path_prev}"
#输入git clone链接
puts "input git clone url please:"
url = gets.chomp
`git clone #{url}`
#解析链接获得完整路径并修改工作目录到克隆目录
dirname = url.split('/')[-1].split('.')[0]
Dir::chdir( path_prev + "\\" + dirname)
#puts path_prev + "\\" + dirname
#输入统计范围(两个版本之间的修改条目)
range = gets.chomp
#取得指定范围内有过改动的文件名
filenames = `git diff --name-only #{range}`
#puts "#{filenames}"
chang_filenames = Array.new
#获取当前路径并删掉换行符(克隆目录)
path = `echo %cd%`.chomp!
#puts "#{path}"
#将文件名字符串推到数组里
filenames.each_line{|l| chang_filenames.push(l)}
#puts "#{chang_filenames}"
#通过字符串拼接获得完整路径
chang_filenames.map! {|item| "#{path}" + "\\" + item.chomp!}
#puts "#{chang_filenames}"
#从数组删除非源代码
chang_filenames.delete_if {|item|!((item.include?".c") || (item.include? ".cpp") || \
(item.include? ".h") || (item.include? ".js"))}
#puts "#{chang_filenames}"
#替换路径分隔符
for i in 0..chang_filenames.length-1
chang_filenames[i].gsub!('/','\\')
end
#puts "#{chang_filenames}"
blames = Array.new
authers = Array.new
j = -1;
#利用git blame得到修改过的文件的长字符串,放到数组
for i in 0..chang_filenames.length-1
blames[i] = `git blame #{chang_filenames[i]} #{range}`
blames[i].each_line{|l| if l[0,1]!='^' && (l[0,1]!='\r'||'n') then authers[j+=1]=(l.split[1].delete "(") end}
end
#删除数组中空元素
authers.delete(nil)
#puts "#{blames}"
#puts "#{authers},#{authers.length}"
basic = authers.uniq
#puts "#{basic},#{basic.length}"
#basic.each{|item| Hash[item => (item + "_num").to_i]}
#必须先初始化,双层循环里自加的时候需要
vars = Array.new(basic.length, 0)
#authers.each{|items| basic.each{|item| if item == items then vars end}}
for i in 0..basic.length-1
for j in 0..authers.length-1
if authers[j]==basic[i] then
vars[i] += 1
end
end
end
#puts "#{vars}"
k = -1;
name_count = Array.new
basic.each{|item|name_count[k+=1] = item + "_count = " + "#{vars[k]}"}
#结果
puts "#{name_count}"
#coding=utf-8
#执行脚本,输入git链接和需要统计的版本范围,就可得到此范围内每个author修改过的代码行数author_count
Encoding.default_external = 'UTF-8'
#获取当前路径并删掉换行符
path_prev = `echo %cd%`.chomp!
#puts "#{path_prev}"
#输入git clone链接
puts "input git clone url please:"
url = gets.chomp
`git clone #{url}`
#解析链接获得完整路径并修改工作目录到克隆目录
dirname = url.split('/')[-1].split('.')[0]
Dir::chdir( path_prev + "\\" + dirname)
#puts path_prev + "\\" + dirname
#输入统计范围(两个版本之间的修改条目)
range = gets.chomp
#取得指定范围内有过改动的文件名
filenames = `git diff --name-only #{range}`
#puts "#{filenames}"
chang_filenames = Array.new
#获取当前路径并删掉换行符(克隆目录)
path = `echo %cd%`.chomp!
#puts "#{path}"
#将文件名字符串推到数组里
filenames.each_line{|l| chang_filenames.push(l)}
#puts "#{chang_filenames}"
#通过字符串拼接获得完整路径
chang_filenames.map! {|item| "#{path}" + "\\" + item.chomp!}
#puts "#{chang_filenames}"
#从数组删除非源代码
chang_filenames.delete_if {|item|!((item.include?".c") || (item.include? ".cpp") || \
(item.include? ".h") || (item.include? ".js"))}
#puts "#{chang_filenames}"
#替换路径分隔符
for i in 0..chang_filenames.length-1
chang_filenames[i].gsub!('/','\\')
end
#puts "#{chang_filenames}"
blames = Array.new
authers = Array.new
j = -1;
#利用git blame得到修改过的文件的长字符串,放到数组
for i in 0..chang_filenames.length-1
blames[i] = `git blame #{chang_filenames[i]} #{range}`
blames[i].each_line{|l| if l[0,1]!='^' && (l[0,1]!='\r'||'n') then authers[j+=1]=(l.split[1].delete "(") end}
end
#删除数组中空元素
authers.delete(nil)
#puts "#{blames}"
#puts "#{authers},#{authers.length}"
basic = authers.uniq
#puts "#{basic},#{basic.length}"
#basic.each{|item| Hash[item => (item + "_num").to_i]}
#必须先初始化,双层循环里自加的时候需要
vars = Array.new(basic.length, 0)
#authers.each{|items| basic.each{|item| if item == items then vars end}}
for i in 0..basic.length-1
for j in 0..authers.length-1
if authers[j]==basic[i] then
vars[i] += 1
end
end
end
#puts "#{vars}"
k = -1;
name_count = Array.new
basic.each{|item|name_count[k+=1] = item + "_count = " + "#{vars[k]}"}
#结果
puts "#{name_count}"
1 0
- ruby脚本统计git管理的修改过的文件,得到每个author写的代码行数
- ruby统计git管理的代码完整版
- 统计代码行数的脚本
- 修改Git commit 的author
- 统计代码行数的shell脚本
- git 统计自己的代码行数
- python写的代码行数统计程序
- 统计你写的java代码行数
- 统计你写的java代码行数
- 统计你写的java代码行数
- python写的统计PYTHON文件的(代码行数,空行数,注释行数)小程序
- 统计代码的行数
- Git change history commit author ( 修改历史 commit的 author)
- 统计文件的行数
- 统计文件的行数
- db2统计每个表的行数
- 统计一个项目的代码行数,只统计cpp文件
- Shell脚本统计文件行数的8种方法
- java 参数过滤,防止异常注入
- ntp错误:no server suitable for synchronization found
- SpringMVC+Maven+Hibernate+Modbus
- Android 沉浸式状态栏
- OpenStack命令集合
- ruby脚本统计git管理的修改过的文件,得到每个author写的代码行数
- Lint工具去除Android工程里不再需要的资源
- 数字证书
- java 集合学习之hashMap
- Netdata安装和使用(Linux 性能实时监测工具)
- 什么?!UI设计了新动画特效!别说话,Drawable来救你。
- C++ 一个永远无法点击到的按钮(窗口的显示与隐藏)
- Swap交换分区概念
- JAVA线程系列教程<2>-线程的两种实现方式