Alien-SVN

 view release on metacpan or  search on metacpan

src/subversion/subversion/bindings/swig/ruby/svn/commit-mailer.rb  view on Meta::CPAN

    % svn ls #{[@repository_uri, dir].compact.join("/")}@#{rev - 1}
INFO
       end + @info.updated_dirs.collect do |dir|
         "  Modified: #{dir}\n"
       end).join("\n")
    end

    def diff_info
      @info.diffs.collect do |key, values|
        [
         key,
         values.collect do |type, value|
           args = []
           rev = @info.revision
           case type
           when :added
             command = "cat"
           when :modified, :property_changed
             command = "diff"
             args.concat(["-r", "#{@info.revision - 1}:#{@info.revision}"])
           when :deleted
             command = "cat"
             rev -= 1
           when :copied
             command = "cat"
           else
             raise "unknown diff type: #{value.type}"
           end

           command += " #{args.join(' ')}" unless args.empty?

           link = [@repository_uri, key].compact.join("/")

           line_info = "+#{value.added_line} -#{value.deleted_line}"
           desc = <<-HEADER
  #{CHANGED_TYPE[value.type]}: #{key} (#{line_info})
#{CHANGED_MARK[value.type] * 67}
HEADER

           if add_diff?
             desc << value.body
           else
             desc << <<-CONTENT
    % svn #{command} #{link}@#{rev}
CONTENT
           end

           [desc, link]
         end
        ]
      end
    end

    def make_header(body_encoding, body_encoding_bit)
      headers = []
      headers << x_author
      headers << x_revision
      headers << x_repository
      headers << x_id
      headers << "MIME-Version: 1.0"
      headers << "Content-Type: text/plain; charset=#{body_encoding}"
      headers << "Content-Transfer-Encoding: #{body_encoding_bit}"
      headers << "From: #{from}"
      headers << "To: #{to.join(', ')}"
      headers << "Subject: #{make_subject}"
      headers << "Date: #{Time.now.rfc2822}"
      headers.find_all do |header|
        /\A\s*\z/ !~ header
      end.join("\n")
    end

    def detect_project
      return nil unless multi_project?
      project = nil
      @info.paths.each do |path, from_path,|
        [path, from_path].compact.each do |target_path|
          first_component = target_path.split("/", 2)[0]
          project ||= first_component
          return nil if project != first_component
        end
      end
      project
    end

    def affected_paths(project)
      paths = []
      [nil, :branches_path, :tags_path].each do |target|
        prefix = [project]
        prefix << send(target) if target
        prefix = prefix.compact.join("/")
        sub_paths = @info.sub_paths(prefix)
        if target.nil?
          sub_paths = sub_paths.find_all do |sub_path|
            sub_path == trunk_path
          end
        end
        paths.concat(sub_paths)
      end
      paths.uniq
    end

    def make_subject
      subject = ""
      project = detect_project
      subject << "#{@name} " if @name
      revision_info = "r#{@info.revision}"
      if show_path?
        _affected_paths = affected_paths(project)
        unless _affected_paths.empty?
          revision_info = "(#{_affected_paths.join(',')}) #{revision_info}"
        end
      end
      if project
        subject << "[#{project} #{revision_info}] "
      else
        subject << "#{revision_info}: "
      end
      subject << @info.log.lstrip.to_a.first.to_s.chomp
      NKF.nkf("-WM", subject)
    end



( run in 1.740 second using v1.01-cache-2.11-cpan-5b529ec07f3 )