class Git::Lib::RawLogParser

A private parser class to process the output of ‘git log –pretty=raw` @api private

Public Class Methods

new(lines) click to toggle source
# File lib/git/lib.rb, line 579
def initialize(lines)
  @lines = lines
  @commits = []
  @current_commit = nil
  @in_message = false
end

Public Instance Methods

parse() click to toggle source
# File lib/git/lib.rb, line 586
def parse
  @lines.each { |line| process_line(line.chomp) }
  finalize_commit
  @commits
end

Private Instance Methods

finalize_commit() click to toggle source
# File lib/git/lib.rb, line 628
def finalize_commit
  @commits << @current_commit if @current_commit
end
process_line(line) click to toggle 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
process_message_line(line) click to toggle source
# File lib/git/lib.rb, line 605
def process_message_line(line)
  @current_commit['message'] << "#{line[4..]}\n"
end
process_metadata_line(line) click to toggle 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
start_new_commit(sha) click to toggle source
# File lib/git/lib.rb, line 623
def start_new_commit(sha)
  finalize_commit
  @current_commit = { 'sha' => sha, 'message' => +'', 'parent' => [] }
end