kablame 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. data/bin/git-kablame +20 -0
  2. data/bin/svn-kablame +20 -0
  3. data/lib/kablame.rb +100 -0
  4. metadata +56 -0
data/bin/git-kablame ADDED
@@ -0,0 +1,20 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+
4
+ usage = <<USAGE
5
+ Run git-kablame
6
+ Usage: git-kablame <directory>
7
+ USAGE
8
+
9
+ require 'fileutils'
10
+
11
+ target = ARGV.first
12
+
13
+ if target.nil? || target.empty?
14
+ puts usage
15
+ exit(0)
16
+ end
17
+ require 'rubygems'
18
+ gem 'kablame'
19
+ require 'kablame'
20
+ GitKablame.new(target).kablame
data/bin/svn-kablame ADDED
@@ -0,0 +1,20 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+
4
+ usage = <<USAGE
5
+ Run git-kablame
6
+ Usage: git-kablame <directory>
7
+ USAGE
8
+
9
+ require 'fileutils'
10
+
11
+ target = ARGV.first
12
+
13
+ if target.nil? || target.empty?
14
+ puts usage
15
+ exit(0)
16
+ end
17
+ require 'rubygems'
18
+ gem 'kablame'
19
+ require 'kablame'
20
+ SvnKablame.new(target).kablame
data/lib/kablame.rb ADDED
@@ -0,0 +1,100 @@
1
+ class Kablame
2
+
3
+ def initialize(dirs = nil, formats = nil)
4
+ @users = {}
5
+ @folders = dirs.split.map {|dir| dir.sub(/\/+\Z/, '') }
6
+ @formats = formats ? formats.split : %w{rb}
7
+ end
8
+
9
+ def kablame
10
+ folders.each do |directory|
11
+ if File.exists?(directory)
12
+ puts "\nKablaming #{directory}"
13
+ Dir.glob(directory+"/**/*").grep(file_format_regex).each do |filename|
14
+ process_file(filename)
15
+ end
16
+ else
17
+ puts "#{directory} not found. Skipping it!"
18
+ end
19
+ end
20
+ unless(@users.empty?)
21
+ print_results
22
+ else
23
+ puts "No results. Try a different directory?"
24
+ end
25
+ end
26
+
27
+ def process_file(filename)
28
+ print '.'
29
+ STDOUT.flush
30
+ get_blame_lines(filename).each do |line|
31
+ next if line.match(blank_line_regex)
32
+ name = line.match(name_match_regex)[1].strip
33
+ (@users[name] ? @users[name].increment : @users[name] = KablameUser.new(name)) unless name.nil?
34
+ end
35
+ end
36
+
37
+ def print_results
38
+ puts "\n\n++++++++++++TOTALS++++++++++++"
39
+ puts "**WINNER** #{@users.values.sort.first.name} **WINNER**"
40
+ @users.values.sort.each do |user|
41
+ puts user.to_s
42
+ end
43
+ puts "**LOSER** #{@users.values.sort.last.name} **LOSER**"
44
+ end
45
+
46
+
47
+ def folders
48
+ @folders
49
+ end
50
+
51
+ def file_format_regex
52
+ %r{\.(#{@formats.join('|')})}
53
+ end
54
+ end
55
+
56
+ class SvnKablame < Kablame
57
+ def blank_line_regex; /\d+[\ ]+(\w+)+(\s+)$/; end
58
+
59
+ def name_match_regex; /\d+[\ ]+([\w@\.\-]+)/; end
60
+
61
+ def get_blame_lines(filename)
62
+ `svn blame #{filename}`.split("\n")
63
+ end
64
+
65
+ def version_control; 'svn'; end
66
+ end
67
+
68
+ class GitKablame < Kablame
69
+ def blank_line_regex; /\(.+[\+-]\d{4}\s+\d+\)(\s*)$/; end
70
+
71
+ def name_match_regex; /\((.+)\s+\d{4}\-\d{2}/; end
72
+
73
+ def get_blame_lines(filename)
74
+ `git blame #{filename}`.split("\n")
75
+ end
76
+
77
+ def version_control; 'git'; end
78
+ end
79
+
80
+ class KablameUser
81
+ attr_accessor :line_count
82
+ attr_accessor :name
83
+
84
+ def initialize(name)
85
+ @line_count = 1
86
+ @name = name
87
+ end
88
+
89
+ def <=>(other)
90
+ other.line_count <=> @line_count
91
+ end
92
+
93
+ def to_s
94
+ "#{@name.ljust(20)} ==> #{@line_count.to_s.rjust(4)}"
95
+ end
96
+
97
+ def increment
98
+ @line_count = @line_count.next
99
+ end
100
+ end
metadata ADDED
@@ -0,0 +1,56 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: kablame
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.2
5
+ platform: ruby
6
+ authors:
7
+ - Jacob Dunphy
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2008-06-09 00:00:00 -07:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description: Counting lines of code based upon blame.
17
+ email: jacob.dunphy@gmail.com
18
+ executables:
19
+ - git-kablame
20
+ - svn-kablame
21
+ extensions: []
22
+
23
+ extra_rdoc_files: []
24
+
25
+ files:
26
+ - lib/kablame.rb
27
+ - bin/git-kablame
28
+ - bin/svn-kablame
29
+ has_rdoc: false
30
+ homepage: http://github.com/jdunphy/kablame-gem/tree/master
31
+ post_install_message:
32
+ rdoc_options: []
33
+
34
+ require_paths:
35
+ - lib
36
+ required_ruby_version: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: "0"
41
+ version:
42
+ required_rubygems_version: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: "0"
47
+ version:
48
+ requirements: []
49
+
50
+ rubyforge_project: kablame
51
+ rubygems_version: 1.1.1
52
+ signing_key:
53
+ specification_version: 2
54
+ summary: Use svn or git blame to show you who deserves the credit
55
+ test_files: []
56
+