commits

in jekyll/plugins/recently_updated_generator.rb [166:208]


  def commits
    commits = []
    lines = %x{ git log -n50 --no-merges --name-status --pretty=format:%H%n%an%n%aD%n%s%n%b%n%n }
    lines = lines.lines
    while lines.length > 0 do
      commit = {
        :hash => lines.shift.strip,
        :author => lines.shift.strip,
        :date => DateTime.parse(lines.shift.strip),
        :subject => lines.shift.strip
      }

      body = [ lines.shift.strip ]
      line = ''
      begin
        prev_line = line
        line = lines.shift
        body << line.strip
      end until (line == "\n" and prev_line == "\n") or lines.length <= 0
      commit[:body] = body[0..-3]

      while lines[0] == "\n"
        lines.shift
      end

      files = []
      line = ''
      begin
        line = lines.shift
        if match = line.match(/(^\w)(\d*)\t([^\s]*)(?:\s+(.*))?/)
          
          type, similarity, file1, file2 = match.captures
          files << { :type => type, :similarity => similarity, :file => file1, :newfile => file2 }
        end
      end until line == "\n" or lines.length <= 0
      commit[:files] = files

      commits << commit
    end

    commits
  end