[sup-talk] [PATCH] Fix a bug about forwarding that trimmed out newlines.
Nicolas Pouillard
nicolas.pouillard at gmail.com
Fri Apr 4 12:09:13 EDT 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
--
1.5.5.rc3
More information about the sup-talk
mailing list