class Git::Lib::RawLogParser
A private parser class to process the output of ‘git log –pretty=raw` @api private
Public Class Methods
Source
# File lib/git/lib.rb, line 579 def initialize(lines) @lines = lines @commits = [] @current_commit = nil @in_message = false end
Public Instance Methods
Source
# File lib/git/lib.rb, line 586 def parse @lines.each { |line| process_line(line.chomp) } finalize_commit @commits end
Private Instance Methods
Source
# File lib/git/lib.rb, line 628 def finalize_commit @commits << @current_commit if @current_commit end
Source
# File lib/git/lib.rb, line 594 def process_line(line) if line.empty? @in_message = !@in_message return end @in_message = false if @in_message && !line.start_with?(' ') @in_message ? process_message_line(line) : process_metadata_line(line) end
Source
# File lib/git/lib.rb, line 605 def process_message_line(line) @current_commit['message'] << "#{line[4..]}\n" end
Source
# File lib/git/lib.rb, line 609 def process_metadata_line(line) key, *value = line.split value = value.join(' ') case key when 'commit' start_new_commit(value) when 'parent' @current_commit['parent'] << value else @current_commit[key] = value end end
Source
# File lib/git/lib.rb, line 623 def start_new_commit(sha) finalize_commit @current_commit = { 'sha' => sha, 'message' => +'', 'parent' => [] } end