diff --git a/git-large-files b/git-large-files new file mode 100755 index 0000000..4aaecd6 --- /dev/null +++ b/git-large-files @@ -0,0 +1,23 @@ +#!/usr/bin/env ruby -w +head, treshold = ARGV +head ||= 'HEAD' +Megabyte = 1000 ** 2 +treshold = (treshold || 0.1).to_f * Megabyte + +big_files = {} + +IO.popen("git rev-list #{head}", 'r') do |rev_list| + rev_list.each_line do |commit| + commit.chomp! + for object in `git ls-tree -zrl #{commit}`.split("\0") + bits, type, sha, size, path = object.split(/\s+/, 5) + size = size.to_i + big_files[sha] = [path, size, commit] if size >= treshold + end + end +end + +big_files.each do |sha, (path, size, commit)| + where = `git show -s #{commit} --format='%h: %cr'`.chomp + puts "%4.1fM\t%s\t(%s)" % [size.to_f / Megabyte, path, where] +end