Class: Grit::Blame
- Inherits:
-
Object
- Object
- Grit::Blame
- Defined in:
- lib/grit/blame.rb
Defined Under Namespace
Classes: BlameLine
Instance Attribute Summary collapse
-
#lines ⇒ Object
readonly
Returns the value of attribute lines.
Instance Method Summary collapse
-
#initialize(repo, file, commit) ⇒ Blame
constructor
A new instance of Blame.
-
#inspect ⇒ Object
Pretty object inspection.
- #load_blame ⇒ Object
- #process_raw_blame(output) ⇒ Object
Constructor Details
#initialize(repo, file, commit) ⇒ Blame
Returns a new instance of Blame.
7 8 9 10 11 12 13 |
# File 'lib/grit/blame.rb', line 7 def initialize(repo, file, commit) @repo = repo @file = file @commit = commit @lines = [] load_blame end |
Instance Attribute Details
#lines ⇒ Object (readonly)
Returns the value of attribute lines.
5 6 7 |
# File 'lib/grit/blame.rb', line 5 def lines @lines end |
Instance Method Details
#inspect ⇒ Object
Pretty object inspection
45 46 47 |
# File 'lib/grit/blame.rb', line 45 def inspect %Q{#<Grit::Blame "#{@file} <#{@commit}>">} end |
#load_blame ⇒ Object
15 16 17 18 |
# File 'lib/grit/blame.rb', line 15 def load_blame output = @repo.git.blame({'p' => true}, @commit, '--', @file) process_raw_blame(output) end |
#process_raw_blame(output) ⇒ Object
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/grit/blame.rb', line 20 def process_raw_blame(output) lines, final = [], [] info, commits = {}, {} # process the output output.split("\n").each do |line| if line[0, 1] == "\t" lines << line[1, line.size] elsif m = /^(\w{40}) (\d+) (\d+)/.match(line) if !commits[m[1]] commits[m[1]] = @repo.commit(m[1]) end info[m[3].to_i] = [commits[m[1]], m[2].to_i] end end # get it together info.sort.each do |lineno, commit| final << BlameLine.new(lineno, commit[1], commit[0], lines[lineno - 1]) end @lines = final end |