class Rake::Delphi::GitChangelog

Attributes

changelog[R]
opts[R]
processed[R]

Public Class Methods

new(task, opts) { |self| ... } click to toggle source
Calls superclass method Rake::Delphi::BasicTask::new
# File lib/rake/common/git.rb, line 34
def initialize(task, opts)
    super(task)
    @opts = {:filter => '.', :format => '%B'}
    @opts.merge!(opts) if opts.kind_of?(Hash)
    @changelog = @processed = []
    get_changelog
    yield self if block_given?
end

Public Instance Methods

changelog_string() click to toggle source
# File lib/rake/common/git.rb, line 47
def changelog_string
    @changelog.join("\n")
end
processed_string() click to toggle source
# File lib/rake/common/git.rb, line 43
def processed_string
    @processed.join("\n")
end

Private Instance Methods

charset() click to toggle source
# File lib/rake/common/git.rb, line 78
def charset
    opts[:logoutputencoding]
end
do_filter() click to toggle source
# File lib/rake/common/git.rb, line 82
def do_filter
    @filter = Regexp.new(@opts[:filter])
    @changelog.delete_if { |line| ! @filter.match(line) }
end
do_process() click to toggle source
# File lib/rake/common/git.rb, line 87
def do_process
    @processed = []
    return unless @opts[:process] && @opts[:process].size > 0
    @processed = @changelog.map do |line|
        line = line.dup
        process = @opts[:process]
        process = [process] unless process.kind_of?(Array)
        process.each do |filters|
            raise "`%s` must be a Hash" % [filters] unless filters.kind_of?(Hash)
            filters.each do |filter, subst|
                line.gsub!(filter, subst)
            end
        end
        line
    end
end
get_changelog() click to toggle source
# File lib/rake/common/git.rb, line 52
def get_changelog
    cmd = ['git']
    cmd << "-c i18n.logOutputEncoding=#{opts[:logoutputencoding]}" if opts[:logoutputencoding]
    # if :since is not set, do not use range
    rev = (opts[:since].to_s.empty? ? '' : "#{opts[:since]}..") + 'HEAD'
    cmd << 'log' << "--format=#{opts[:format]}" << rev
    Logger.trace(Logger::VERBOSE, cmd)
    @changelog=%x[#{cmd.join(' ')}].lines.to_a
    @changelog.map! do |line|
        line.chomp!
        if line.respond_to?(:force_encoding) \
                && opts[:logoutputencoding]
            line.force_encoding(opts[:logoutputencoding])
        end
        line
    end

    # delete empty lines
    @changelog.delete_if { |line| line.chomp.empty? }
    # unique lines only
    @changelog.uniq!
    do_filter
    do_process
    Logger.trace(Logger::TRACE, @changelog)
end