Class: Gitstats::Commit

Inherits:
Object
  • Object
show all
Defined in:
lib/gitstats.rb

Instance Method Summary collapse

Constructor Details

#initialize(id, commit_text_chunk) ⇒ Commit

Returns a new instance of Commit.



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/gitstats.rb', line 7

def initialize(id, commit_text_chunk)
  # ignore_files = []
  ignore_files = ['.txt', '.dat', '.csv', 'out', 'swp', '.class', '.pdf', '.html', '.versionsBackup']
  @id = id
  @text = commit_text_chunk
  @ignore_add = 0
  @ignore_del = 0
  @inserts = 0
  @deletes = 0
  @files = 0
  minus_c = 0
  plus_c = 0
  minus_count = 0
  plus_count = 0
  commit_text_chunk.split(/\r?\n/).each do |line|
    # if @id.index('12226') != nil
    #   puts line
    # end
    words = line.split()
    if /Author: [^<]+<[^>]+>/.match(line)
      # TODO use name instead of email
      @author = words[-1]
    elsif /Date:   /.match(line)
      @time = Time.parse(line[7..-1])
    elsif / [0-9]+ files? changed/.match(line)
      words.each_with_index do |item, index|
        if item[0..3] == 'file'
          @files = words[index-1].to_i
        elsif item[0..3] == 'inse'
          @inserts = words[index-1].to_i
        elsif item[0..3] == 'dele'
          @deletes = words[index-1].to_i
        end
      end
      @inserts -= @ignore_add
      @deletes -= @ignore_del
      @files = words[0].to_i
    elsif / [^|]+\|[ ]+[0-9]+ [+-]+/.match(line)
      if words[3] == '|'
        words = words[2..-1]
      end
      file_name = words[0].split()[-1]
      count = words[2].to_i
      plus_count = 0
      minus_count = 0
      plus_c = 0
      minus_c = 0
      if count > 0
        words[3].each_char do |c|
          if c == '+'
            plus_count += 1
          else
            minus_count += 1
          end
        end
        plus_c = count * plus_count / (plus_count + minus_count)
        minus_c = count - plus_c
      end
      ignore_files.each do |ext|
        comp_length = ext.length
        if file_name[-1 * comp_length..-1] == ext
          @ignore_add += plus_c
          @ignore_del += minus_c
          # puts "#{@id} #{@inserts} #{@deletes} #{plus_c} #{minus_c} #{minus_count} #{plus_count}"
          break
        end
      end
    end
  end
end

Instance Method Details

#authorObject



82
83
84
# File 'lib/gitstats.rb', line 82

def author()
  @author
end

#deletesObject



94
95
96
# File 'lib/gitstats.rb', line 94

def deletes
  @deletes
end

#filesObject



102
103
104
# File 'lib/gitstats.rb', line 102

def files
  @files
end

#insertsObject



90
91
92
# File 'lib/gitstats.rb', line 90

def inserts()
  @inserts
end

#locObject



98
99
100
# File 'lib/gitstats.rb', line 98

def loc
  @inserts + @deletes
end


78
79
80
# File 'lib/gitstats.rb', line 78

def print_info
  puts "Commit: #{@id} Author: #{@author} Time: #{@time} Files changed: #{@files} Inserts #{@inserts} Deletes #{@deletes}"
end

#set_author(author) ⇒ Object



86
87
88
# File 'lib/gitstats.rb', line 86

def set_author(author)
  @author = author
end