summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xgit-cc33
1 files changed, 33 insertions, 0 deletions
diff --git a/git-cc b/git-cc
new file mode 100755
index 0000000..1fb4d5c
--- /dev/null
+++ b/git-cc
@@ -0,0 +1,33 @@
+#!/usr/bin/env ruby
+
+@authors = {}
+
+def parse_blame(line)
+ key, value = line.split(" ", 2)
+ case key
+ when "author"
+ @name = value
+ when "author-mail"
+ @mail = value
+ author = "\"#{@name}\" #{@mail}"
+ @authors[author] = true
+ end
+end
+
+ARGV.each do |filename|
+ patch_file = File.open(filename)
+ patch_file.each_line do |patch_line|
+ @from ||= patch_line[/From (\w+)/, 1]
+ case patch_line
+ when /^---\s+(\S+)/
+ @source = $1[2..-1]
+ when /^@@\s-(\d+),(\d+)/
+ blame = `git blame --incremental -L #{$1},+#{$2} #{@source} #{@from}^ | grep author`
+ blame.each_line { |l| parse_blame(l.chomp) }
+ end
+ end
+end
+
+@authors.each_key do |a|
+ puts a
+end \ No newline at end of file