module Wrongdoc::History

Public Instance Methods

initialize_history() click to toggle source
# File lib/wrongdoc/history.rb, line 2
def initialize_history
  @tags = @old_summaries = nil
end
old_summaries() click to toggle source
# File lib/wrongdoc/history.rb, line 43
def old_summaries
  @old_summaries ||= if File.exist?(".CHANGELOG.old")
    File.readlines(".CHANGELOG.old").inject({}) do |hash, line|
      version, summary = line.split(/ - /, 2)
      hash[version] = summary
      hash
    end
  else
    {}
  end
end
tag_uri(tag_name) click to toggle source

returns a cgit URI for a given tag_name

# File lib/wrongdoc/history.rb, line 7
def tag_uri(tag_name)
  uri = @cgit_uri.dup
  uri.path += "/tag/"
  uri.query = "id=#{tag_name}"
  uri
end
tags() click to toggle source

TODO: investigate Ruby git libraries

# File lib/wrongdoc/history.rb, line 15
def tags
  timefmt = '%Y-%m-%dT%H:%M:%SZ'
  @tags ||= %xgit tag -l`.split(/\n/).map do |tag|
    next if tag == "v0.0.0"
    if %r{\Av[\d\.]+} =~ tag
      type = %xgit cat-file -t #{tag}`.chomp
      user_type = { "tag" => "tagger", "commit" => "committer" }[type]
      user_type or abort "unable to determine what to do with #{type}=#{tag}"
      header, subject, body = %xgit cat-file #{type} #{tag}`.split(/\n\n/, 3)
      body ||= "initial" unless old_summaries.include?(tag)
      header = header.split(/\n/)

      tagger = header.grep(/\A#{user_type} /).first
      time = Time.at(tagger.split(/ /)[-2].to_i).utc
      {
        :time => time.strftime(timefmt),
        :ruby_time => time,
        :tagger_name => %r{^#{user_type} ([^<]+)}.match(tagger)[1].strip,
        :tagger_email => %r{<([^>]+)>}.match(tagger)[1].strip,
        :id => %xgit rev-parse refs/tags/#{tag}`.chomp!,
        :tag => tag,
        :subject => subject.strip,
        :body => (old = old_summaries[tag]) ? "#{old}\n#{body}" : body,
      }
    end
  end.compact.sort { |a,b| b[:time] <=> a[:time] }
end