What about this patch?

Excerpts from Nicolas Pouillard's message of Fri Apr 04 18:09:13 +0200 2008:
> This seems to happen when one don't touch the forwarded
> email. Indeed most of the sup's code tend to assume that
> messages body are reprensented using an array of string
> *without* a trailing \n, except some parts of the code.
> 
> This patch enforce that. It could become even more strict
> by raising an error instead of logging in join_lines.
> ---
>  lib/sup/modes/edit-message-mode.rb |   11 +++++------
>  lib/sup/util.rb                    |    6 ++++++
>  2 files changed, 11 insertions(+), 6 deletions(-)
> 
> diff --git a/lib/sup/modes/edit-message-mode.rb 
> b/lib/sup/modes/edit-message-mode.rb
> index dd96002..c3634af 100644
> --- a/lib/sup/modes/edit-message-mode.rb
> +++ b/lib/sup/modes/edit-message-mode.rb
> @@ -216,7 +216,7 @@ protected
>    def parse_file fn
>      File.open(fn) do |f|
>        header = MBox::read_header f
> -      body = f.readlines
> +      body = f.readlines.map { |l| l.chomp }
>  
>        header.delete_if { |k, v| NON_EDITABLE_HEADERS.member? k }
>        header.each { |k, v| header[k] = parse_header k, v }
> @@ -307,9 +307,8 @@ protected
>    def build_message date
>      m = RMail::Message.new
>      m.header["Content-Type"] = "text/plain; charset=#{$encoding}"
> -    m.body = @body.join
> -    m.body = m.body
> -    m.body += sig_lines.join("\n") unless $config[:edit_signature]
> +    m.body = @body.join_lines
> +    m.body += sig_lines.join_lines unless $config[:edit_signature]
>  
>      ## there are attachments, so wrap body in an attachment of its own
>      unless @attachments.empty?
> @@ -367,7 +366,7 @@ EOS
>      end
>  
>      f.puts
> -    f.puts sanitize_body(@body.join)
> +    f.puts sanitize_body(@body.join_lines)
>      f.puts sig_lines if full unless $config[:edit_signature]
>    end  
>  
> @@ -412,7 +411,7 @@ private
>    end
>  
>    def top_posting?
> -    @body.join =~ /(\S+)\s*Excerpts from.*\n(>.*\n)+\s*\Z/
> +    @body.join_lines =~ /(\S+)\s*Excerpts from.*\n(>.*\n)+\s*\Z/
>    end
>  
>    def sig_lines
> diff --git a/lib/sup/util.rb b/lib/sup/util.rb
> index 99e73b4..544859c 100644
> --- a/lib/sup/util.rb
> +++ b/lib/sup/util.rb
> @@ -390,6 +390,12 @@ module Enumerable
>  end
>  
>  class Array
> +
> +  def join_lines
> +    Redwood::log "Some newlines are there..." if any? { |l| l =~ /\n/ }
> +    map { |l| l.chomp }.join("\n")
> +  end
> +
>    def flatten_one_level
>      inject([]) { |a, e| a + e }
>    end

-- 
Nicolas Pouillard aka Ertai

Attachment: signature.asc
Description: PGP signature

_______________________________________________
sup-talk mailing list
sup-talk@rubyforge.org
http://rubyforge.org/mailman/listinfo/sup-talk

Reply via email to