files/git-commit-sizes

39 lines
724 B
Ruby
Executable File

#!/usr/bin/env ruby
output = `git log --stat`
commit = nil
date = nil
commit_sizes = []
message = nil
to_message = 0
output.lines.each do |line|
if to_message > 0
to_message -= 1
if to_message == 0
message = line.chomp.strip
end
elsif line =~ /^commit (\S+)/
commit = $1
elsif line =~ /^Date:\s*(.*)$/
date = $1
to_message = 2
else
size = 0
if line =~ /(\d+) insertion/
size += $1.to_i
end
if line =~ /(\d+) deletion/
size += $1.to_i
end
if size != 0
commit_sizes << [size, commit[0..6], date, message]
end
end
end
commit_sizes.sort!
commit_sizes.each do |size, commit, date, message|
puts "#{size} #{commit} #{date} #{message}"
end