class DeepBlame::Blame
Attributes
data[R]
Public Class Methods
find(rev, path, start_line, end_line = nil)
click to toggle source
# File lib/deep_blame.rb, line 47 def self.find(rev, path, start_line, end_line = nil) end_line ||= start_line command = "git blame -b --incremental -l -L #{start_line},#{end_line} #{rev} #{path}" # puts "Running: #{command}" result = `#{command}` segments = result.scan(/[\s\S]+?filename.+/) segments.collect do |segment| new parse_segment(segment) end end
find_recursive_uniq(*args)
click to toggle source
# File lib/deep_blame.rb, line 58 def self.find_recursive_uniq(*args) result = find(*args) result.collect {|r| r.recursive }.flatten.uniq {|b| b.sha } end
new(data)
click to toggle source
# File lib/deep_blame.rb, line 79 def initialize(data) @data = data end
parse_segment(blame)
click to toggle source
# File lib/deep_blame.rb, line 63 def self.parse_segment(blame) first_line = blame.slice!(/.+/) hsh = [:sha, :line_number_original_file, :line_number_final_file, :line_number_group].inject({}) do |h, attr| h[attr] = first_line.slice!(/\w+/) ; h end hsh[:line_number_group] = nil if hsh[:line_number_group] == 0 blame.strip.split("\n").inject(hsh) do |h, line| key = line.slice!(/\S+/) key = key.gsub("-","_").to_sym h[key] = line.strip.empty? ? true : line.strip h end end
Public Instance Methods
committed_at()
click to toggle source
# File lib/deep_blame.rb, line 98 def committed_at @committed_at ||= Time.at(committer_time.to_i) end
parent()
click to toggle source
rev, path, start_line, end_line = nil
# File lib/deep_blame.rb, line 123 def parent if previous? @parent_results = self.class.find(previous_sha, previous_file, previous_line_number) puts "#{@parent_result.length} results for #{previous_sha}. Interesting." if @parent_results.length > 1 @parent_results.first end end
previous?()
click to toggle source
# File lib/deep_blame.rb, line 106 def previous? previous # or !boundary # ? end
previous_file()
click to toggle source
# File lib/deep_blame.rb, line 114 def previous_file previous.sub(/^\S+\s+/,'') end
previous_line_number()
click to toggle source
# File lib/deep_blame.rb, line 118 def previous_line_number line_number_original_file end
previous_sha()
click to toggle source
# File lib/deep_blame.rb, line 110 def previous_sha previous[/^\S+/] end
recursive()
click to toggle source
# File lib/deep_blame.rb, line 92 def recursive all = [self] all += parent.recursive if parent all end
short_sha()
click to toggle source
# File lib/deep_blame.rb, line 102 def short_sha sha[0..6] end