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
50 51 52 |
# File 'lib/grit/blame.rb', line 50 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 43 44 45 46 47 |
# 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) commit_id, old_lineno, lineno = m[1], m[2].to_i, m[3].to_i commits[commit_id] = nil if !commits.key?(commit_id) info[lineno] = [commit_id, old_lineno] end end # load all commits in single call @repo.batch(*commits.keys).each do |commit| commits[commit.id] = commit end # get it together info.sort.each do |lineno, (commit_id, old_lineno)| commit = commits[commit_id] final << BlameLine.new(lineno, old_lineno, commit, lines[lineno - 1]) end @lines = final end |