1
0
mirror of git://sourceware.org/git/lvm2.git synced 2024-12-21 13:34:40 +03:00

scripts: add a little scripts to show git history for the last 2 weeks.

This commit is contained in:
Joe Thornber 2018-05-16 15:27:52 +01:00
parent 7c852c75c3
commit 64dd656ef7

80
scripts/code-stats.rb Executable file
View File

@ -0,0 +1,80 @@
#! /usr/bin/env ruby
require 'date'
require 'pp'
REGEX = /(\w+)\s+'(.+)'\s+(.*)/
Commit = Struct.new(:hash, :time, :author, :stats)
CommitStats = Struct.new(:nr_files, :nr_added, :nr_deleted)
def calc_stats(diff)
changed = 0
added = 0
deleted = 0
diff.lines.each do |l|
case l
when /^\+\+\+/
changed = changed + 1
when /^\+/
added = added + 1
when /^---/
# do nothing
when /^\-/
deleted = deleted + 1
end
end
CommitStats.new(changed, added, deleted)
end
def select_commits(&block)
commits = []
input = `git log --format="%h '%aI' %an"`
input.lines.each do |l|
m = REGEX.match(l)
raise "couldn't parse: ${l}" unless m
hash = m[1]
time = DateTime.iso8601(m[2])
author = m[3]
if block.call(hash, time, author)
diff = `git log -1 -p #{hash} | filterdiff -X configure`
commits << Commit.new(hash, time, author, calc_stats(diff))
end
end
commits
end
def since(date)
lambda do |hash, time, author|
time >= date
end
end
def pad(str, col)
str + (' ' * (col - str.size))
end
#-----------------------------------
commits = select_commits(&since(DateTime.now - 14))
authors = Hash.new {|hash, key| hash[key] = CommitStats.new(0, 0, 0)}
commits.each do |c|
author_stats = authors[c.author]
author_stats.nr_files = author_stats.nr_files + c.stats.nr_files
author_stats.nr_added = author_stats.nr_added + c.stats.nr_added
author_stats.nr_deleted = author_stats.nr_deleted + c.stats.nr_deleted
end
puts "#{pad("Author", 20)}\tChanged files\tInsertions\tDeletions"
authors.each_pair do |k, v|
puts "#{pad(k, 20)}\t#{v.nr_files}\t\t#{v.nr_added}\t\t#{v.nr_deleted}"
end