#!/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