Class: GitStatistics::CommitSummary

Inherits:
SimpleDelegator
  • Object
show all
Defined in:
lib/git_statistics/commit_summary.rb

Defined Under Namespace

Classes: LanguageSummary

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(repo, commit) ⇒ CommitSummary

Returns a new instance of CommitSummary.



5
6
7
8
9
10
# File 'lib/git_statistics/commit_summary.rb', line 5

def initialize(repo, commit)
  super(commit)
  @repo = repo
  @diff = diff(commit.parents.first)
  @patches = @diff.patches
end

Instance Attribute Details

#patchesObject (readonly)

Returns the value of attribute patches.



3
4
5
# File 'lib/git_statistics/commit_summary.rb', line 3

def patches
  @patches
end

Instance Method Details

#added_filesObject

How many files were added in this commit



23
24
25
# File 'lib/git_statistics/commit_summary.rb', line 23

def added_files
  file_stats.count { |file| file.status == :added }
end

#additionsObject

How many total additions in this commit?



33
34
35
# File 'lib/git_statistics/commit_summary.rb', line 33

def additions
  commit_summary(:additions)
end

#deleted_filesObject

How many files were removed in this commit



18
19
20
# File 'lib/git_statistics/commit_summary.rb', line 18

def deleted_files
  file_stats.count { |file| file.status == :deleted }
end

#deletionsObject

How many total deletions in this commit?



38
39
40
# File 'lib/git_statistics/commit_summary.rb', line 38

def deletions
  commit_summary(:deletions)
end

#file_statsObject



47
48
49
# File 'lib/git_statistics/commit_summary.rb', line 47

def file_stats
  @cached_file_stats ||= @patches.map { |diff| DiffSummary.new(@repo, diff) }
end

#filenamesObject

Files touched in this commit



69
70
71
# File 'lib/git_statistics/commit_summary.rb', line 69

def filenames
  file_stats.map(&:filename)
end

#grouped_language_filesObject

Group file statistics by language



64
65
66
# File 'lib/git_statistics/commit_summary.rb', line 64

def grouped_language_files
  file_stats.group_by(&:language)
end

#languagesObject

Array of LanguageSummary objects (one for each language) for simple calculations



54
55
56
57
58
59
60
61
# File 'lib/git_statistics/commit_summary.rb', line 54

def languages
  grouped_language_files.map do |language, stats|
    additions = summarize(stats, :additions)
    deletions = summarize(stats, :deletions)
    net       = summarize(stats, :net)
    LanguageSummary.new(language, additions, deletions, net, added_files, deleted_files, modified_files)
  end
end

#merge?Boolean

A Git commit is a merge if it has more than one parent

Returns:

  • (Boolean)


13
14
15
# File 'lib/git_statistics/commit_summary.rb', line 13

def merge?
  parents.size > 1
end

#modified_filesObject

How many files were modified (not added/deleted) in this commit



28
29
30
# File 'lib/git_statistics/commit_summary.rb', line 28

def modified_files
  file_stats.count { |file| file.status == :modified }
end

#netObject

What is the net # of lines changes in this commit?



43
44
45
# File 'lib/git_statistics/commit_summary.rb', line 43

def net
  commit_summary(:net)
end