kablame 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
+