commit ef385eced7f0a2bbc3bb909861a9f5d077b5f179
parent aaa852fbe513291144301bb31af50558177f891c
Author: Gaute Hope <eg@gaute.vetsj.com>
Date: Wed, 15 May 2013 10:34:45 +0200
Merge branch 'develop'
Conflicts:
lib/sup.rb
Diffstat:
124 files changed, 376 insertions(+), 3390 deletions(-)
diff --git a/.ditz-plugins b/.ditz-plugins
@@ -1 +0,0 @@
-- git
diff --git a/.gitignore b/.gitignore
@@ -1,7 +1,13 @@
# i use vi
*.swp
-.ditz-config
# i use emacs
*~
-# i use rake package task
+# artifact
pkg/
+*.gem
+# i have accidently added this one one too many times
+sup-exception-log.txt
+
+# bundler stuff
+Gemfile.lock
+.bundle
diff --git a/.travis.yml b/.travis.yml
@@ -0,0 +1,16 @@
+language: ruby
+
+rvm:
+ - 2.0.0
+ - 1.9.3
+ - 1.8.7
+
+before_install:
+ - sudo apt-get update -qq
+ - sudo apt-get install -qq uuid-dev uuid libncursesw5-dev libncursesw5
+
+script: bundle exec rake travis
+
+matrix:
+ allow_failures:
+ - rvm: 2.0.0
diff --git a/CONTRIBUTORS b/CONTRIBUTORS
@@ -1,26 +1,29 @@
William Morgan <wmorgan-sup at the masanjin dot nets>
Rich Lane <rlane at the club.cc.cmu dot edus>
+Gaute Hope <eg at the gaute.vetsj dot coms>
+Hamish Downer <dmishd at the gmail dot coms>
+Whyme Lyu <callme5long at the gmail dot coms>
+Sascha Silbe <sascha-pgp at the silbe dot orgs>
Ismo Puustinen <ismo at the iki dot fis>
Nicolas Pouillard <nicolas.pouillard at the gmail dot coms>
-Eric Sherman <hyperbolist at the gmail dot coms>
Michael Stapelberg <michael at the stapelberg dot des>
+Eric Sherman <hyperbolist at the gmail dot coms>
+Tero Tilus <tero at the tilus dot nets>
Ben Walton <bwalton at the artsci.utoronto dot cas>
Mike Stipicevic <stipim at the rpi dot edus>
Marcus Williams <marcus-sup at the bar-coded dot nets>
Lionel Ott <white.magic at the gmx dot des>
-Tero Tilus <tero at the tilus dot nets>
+Gaudenz Steinlin <gaudenz at the soziologie dot chs>
+Damien Leone <damien.leone at the fensalir dot frs>
Ingmar Vanhassel <ingmar at the exherbo dot orgs>
Mark Alexander <marka at the pobox dot coms>
-Gaute Hope <eg at the gaute.vetsj dot coms>
+Eric Weikl <eric.weikl at the tngtech dot coms>
Christopher Warrington <chrisw at the rice dot edus>
W. Trevor King <wking at the drexel dot edus>
-Gaudenz Steinlin <gaudenz at the soziologie dot chs>
Richard Brown <rbrown at the exherbo dot orgs>
Marc Hartstein <marc.hartstein at the alum.vassar dot edus>
-Sascha Silbe <sascha-pgp at the silbe dot orgs>
Israel Herraiz <israel.herraiz at the gmail dot coms>
Anthony Martinez <pi+sup at the pihost dot uss>
-Hamish Downer <dmishd at the gmail dot coms>
Bo Borgerson <gigabo at the gmail dot coms>
William Erik Baxter <web at the superscript dot coms>
Michael Hamann <michael at the content-space dot des>
@@ -29,26 +32,36 @@ Adeodato Simó <dato at the net.com.org dot ess>
Daniel Schoepe <daniel.schoepe at the googlemail dot coms>
Jason Petsod <jason at the petsod dot orgs>
Steve Goldman <sgoldman at the tower-research dot coms>
+Robin Burchell <viroteck at the viroteck dot nets>
+Peter Harkins <ph at the malaprop dot orgs>
Edward Z. Yang <ezyang at the MIT dot EDUs>
Decklin Foster <decklin at the red-bean dot coms>
Cameron Matheson <cam+sup at the cammunism dot orgs>
Carl Worth <cworth at the cworth dot orgs>
Jeff Balogh <its.jeff.balogh at the gmail dot coms>
-Andrew Pimlott <andrew at the pimlott dot nets>
Alex Vandiver <alexmv at the mit dot edus>
-Peter Harkins <ph at the malaprop dot orgs>
+Andrew Pimlott <andrew at the pimlott dot nets>
+Matías Aguirre <matiasaguirre at the gmail dot coms>
+Anthony Martinez <pi at the pihost dot uss>
Kornilios Kourtis <kkourt at the cslab.ece.ntua dot grs>
+Kevin Riggle <kevinr at the free-dissociation dot coms>
Giorgio Lando <patroclo7 at the gmail dot coms>
-Damien Leone <damien.leone at the fensalir dot frs>
Benoît PIERRE <benoit.pierre at the gmail dot coms>
Alvaro Herrera <alvherre at the alvh.no-ip dot orgs>
+Eric Weikl <eric.weikl at the gmx dot nets>
Jonah <Jonah at the GoodCoffee dot cas>
+ian <ian at the lorf dot orgs>
Adam Lloyd <adam at the alloy-d dot nets>
Todd Eisenberger <teisenbe at the andrew.cmu dot edus>
-ian <ian at the lorf dot orgs>
Steven Walter <swalter at the monarch.(none)>
-ian <itaylor at the uark dot edus>
-Jon M. Dugan <jdugan at the es dot nets>
+Alex Vandiver <alex at the chmrr dot nets>
Gregor Hoffleit <gregor at the sam.mediasupervision dot des>
+Jon M. Dugan <jdugan at the es dot nets>
+Matthieu Rakotojaona <matthieu.rakotojaona at the gmail dot coms>
Stefan Lundström <lundst at the snabb.(none)>
+Matthias Vallentin <vallentin at the icir dot orgs>
+Steven Lawrance <stl at the redhat dot coms>
+Jonathan Lassoff <jof at the thejof dot coms>
+ian <itaylor at the uark dot edus>
+Gregor Hoffleit <gregor at the hoffleit dot des>
Kirill Smelkov <kirr at the landau.phys.spbu dot rus>
diff --git a/Gemfile b/Gemfile
@@ -0,0 +1,3 @@
+source 'http://rubygems.org/'
+
+gemspec
diff --git a/History.txt b/History.txt
@@ -1,3 +1,8 @@
+== 0.13.0 / 2013-05-15
+
+* Bugfixes
+* Depend on ncursesw-sup
+
== 0.12.1 / 2011-01-23
* Depend on ncursesw rather than ncurses (Ruby 1.9 compatibility)
* Add sup-import-dump
diff --git a/README.md b/README.md
@@ -0,0 +1,70 @@
+# Sup
+
+A console-based email client with the best features of GMail, mutt and
+Emacs.
+
+## Installation
+
+[See the wiki][Installation]
+
+## Features / Problems
+
+Features:
+
+* GMail-like thread-centered archiving, tagging and muting
+* [Handling mail from multiple mbox and Maildir sources][sources]
+* Blazing fast full-text search with a [rich query language][search]
+* Multiple accounts - pick the right one when sending mail
+* [Ruby-programmable hooks][hooks]
+* Automatically tracking recent contacts
+
+Current limitations which will be fixed:
+
+* [Doesn't run on Ruby 2.0][ruby20]
+
+* Sup doesn't play nicely with other mail clients. Changes in Sup won't be
+ synced back to mail source.
+
+* Unix-centrism in MIME attachment handling and in sendmail invocation.
+
+## Problems
+
+Please report bugs to the [Github issue tracker](https://github.com/sup-heliotrope/sup/issues).
+
+## Links
+
+* [Homepage](http://supmua.org/)
+* [Code repository](https://github.com/sup-heliotrope/sup)
+* [Wiki](https://github.com/sup-heliotrope/sup/wiki)
+* IRC: [#sup @ freenode.net](http://webchat.freenode.net/?channels=#sup)
+* Mailing list: [sup-talk] and [sup-devel]
+
+## License
+
+```
+Copyright (c) 2013 Sup developers.
+Copyright (c) 2006--2009 William Morgan.
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301, USA.
+```
+
+[sources]: https://github.com/sup-heliotrope/sup/wiki/Adding-sources
+[hooks]: https://github.com/sup-heliotrope/sup/wiki/Hooks
+[search]: https://github.com/sup-heliotrope/sup/wiki/Searching-your-mail
+[Installation]: https://github.com/sup-heliotrope/sup/wiki#installation
+[ruby20]: https://github.com/sup-heliotrope/sup/wiki/Development#sup-014
+[sup-talk]: http://rubyforge.org/mailman/listinfo/sup-talk
+[sup-devel]: http://rubyforge.org/mailman/listinfo/sup-devel
diff --git a/README.txt b/README.txt
@@ -1,128 +0,0 @@
-sup
- by William Morgan <wmorgan-sup@masanjin.net>
- http://sup.rubyforge.org
-
-== DESCRIPTION:
-
-Sup is a console-based email client for people with a lot of email.
-It supports tagging, very fast full-text search, automatic contact-
-list management, and more. If you're the type of person who treats
-email as an extension of your long-term memory, Sup is for you.
-
-Sup makes it easy to:
-- Handle massive amounts of email.
-
-- Mix email from different sources: mbox files and Maildirs.
-
-- Instantaneously search over your entire email collection. Search over
- body text, or use a query language to combine search predicates in any
- way.
-
-- Handle multiple accounts. Replying to email sent to a particular
- account will use the correct SMTP server, signature, and from address.
-
-- Add custom code to customize Sup to whatever particular and bizarre
- needs you may have.
-
-- Organize email with user-defined labels, automatically track recent
- contacts, and much more!
-
-The goal of Sup is to become the email client of choice for nerds
-everywhere.
-
-== FEATURES/PROBLEMS:
-
-Features:
-
-- Scalability to massive amounts of email. Immediate startup and
- operability, regardless of how much amount of email you have.
-
-- Immediate full-text search of your entire email archive, using the
- Xapian query language. Search over message bodies, labels, from: and
- to: fields, or any combination thereof.
-
-- Thread-centrism. Operations are performed at the thread, not the
- message level. Entire threads are manipulated and viewed (with
- redundancies removed) at a time.
-
-- Labels instead of folders. Drop that tired old metaphor and you'll see
- how much easier it is to organize email.
-
-- GMail-style thread management. Archive a thread, and it will disappear
- from your inbox until someone replies. Kill a thread, and it will
- never come back to your inbox (but will still show up in searches.)
- Mark a thread as spam and you'll never again see it unless explicitly
- searching for spam.
-
-- Console based interface. No mouse clicking required!
-
-- Programmability. It's in Ruby. The code is good. It has an extensive
- hook system that makes it easy to extend and customize.
-
-- Multiple buffer support. Why be limited to viewing one thing at a
- time?
-
-- Tons of other little features, like automatic context-sensitive help,
- multi-message operations, MIME attachment viewing, recent contact list
- generation, etc.
-
-Current limitations which will be fixed:
-
-- Sup doesn't play nicely with other mail clients. If you alter a mail
- source (read, move, delete, etc) with another client Sup will punish
- you with a lengthy reindexing process.
-
-- Unix-centrism in MIME attachment handling and in sendmail invocation.
-
-== SYNOPSYS:
-
- 0. sup-config
- 1. sup
-
- Note that Sup never changes the contents of any mailboxes; it only
- indexes in to them. So it shouldn't ever corrupt your mail. The flip
- side is that if you change a mailbox (e.g. delete messages, or, in the
- case of mbox files, read an unread message) then Sup will be unable to
- load messages from that source and will ask you to run sup-sync
- --changed.
-
-== REQUIREMENTS:
-
- - xapian-full >= 1.1.3.2
- - ncurses >= 0.9.1
- - rmail >= 0.17
- - highline
- - net-ssh
- - trollop >= 1.12
- - lockfile
- - mime-types
- - gettext
- - fastthread
-
-== INSTALL:
-
-* gem install sup
-
-== PROBLEMS:
-
-See FAQ.txt for some common problems and their solutions.
-
-== LICENSE:
-
-Copyright (c) 2006--2009 William Morgan.
-
-This program is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2
-of the License, or (at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301, USA.
-
diff --git a/Rakefile b/Rakefile
@@ -1,64 +1,18 @@
-## is there really no way to make a rule for this?
-WWW_FILES = %w(www/index.html README.txt doc/Philosophy.txt doc/FAQ.txt doc/NewUserGuide.txt www/main.css)
-
-rule 'ss?.png' => 'ss?-small.png' do |t|
-end
-SCREENSHOTS = FileList["www/ss?.png"]
-SCREENSHOTS_SMALL = []
-SCREENSHOTS.each do |fn|
- fn =~ /ss(\d+)\.png/
- sfn = "www/ss#{$1}-small.png"
- file sfn => [fn] do |t|
- sh "cat #{fn} | pngtopnm | pnmscale -xysize 320 240 | pnmtopng > #{sfn}"
- end
- SCREENSHOTS_SMALL << sfn
-end
-
-task :upload_webpage => WWW_FILES do |t|
- sh "rsync -essh -cavz #{t.prerequisites * ' '} wmorgan@rubyforge.org:/var/www/gforge-projects/sup/"
-end
-
-task :upload_webpage_images => (SCREENSHOTS + SCREENSHOTS_SMALL) do |t|
- sh "rsync -essh -cavz #{t.prerequisites * ' '} wmorgan@rubyforge.org:/var/www/gforge-projects/sup/"
-end
-
-# vim: syntax=ruby
-# -*- ruby -*-
-task :upload_report do |t|
- sh "ditz html ditz"
- sh "rsync -essh -cavz ditz wmorgan@rubyforge.org:/var/www/gforge-projects/sup/"
-end
-
-$:.push "lib"
require 'rubygems'
-require "sup-files"
-require "sup-version"
-require 'rake/gempackagetask.rb'
-
-spec = Gem::Specification.new do |s|
- s.name = %q{sup}
- s.version = SUP_VERSION
- s.date = Time.now.to_s
- s.authors = ["William Morgan"]
- s.email = %q{wmorgan-sup@masanjin.net}
- s.summary = %q{A console-based email client with the best features of GMail, mutt, and emacs. Features full text search, labels, tagged operations, multiple buffers, recent contacts, and more.}
- s.homepage = %q{http://sup.rubyforge.org/}
- s.description = %q{Sup is a console-based email client for people with a lot of email. It supports tagging, very fast full-text search, automatic contact-list management, and more. If you're the type of person who treats email as an extension of your long-term memory, Sup is for you. Sup makes it easy to: - Handle massive amounts of email. - Mix email from different sources: mbox files (even across different machines), Maildir directories, POP accounts, and GMail accounts. - Instantaneously search over your entire email collection. Search over body text, or use a query language to combine search predicates in any way. - Handle multiple accounts. Replying to email sent to a particular account will use the correct SMTP server, signature, and from address. - Add custom code to handle certain types of messages or to handle certain types of text within messages. - Organize email with user-defined labels, automatically track recent contacts, and much more! The goal of Sup is to become the email client of choice for nerds everywhere.}
- s.files = SUP_FILES
- s.executables = SUP_EXECUTABLES
+require 'rake/testtask'
- s.add_dependency "xapian-full", ">= 1.2.1"
- s.add_dependency "ncursesw"
- s.add_dependency "rmail", ">= 0.17"
- s.add_dependency "highline"
- s.add_dependency "trollop", ">= 1.12"
- s.add_dependency "lockfile"
- s.add_dependency "mime-types", "~> 1"
- s.add_dependency "gettext"
+Rake::TestTask.new(:test) do |test|
+ test.libs << 'test'
+ test.test_files = FileList.new('test/test_*.rb')
+ test.verbose = true
end
-Rake::GemPackageTask.new(spec) do |pkg|
- pkg.need_tar = true
+require 'rubygems/package_task'
+# For those who don't have `rubygems-bundler` installed
+load 'sup.gemspec' unless defined? Redwood::Gemspec
+
+Gem::PackageTask.new(Redwood::Gemspec) do |pkg|
+ pkg.need_tar = true
end
-task :tarball => ["pkg/sup-#{SUP_VERSION}.tgz"]
+task :travis => [:test, :gem]
diff --git a/ReleaseNotes b/ReleaseNotes
@@ -1,3 +1,8 @@
+Release 0.13.0:
+
+Collection of bugfixes and stability fixes since 0.12.1. We now depend on our
+own ncursesw-sup fork.
+
Release 0.12.1:
This release changes the gem dependency on ncurses to ncursesw, which
diff --git a/bin/sup b/bin/sup
@@ -2,16 +2,12 @@
require 'rubygems'
-no_ncursesw = false
-begin
- require 'ncursesw'
-rescue LoadError
- require 'ncurses'
- no_ncursesw = true
-end
+require 'ncursesw'
no_gpgme = false
begin
+ # gpgme broke its API in 2.0, so make sure we have the old version for now.
+ gem 'gpgme', '=1.0.8'
require 'gpgme'
rescue LoadError
no_gpgme = true
@@ -26,10 +22,6 @@ if ENV['SUP_PROFILE']
RubyProf.start
end
-if no_ncursesw
- info "No 'ncursesw' gem detected. Install it for wide character support."
-end
-
if no_gpgme
info "No 'gpgme' gem detected. Install it for email encryption, decryption and signatures."
end
@@ -115,9 +107,10 @@ end
##
## BSD users: if libc.so.6 is not found, try installing compat6x.
require 'dl/import'
+require 'rbconfig'
module LibC
extend DL.const_defined?(:Importer) ? DL::Importer : DL::Importable
- setlocale_lib = case Config::CONFIG['arch']
+ setlocale_lib = case RbConfig::CONFIG['arch']
when /darwin/; "libc.dylib"
when /cygwin/; "cygwin1.dll"
else; "libc.so.6"
@@ -132,7 +125,7 @@ module LibC
rescue RuntimeError => e
warn "cannot dlload setlocale(); ncurses wide character support probably broken."
warn "dlload error was #{e.class}: #{e.message}"
- if Config::CONFIG['arch'] =~ /bsd/
+ if RbConfig::CONFIG['arch'] =~ /bsd/
warn "BSD variant detected. You may have to install a compat6x package to acquire libc."
end
end
@@ -298,7 +291,10 @@ begin
b, new = bm.spawn_unless_exists("Contact List") { ContactListMode.new }
b.mode.load_in_background if new
when :search
- query = BufferManager.ask :search, "Search all messages (enter for saved searches): "
+ completions = LabelManager.all_labels.map { |l| "label:#{LabelManager.string_for l}" }
+ completions = completions.each { |l| l.force_encoding 'UTF-8' if l.methods.include?(:encoding) }
+ completions += ["from:", "to:", "after:", "before:", "date:", "limit:", "AND", "OR", "NOT"]
+ query = BufferManager.ask_many_with_completions :search, "Search all messages (enter for saved searches): ", completions
unless query.nil?
if query.empty?
bm.spawn_unless_exists("Saved searches") { SearchListMode.new }
@@ -415,14 +411,14 @@ unless Redwood::exceptions.empty?
end
$stderr.puts <<EOS
----------------------------------------------------------------
-I'm very sorry. It seems that an error occurred in Sup. Please
-accept my sincere apologies. Please submit the contents of
+We are very sorry. It seems that an error occurred in Sup. Please
+accept our sincere apologies. Please submit the contents of
#{BASE_DIR}/exception-log.txt and a brief report of the
-circumstances to http://masanjin.net/sup-bugs/ so that I might
-address this problem. Thank you!
+circumstances to https://github.com/sup-heliotrope/sup/issues so that
+we might address this problem. Thank you!
Sincerely,
-William
+The Sup Developers
----------------------------------------------------------------
EOS
Redwood::exceptions.each do |e, name|
diff --git a/bin/sup-cmd b/bin/sup-cmd
@@ -1,138 +0,0 @@
-#!/usr/bin/env ruby
-require 'rubygems'
-require 'trollop'
-require 'sup'
-require 'sup/client'
-require 'pp'
-require 'yaml'
-include Redwood
-
-SUB_COMMANDS = %w(query count label add)
-global_opts = Trollop::options do
- #version = "sup-cmd (sup #{Redwood::VERSION})"
- banner <<EOS
-Connect to a running sup-server.
-
-Usage:
- sup-cmd [global options] command [options]
-
- Valid commands: #{SUB_COMMANDS * ', '}
-
- Global options:
-EOS
-
- opt :host, "server address", :type => :string, :default => 'localhost', :short => 'o'
- opt :port, "server port", :type => :int, :default => 4300
- opt :socket, "unix domain socket path", :type => :string, :default => nil
- opt :verbose
-
- conflicts :host, :socket
- conflicts :port, :socket
-
- stop_on SUB_COMMANDS
-end
-
-cmd = ARGV.shift
-cmd_opts = case cmd
-when "query"
- Trollop.options do
- opt :offset, "Offset", :default => 0, :type => :int
- opt :limit, "Limit", :type => :int
- opt :raw, "Retrieve raw message text", :default => false
- end
-when "count"
- Trollop.options do
- end
-when "label"
- Trollop.options do
- opt :add_labels, "Labels to add", :default => ""
- opt :remove_labels, "Labels to remove", :default => ""
- end
-when "add"
- Trollop.options do
- opt :labels, "Labels separated by commas", :default => ""
- opt :mbox, "Treat input files as mboxes", :default => false
- end
-else
- Trollop::die "unrecognized command #{cmd.inspect}"
-end
-
-class SupCmd < Redwood::Client
- def initialize cmd, args, opts
- @cmd = cmd
- @opts = opts
- @args = args
- super()
- end
-
- def get_query
- @args.first or fail "query argument required"
- end
-
- def connection_established
- case @cmd
- when "query"
- query get_query, @opts[:offset], @opts[:limit], @opts[:raw] do |result|
- if result
- puts YAML.dump(result['summary'])
- puts YAML.dump(result['raw']) if @opts[:raw]
- else
- close_connection
- end
- end
- when "count"
- count(get_query) do |x|
- puts x
- close_connection
- end
- when "label"
- label get_query, @opts[:remove_labels].split(','), @opts[:add_labels].split(',') do
- close_connection
- end
- when "add"
- ARGF.binmode
- labels = @opts[:labels].split(',')
- get_message = lambda do
- return ARGF.gets(nil) unless @opts[:mbox]
- str = ""
- l = ARGF.gets
- str << l until ARGF.closed? || ARGF.eof? || MBox::is_break_line?(l = ARGF.gets)
- str.empty? ? nil : str
- end
- i_s = i = 0
- t = Time.now
- while raw = get_message[]
- i += 1
- t_d = Time.now - t
- if t_d >= 5
- i_d = i - i_s
- puts "indexed #{i} messages (#{i_d/t_d} m/s)" if global_opts[:verbose]
- t = Time.now
- i_s = i
- end
- add raw, labels do
- close_connection
- end
- end
- else
- fail "#{@cmd} command unimplemented"
- close_connection
- end
- end
-
- def unbind
- EM.stop
- end
-end
-
-
-EM.run do
- if global_opts[:socket]
- EM.connect global_opts[:socket], SupCmd, cmd, ARGV, cmd_opts.merge(global_opts)
- else
- EM.connect global_opts[:host], global_opts[:port], SupCmd, cmd, ARGV, cmd_opts.merge(global_opts)
- end
-end
-
-exit 0
-
diff --git a/bin/sup-config b/bin/sup-config
@@ -2,7 +2,6 @@
require 'rubygems'
require 'highline/import'
-require 'yaml'
require 'trollop'
require "sup"
@@ -25,7 +24,7 @@ def axe q, default=nil
else
ask "#{q}: "
end
- ans.empty? ? default : ans
+ ans.empty? ? default : ans.to_s
end
def axe_yes q, default="n"
diff --git a/bin/sup-server b/bin/sup-server
@@ -1,44 +0,0 @@
-#!/usr/bin/env ruby
-require 'rubygems'
-require 'trollop'
-require 'sup'
-require 'sup/server'
-require 'pp'
-require 'yaml'
-include Redwood
-
-global_opts = Trollop::options do
- #version = "sup-cmd (sup #{Redwood::VERSION})"
- banner <<EOS
-Interact with a Sup index.
-
-Usage:
- sup-server [options]
-EOS
-
- opt :host, "address to listen on", :type => :string, :default => 'localhost', :short => 'o'
- opt :port, "port to listen on", :type => :int, :default => 4300
- opt :verbose
-end
-
-Redwood.start
-Index.init
-Index.lock_interactively or exit
-begin
- if(s = Redwood::SourceManager.source_for SentManager.source_uri)
- SentManager.source = s
- else
- Redwood::SourceManager.add_source SentManager.default_source
- end
-
- Index.load
-
- EM.run do
- EM.start_server global_opts[:host], global_opts[:port],
- Redwood::Server, Index.instance
- EM.next_tick { puts "ready" }
- end
-
-ensure
- Index.unlock
-end
diff --git a/bugs/issue-0240b36671ecb019e57ef27e0901bff055385371.yaml b/bugs/issue-0240b36671ecb019e57ef27e0901bff055385371.yaml
@@ -1,22 +0,0 @@
---- !ditz.rubyforge.org,2008-03-06/issue
-title: messages with unparseable date headers are being discarded entirely
-desc: it's better to forge the date headers and keep the messages
-type: :bugfix
-component: sup
-release: "0.5"
-reporter: William Morgan <wmorgan-sup@masanjin.net>
-status: :closed
-disposition: fixed
-creation_time: 2008-03-07 03:57:25.399978 Z
-references: []
-
-id: 0240b36671ecb019e57ef27e0901bff055385371
-log_events:
-- - 2008-03-07 03:57:25.400014 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - created
- - ""
-- - 2008-03-07 03:57:29.249827 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - changed status from unstarted to fixed
- - ""
diff --git a/bugs/issue-08d6bae05fa885bf6fcae39f864eb923c1e9a79e.yaml b/bugs/issue-08d6bae05fa885bf6fcae39f864eb923c1e9a79e.yaml
@@ -1,27 +0,0 @@
---- !ditz.rubyforge.org,2008-03-06/issue
-title: reply-from hook
-desc: "hook for setting the from: address of a reply programmatically"
-type: :feature
-component: hooks
-release: "0.6"
-reporter: William Morgan <wmorgan-sup@masanjin.net>
-status: :closed
-disposition: :fixed
-creation_time: 2008-06-19 17:58:26.142289 Z
-references: []
-
-id: 08d6bae05fa885bf6fcae39f864eb923c1e9a79e
-log_events:
-- - 2008-06-19 17:58:27.334371 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - created
- - ""
-- - 2008-06-19 17:58:40.526270 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - changed status from unstarted to in_progress
- - branch reply-from-hook, merged into next
-- - 2008-07-30 23:41:56.898257 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - closed with disposition fixed
- - merged into master
-git_branch: reply-from-hook
diff --git a/bugs/issue-09479a2ada22c2a0d76427e12ef2514d4753d070.yaml b/bugs/issue-09479a2ada22c2a0d76427e12ef2514d4753d070.yaml
@@ -1,18 +0,0 @@
---- !ditz.rubyforge.org,2008-03-06/issue
-title: forwarded messages should be threaded under original
-desc: ""
-type: :feature
-component: threading
-release:
-reporter: William Morgan <wmorgan-sup@masanjin.net>
-status: :unstarted
-disposition:
-creation_time: 2008-06-07 23:45:11.606455 Z
-references: []
-
-id: 09479a2ada22c2a0d76427e12ef2514d4753d070
-log_events:
-- - 2008-06-07 23:45:12.746568 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - created
- - ""
diff --git a/bugs/issue-15738247f939d20f8f202f80ccb85d9ad92101e0.yaml b/bugs/issue-15738247f939d20f8f202f80ccb85d9ad92101e0.yaml
@@ -1,18 +0,0 @@
---- !ditz.rubyforge.org,2008-03-06/issue
-title: command to reload hooks
-desc: useful for debugging hooks without having to restart sup each time
-type: :feature
-component: hooks
-release:
-reporter: William Morgan <wmorgan-ditz@masanjin.net>
-status: :unstarted
-disposition:
-creation_time: 2008-05-09 06:09:46.127686 Z
-references: []
-
-id: 15738247f939d20f8f202f80ccb85d9ad92101e0
-log_events:
-- - 2008-05-09 06:09:46.803222 Z
- - William Morgan <wmorgan-ditz@masanjin.net>
- - created
- - ""
diff --git a/bugs/issue-182841e15d6909892adf43678bae03597ce10519.yaml b/bugs/issue-182841e15d6909892adf43678bae03597ce10519.yaml
@@ -1,25 +0,0 @@
---- !ditz.rubyforge.org,2008-03-06/issue
-title: external mime viewing logic not quite right
-desc: |-
- weird things happen depending on the specifics on whether you have
- certain binaries in your path, or you implement the mime-view hook,
- you can get very weird behavior
-type: :bugfix
-component: hooks
-release: "0.5"
-reporter: William Morgan <wmorgan-sup@masanjin.net>
-status: :closed
-disposition: fixed
-creation_time: 2008-03-07 04:05:53.956188 Z
-references: []
-
-id: 182841e15d6909892adf43678bae03597ce10519
-log_events:
-- - 2008-03-07 04:05:53.956222 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - created
- - ""
-- - 2008-03-07 04:06:02.239869 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - changed status from unstarted to fixed
- - ""
diff --git a/bugs/issue-1a1527438c2d198eae9a264ce9e6b847854d9837.yaml b/bugs/issue-1a1527438c2d198eae9a264ce9e6b847854d9837.yaml
@@ -1,30 +0,0 @@
---- !ditz.rubyforge.org,2008-03-06/issue
-title: attachment name searchability
-desc: ""
-type: :feature
-component: indexing
-release: "0.6"
-reporter: William Morgan <wmorgan-sup@masanjin.net>
-status: :closed
-disposition: :fixed
-creation_time: 2008-05-25 03:53:44.524558 Z
-references: []
-
-id: 1a1527438c2d198eae9a264ce9e6b847854d9837
-log_events:
-- - 2008-05-25 03:53:45.177580 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - created
- - ""
-- - 2008-05-25 03:54:05.978412 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - changed status from unstarted to in_progress
- - branch attachments, merged into next
-- - 2008-05-31 17:09:04.254381 Z
- - William Morgan <wmorgan-ditz@masanjin.net>
- - commented
- - see {issue 65506670167642cc581956bc1b25c26b5bff215b} and {issue 7a68c1e7120a8540c7c51c6095f4815918d16641}
-- - 2008-06-19 18:20:41.656527 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - closed issue with disposition fixed
- - merged into master
diff --git a/bugs/issue-2312263b6a2b7de6ae1ec4ab315c7829763e61be.yaml b/bugs/issue-2312263b6a2b7de6ae1ec4ab315c7829763e61be.yaml
@@ -1,22 +0,0 @@
---- !ditz.rubyforge.org,2008-03-06/issue
-title: sup-sync-back "nothing to do" error message not informative
-desc: should tell the user that one of the four magic options are required
-type: :bugfix
-component: sup-sync-back
-release: "0.5"
-reporter: William Morgan <wmorgan-sup@masanjin.net>
-status: :closed
-disposition: fixed
-creation_time: 2008-03-07 03:37:41.693484 Z
-references: []
-
-id: 2312263b6a2b7de6ae1ec4ab315c7829763e61be
-log_events:
-- - 2008-03-07 03:37:41.693520 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - created
- - ""
-- - 2008-03-07 03:37:46.110644 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - changed status from unstarted to fixed
- - ""
diff --git a/bugs/issue-23658477a445c2e61405fecb4cb641a2298caba6.yaml b/bugs/issue-23658477a445c2e61405fecb4cb641a2298caba6.yaml
@@ -1,27 +0,0 @@
---- !ditz.rubyforge.org,2008-03-06/issue
-title: wide character ncurses support
-desc: ""
-type: :feature
-component: curses
-release:
-reporter: William Morgan <wmorgan-sup@masanjin.net>
-status: :in_progress
-disposition:
-creation_time: 2008-04-22 22:43:23.153185 Z
-references: []
-
-id: 23658477a445c2e61405fecb4cb641a2298caba6
-log_events:
-- - 2008-04-22 22:43:24.808717 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - created
- - ""
-- - 2008-04-22 22:45:52.511820 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - changed status from unstarted to in_progress
- - |-
- Branch 'ncurses-widechar' has been merged into next.
-
- Branch "ncursesw" now has a copy of the ncurses 0.9.2 gem with wide character
- modifications, and a script "run-this-for-sup.sh" to build and install it
- (assuming you're running from git, of course.)
diff --git a/bugs/issue-2673f091c15dd90222a59621a1842d4ef0a743f7.yaml b/bugs/issue-2673f091c15dd90222a59621a1842d4ef0a743f7.yaml
@@ -1,19 +0,0 @@
---- !ditz.rubyforge.org,2008-03-06/issue
-title: make sup-sync-back work on IMAP folders
-desc: ""
-type: :feature
-component: sup-sync-back
-release:
-reporter: William Morgan <wmorgan-sup@masanjin.net>
-status: :unstarted
-disposition:
-creation_time: 2008-10-14 01:14:08.690909 Z
-references: []
-
-id: 2673f091c15dd90222a59621a1842d4ef0a743f7
-log_events:
-- - 2008-10-14 01:14:09.898338 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - created
- - ""
-git_branch:
diff --git a/bugs/issue-2a0363cdf9d25edfa2a04b21299a538365e8b319.yaml b/bugs/issue-2a0363cdf9d25edfa2a04b21299a538365e8b319.yaml
@@ -1,30 +0,0 @@
---- !ditz.rubyforge.org,2008-03-06/issue
-title: gpg mode hook
-desc: |-
- need a hook for controlling the default setting of the gpg mode (none,
- sign, sign & encrypt) in reply-mode, based on the gpg mode of the original
- message.
-type: :feature
-component: hooks
-release:
-reporter: William Morgan <wmorgan-sup@masanjin.net>
-status: :unstarted
-disposition:
-creation_time: 2008-03-07 02:42:29.391022 Z
-references: []
-
-id: 2a0363cdf9d25edfa2a04b21299a538365e8b319
-log_events:
-- - 2008-03-07 02:42:29.391058 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - created
- - ""
-- - 2008-04-20 21:18:14.263736 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - assigned to release 0.6 from 0.5
- - ""
-- - 2008-07-31 00:54:02.960978 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - unassigned from release 0.6
- - ""
-git_branch:
diff --git a/bugs/issue-2e74aa6843feee4daefe740b6e3f1fc54ff4bfcb.yaml b/bugs/issue-2e74aa6843feee4daefe740b6e3f1fc54ff4bfcb.yaml
@@ -1,22 +0,0 @@
---- !ditz.rubyforge.org,2008-03-06/issue
-title: oldest-first thread ordering
-desc: ""
-type: :feature
-component: indexing
-release:
-reporter: Matt Liggett <mml@pobox.com>
-status: :unstarted
-disposition:
-creation_time: 2008-03-14 18:33:01.603318 Z
-references:
-- http://rubyforge.org/pipermail/sup-talk/2008-March/001271.html
-id: 2e74aa6843feee4daefe740b6e3f1fc54ff4bfcb
-log_events:
-- - 2008-03-14 18:33:01.603569 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - created
- - ""
-- - 2008-03-14 18:33:31.116057 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - added reference 1
- - ""
diff --git a/bugs/issue-314f0cdac8d1998c46759a4ebef9077999bcef09.yaml b/bugs/issue-314f0cdac8d1998c46759a4ebef9077999bcef09.yaml
@@ -1,18 +0,0 @@
---- !ditz.rubyforge.org,2008-03-06/issue
-title: new user welcome screen the first time you start up
-desc: ""
-type: :feature
-component: curses
-release:
-reporter: William Morgan <wmorgan-sup@masanjin.net>
-status: :unstarted
-disposition:
-creation_time: 2008-03-07 02:44:24.399133 Z
-references: []
-
-id: 314f0cdac8d1998c46759a4ebef9077999bcef09
-log_events:
-- - 2008-03-07 02:44:24.399167 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - created
- - ""
diff --git a/bugs/issue-3408c200a5f47f92d12b5c063a00ce891c2ba4ce.yaml b/bugs/issue-3408c200a5f47f92d12b5c063a00ce891c2ba4ce.yaml
@@ -1,22 +0,0 @@
---- !ditz.rubyforge.org,2008-03-06/issue
-title: "email header parsing: space doesn't need to follow colon"
-desc: ""
-type: :bugfix
-component: sup
-release: "0.5"
-reporter: William Morgan <wmorgan-sup@masanjin.net>
-status: :closed
-disposition: fixed
-creation_time: 2008-03-07 04:31:55.733379 Z
-references: []
-
-id: 3408c200a5f47f92d12b5c063a00ce891c2ba4ce
-log_events:
-- - 2008-03-07 04:31:55.733416 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - created
- - ""
-- - 2008-03-07 04:31:59.580856 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - changed status from unstarted to fixed
- - ""
diff --git a/bugs/issue-3441fb8b7f955d625633d06fa0bf67a9afab046e.yaml b/bugs/issue-3441fb8b7f955d625633d06fa0bf67a9afab046e.yaml
@@ -1,18 +0,0 @@
---- !ditz.rubyforge.org,2008-03-06/issue
-title: saving a message as a draft drops attachments
-desc: ""
-type: :bugfix
-component: sup
-release:
-reporter: William Morgan <wmorgan-ditz@masanjin.net>
-status: :unstarted
-disposition:
-creation_time: 2008-05-25 02:14:13.362087 Z
-references: []
-
-id: 3441fb8b7f955d625633d06fa0bf67a9afab046e
-log_events:
-- - 2008-05-25 02:14:14.224040 Z
- - William Morgan <wmorgan-ditz@masanjin.net>
- - created
- - ""
diff --git a/bugs/issue-38d6f805b0c8bad013ec73f56e6245c890528591.yaml b/bugs/issue-38d6f805b0c8bad013ec73f56e6245c890528591.yaml
@@ -1,29 +0,0 @@
---- !ditz.rubyforge.org,2008-03-06/issue
-title: "'m' in edit-message-mode should prompt for a to: with a default"
-desc: |-
- the current behavior is to just go ahead and compose the message, which
- is irritating if you're just trying to compose a message incidental to
- having highlighted someone's email address.
-type: :bugfix
-component: curses
-release: "0.6"
-reporter: William Morgan <wmorgan-sup@masanjin.net>
-status: :closed
-disposition: :fixed
-creation_time: 2008-03-07 02:37:38.905689 Z
-references: []
-
-id: 38d6f805b0c8bad013ec73f56e6245c890528591
-log_events:
-- - 2008-03-07 02:37:38.905723 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - created
- - ""
-- - 2008-04-20 21:44:06.473431 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - assigned to release 0.6 from 0.5
- - ""
-- - 2008-05-25 03:47:42.600153 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - closed issue with disposition fixed
- - fixed in master
diff --git a/bugs/issue-3b25f1d56b9be533edaf232b9e60dc24e00cba0b.yaml b/bugs/issue-3b25f1d56b9be533edaf232b9e60dc24e00cba0b.yaml
@@ -1,26 +0,0 @@
---- !ditz.rubyforge.org,2008-03-06/issue
-title: maildir speedups
-desc: caching mtimes, using dir mtimes as an upper bound on file mtimes
-type: :feature
-component: maildir
-release: "0.6"
-reporter: William Morgan <wmorgan-sup@masanjin.net>
-status: :closed
-disposition: :fixed
-creation_time: 2008-05-25 02:30:42.010965 Z
-references: []
-
-id: 3b25f1d56b9be533edaf232b9e60dc24e00cba0b
-log_events:
-- - 2008-05-25 02:30:42.815974 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - created
- - ""
-- - 2008-05-25 02:30:59.062438 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - changed status from unstarted to in_progress
- - branch maildir-speedups. merged into next.
-- - 2008-06-19 18:09:27.239553 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - closed issue with disposition fixed
- - merged into master
diff --git a/bugs/issue-42ab0840f9a1924f1c0561e8ddcf7e6988543ba0.yaml b/bugs/issue-42ab0840f9a1924f1c0561e8ddcf7e6988543ba0.yaml
@@ -1,26 +0,0 @@
---- !ditz.rubyforge.org,2008-03-06/issue
-title: query normalization breaking disjunctive queries, date modifers, etc
-desc: ""
-type: :bugfix
-component: indexing
-release: "0.5"
-reporter: William Morgan <wmorgan-sup@masanjin.net>
-status: :closed
-disposition: :fixed
-creation_time: 2008-03-07 03:39:26.683059 Z
-references: []
-
-id: 42ab0840f9a1924f1c0561e8ddcf7e6988543ba0
-log_events:
-- - 2008-03-07 03:39:26.683093 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - created
- - ""
-- - 2008-03-07 03:50:16.796313 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - changed status from unstarted to in_progress
- - ""
-- - 2008-04-20 22:10:39.075075 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - closed issue with disposition fixed
- - ""
diff --git a/bugs/issue-46df983ccdb75408a37b3911472d4015664a3cf6.yaml b/bugs/issue-46df983ccdb75408a37b3911472d4015664a3cf6.yaml
@@ -1,20 +0,0 @@
---- !ditz.rubyforge.org,2008-03-06/issue
-title: curses interface generally sluggish
-desc: |-
- moving cursors around, etc is sluggish. should be faster. will require
- profiling. might require dipping into the C level.
-type: :bugfix
-component: curses
-release:
-reporter: William Morgan <wmorgan-sup@masanjin.net>
-status: :unstarted
-disposition:
-creation_time: 2008-05-19 23:38:35.608104 Z
-references: []
-
-id: 46df983ccdb75408a37b3911472d4015664a3cf6
-log_events:
-- - 2008-05-19 23:38:36.229747 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - created
- - ""
diff --git a/bugs/issue-47aab6443b6c107c3067cdb614186099db570acf.yaml b/bugs/issue-47aab6443b6c107c3067cdb614186099db570acf.yaml
@@ -1,37 +0,0 @@
---- !ditz.rubyforge.org,2008-03-06/issue
-title: before-add-hook not applied to sent messages
-desc: |-
- they're not being polled in the regular way but in a vestigal irregular
- way
-type: :bugfix
-component: sup
-release: "0.5"
-reporter: William Morgan <wmorgan-sup@masanjin.net>
-status: :closed
-disposition: fixed
-creation_time: 2008-03-07 03:54:10.773413 Z
-references:
-- http://rubyforge.org/pipermail/sup-talk/2008-March/001259.html
-- http://rubyforge.org/pipermail/sup-talk/2008-February/001203.html
-id: 47aab6443b6c107c3067cdb614186099db570acf
-log_events:
-- - 2008-03-07 03:54:10.773449 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - created
- - ""
-- - 2008-03-07 03:54:15.699906 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - changed status from unstarted to in_progress
- - ""
-- - 2008-03-08 22:02:45.840451 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - changed status from in_progress to fixed
- - merged down to master.
-- - 2008-03-08 22:16:00.346710 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - added reference 1
- - ""
-- - 2008-03-08 22:22:02.528552 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - added reference 2
- - ""
diff --git a/bugs/issue-4af242013994ae557e431ba350a92c4f9e1739ef.yaml b/bugs/issue-4af242013994ae557e431ba350a92c4f9e1739ef.yaml
@@ -1,28 +0,0 @@
---- !ditz.rubyforge.org,2008-03-06/issue
-title: sup-sync shouldn't save the index and sources if an error occurred
-desc: |-
- If the error was caused by a particular message, saving the source file
- will move the pointer past the message, so it will never get added.
-type: :bugfix
-component: sup-sync
-release: "0.5"
-reporter: William Morgan <wmorgan-sup@masanjin.net>
-status: :closed
-disposition: fixed
-creation_time: 2008-03-07 04:14:07.913103 Z
-references: []
-
-id: 4af242013994ae557e431ba350a92c4f9e1739ef
-log_events:
-- - 2008-03-07 04:14:07.913140 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - created
- - ""
-- - 2008-03-07 04:14:12.599051 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - changed status from unstarted to fixed
- - ""
-- - 2008-03-09 18:29:51.789364 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - changed description
- - ""
diff --git a/bugs/issue-4daa2721dac8dfeb8730ee081f73b6c62702bd3e.yaml b/bugs/issue-4daa2721dac8dfeb8730ee081f73b6c62702bd3e.yaml
@@ -1,23 +0,0 @@
---- !ditz.rubyforge.org,2008-03-06/issue
-title: last message of every source is returned twice during polling
-desc: http://rubyforge.org/pipermail/sup-talk/2008-April/001358.html
-type: :bugfix
-component: sup
-release:
-reporter: William Morgan <wmorgan-sup@masanjin.net>
-status: :unstarted
-disposition:
-creation_time: 2008-05-01 01:11:50.650800 Z
-references: []
-
-id: 4daa2721dac8dfeb8730ee081f73b6c62702bd3e
-log_events:
-- - 2008-05-01 01:11:51.434589 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - created
- - ""
-- - 2008-07-31 00:54:39.589377 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - unassigned from release 0.6
- - ""
-git_branch:
diff --git a/bugs/issue-4e501973cea5bd1f28739ae4cea98edce8249895.yaml b/bugs/issue-4e501973cea5bd1f28739ae4cea98edce8249895.yaml
@@ -1,32 +0,0 @@
---- !ditz.rubyforge.org,2008-03-06/issue
-title: thread joining is not preserved when reindexing
-desc: |
- the current thread joining just adds references to the index entries. that's
- fine but if the messages are reindexed, the references obviously won't be
- there.
- i think we need to add some separate blob of information somewhere that
- maintains these references, which sup-sync is aware of.
-
- if we're going down the bdb route for state preservation, that might be an
- obvious place to put this too, because it's essentially a hashtable keyed on
- message ids.
-
-type: :bugfix
-component: indexing
-release:
-reporter: William Morgan <wmorgan-sup@masanjin.net>
-status: :unstarted
-disposition:
-creation_time: 2008-03-14 18:39:59.697902 Z
-references:
-- http://rubyforge.org/pipermail/sup-talk/2008-March/001270.html
-id: 4e501973cea5bd1f28739ae4cea98edce8249895
-log_events:
-- - 2008-03-14 18:39:59.698163 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - created
- - ""
-- - 2008-03-14 18:40:26.559418 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - added reference 1
- - ""
diff --git a/bugs/issue-5348fec2b1112250e241afc7467de29e5691d1be.yaml b/bugs/issue-5348fec2b1112250e241afc7467de29e5691d1be.yaml
@@ -1,21 +0,0 @@
---- !ditz.rubyforge.org,2008-03-06/issue
-title: imap header caching
-desc: |-
- imap headers aren't cached at all. that would speed up the initial
- connection, at least for servers that didn't set uid_validity to
- the current time (blearf).
-type: :feature
-component: imap
-release:
-reporter: William Morgan <wmorgan-sup@masanjin.net>
-status: :unstarted
-disposition:
-creation_time: 2008-03-07 04:26:31.474463 Z
-references: []
-
-id: 5348fec2b1112250e241afc7467de29e5691d1be
-log_events:
-- - 2008-03-07 04:26:31.474497 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - created
- - ""
diff --git a/bugs/issue-57668c69d0190d6e849309834d4ad1d215efa779.yaml b/bugs/issue-57668c69d0190d6e849309834d4ad1d215efa779.yaml
@@ -1,21 +0,0 @@
---- !ditz.rubyforge.org,2008-03-06/issue
-title: make sup-sync-back work on Maildir folders
-desc: |-
- possibly we could abstract things entirely between mbox and maildir, but
- it might just be easiest to have a sup-sync-back-maildir or a big if
- statement.
-type: :feature
-component: sup-sync-back
-release:
-reporter: William Morgan <wmorgan-sup@masanjin.net>
-status: :unstarted
-disposition:
-creation_time: 2008-06-12 19:24:51.772444 Z
-references: []
-
-id: 57668c69d0190d6e849309834d4ad1d215efa779
-log_events:
-- - 2008-06-12 19:24:53.668373 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - created
- - ""
diff --git a/bugs/issue-5795c3c1b47e88f7261f57f31d33fe15ad08465d.yaml b/bugs/issue-5795c3c1b47e88f7261f57f31d33fe15ad08465d.yaml
@@ -1,20 +0,0 @@
---- !ditz.rubyforge.org,2008-03-06/issue
-title: flat (gmail-style) version of thread-view-mode
-desc: |-
- make thread-view-mode show a flat, chronological list of messages
- instead of a tree, based on some configuration variable.
-type: :feature
-component: curses
-release:
-reporter: William Morgan <wmorgan-ditz@masanjin.net>
-status: :unstarted
-disposition:
-creation_time: 2008-05-25 02:38:06.098950 Z
-references: []
-
-id: 5795c3c1b47e88f7261f57f31d33fe15ad08465d
-log_events:
-- - 2008-05-25 02:38:06.823848 Z
- - William Morgan <wmorgan-ditz@masanjin.net>
- - created
- - ""
diff --git a/bugs/issue-5fab957dcd16f1da8962fe5b1f3a58d970315deb.yaml b/bugs/issue-5fab957dcd16f1da8962fe5b1f3a58d970315deb.yaml
@@ -1,24 +0,0 @@
---- !ditz.rubyforge.org,2008-03-06/issue
-title: extra-contact-addresses hook for lbdb (etc.) integration
-desc: |-
- add an extra-contact-addresses hook for inserting addresses into the
- tab-completion list for To:, Cc:, etc. entries.
-type: :feature
-component: hooks
-release: "0.5"
-reporter: William Morgan <wmorgan-sup@masanjin.net>
-status: :closed
-disposition: :fixed
-creation_time: 2008-04-20 20:43:06.972853 Z
-references: []
-
-id: 5fab957dcd16f1da8962fe5b1f3a58d970315deb
-log_events:
-- - 2008-04-20 20:43:08.667355 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - created
- - ""
-- - 2008-04-20 20:43:20.678566 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - closed issue with disposition fixed
- - ""
diff --git a/bugs/issue-60d86dd32054533a6206f698033ec668af6a7574.yaml b/bugs/issue-60d86dd32054533a6206f698033ec668af6a7574.yaml
@@ -1,29 +0,0 @@
---- !ditz.rubyforge.org,2008-03-06/issue
-title: killed threads showing up in inbox-mode
-desc: this goddamn problem is recurring
-type: :bugfix
-component: indexing
-release:
-reporter: William Morgan <wmorgan-sup@masanjin.net>
-status: :closed
-disposition: :fixed
-creation_time: 2008-04-25 19:28:51.369257 Z
-references: []
-
-id: 60d86dd32054533a6206f698033ec668af6a7574
-log_events:
-- - 2008-04-25 19:28:52.476687 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - created
- - ""
-- - 2008-07-31 00:54:38.916308 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - unassigned from release 0.6
- - ""
-- - 2008-11-21 14:23:17.566852 Z
- - Nicolas Pouillard <nicolas.pouillard@gmail.com>
- - closed with disposition fixed
- - |-
- Loading options was not given to load_thread_for_message in
- ThreadIndexMode.add_or_unhide.
-git_branch:
diff --git a/bugs/issue-61949ec83770b5d46f89eff21799968187012cce.yaml b/bugs/issue-61949ec83770b5d46f89eff21799968187012cce.yaml
@@ -1,22 +0,0 @@
---- !ditz.rubyforge.org,2008-03-06/issue
-title: \127 should be handled like backspace (it's the 70's all over again)
-desc: ""
-type: :bugfix
-component: curses
-release: "0.5"
-reporter: William Morgan <wmorgan-sup@masanjin.net>
-status: :closed
-disposition: fixed
-creation_time: 2008-03-07 04:29:46.043812 Z
-references: []
-
-id: 61949ec83770b5d46f89eff21799968187012cce
-log_events:
-- - 2008-03-07 04:29:46.043850 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - created
- - ""
-- - 2008-03-07 04:29:52.233706 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - changed status from unstarted to fixed
- - ""
diff --git a/bugs/issue-65506670167642cc581956bc1b25c26b5bff215b.yaml b/bugs/issue-65506670167642cc581956bc1b25c26b5bff215b.yaml
@@ -1,30 +0,0 @@
---- !ditz.rubyforge.org,2008-03-06/issue
-title: attachment markers in thread-index-mode
-desc: show a little @ if the message has an attachment
-type: :feature
-component: curses
-release: "0.6"
-reporter: William Morgan <wmorgan-sup@masanjin.net>
-status: :closed
-disposition: :fixed
-creation_time: 2008-05-25 03:53:10.005404 Z
-references: []
-
-id: 65506670167642cc581956bc1b25c26b5bff215b
-log_events:
-- - 2008-05-25 03:53:10.994290 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - created
- - ""
-- - 2008-05-25 03:53:26.388023 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - changed status from unstarted to in_progress
- - branch attachments, merged into next
-- - 2008-05-31 17:09:17.710631 Z
- - William Morgan <wmorgan-ditz@masanjin.net>
- - commented
- - see {issue 1a1527438c2d198eae9a264ce9e6b847854d9837} and {issue 7a68c1e7120a8540c7c51c6095f4815918d16641}
-- - 2008-06-19 18:20:33.912937 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - closed issue with disposition fixed
- - ""
diff --git a/bugs/issue-658389418b5f0038cc3e6bc20fd3fd1566eb7111.yaml b/bugs/issue-658389418b5f0038cc3e6bc20fd3fd1566eb7111.yaml
@@ -1,26 +0,0 @@
---- !ditz.rubyforge.org,2008-03-06/issue
-title: add a startup hook
-desc: ""
-type: :feature
-component: hooks
-release: "0.5"
-reporter: William Morgan <wmorgan-sup@masanjin.net>
-status: :closed
-disposition: :fixed
-creation_time: 2008-03-07 04:03:52.999956 Z
-references: []
-
-id: 658389418b5f0038cc3e6bc20fd3fd1566eb7111
-log_events:
-- - 2008-03-07 04:03:52.999992 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - created
- - ""
-- - 2008-03-07 04:03:56.880347 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - changed status from unstarted to in_progress
- - ""
-- - 2008-04-20 20:45:20.047253 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - closed issue with disposition fixed
- - ""
diff --git a/bugs/issue-69f785cddcc6e09ef0a357151373b3aa923d5e3f.yaml b/bugs/issue-69f785cddcc6e09ef0a357151373b3aa923d5e3f.yaml
@@ -1,22 +0,0 @@
---- !ditz.rubyforge.org,2008-03-06/issue
-title: escape filenames in call to run-mailcap
-desc: otherwise, filenames with spaces don't work
-type: :bugfix
-component: sup
-release: "0.5"
-reporter: William Morgan <wmorgan-sup@masanjin.net>
-status: :closed
-disposition: fixed
-creation_time: 2008-03-07 04:10:43.771843 Z
-references: []
-
-id: 69f785cddcc6e09ef0a357151373b3aa923d5e3f
-log_events:
-- - 2008-03-07 04:10:43.771878 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - created
- - ""
-- - 2008-03-07 04:10:48.789189 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - changed status from unstarted to fixed
- - ""
diff --git a/bugs/issue-6c053cca2eb05af486a2d09c6772fd5bd0cca444.yaml b/bugs/issue-6c053cca2eb05af486a2d09c6772fd5bd0cca444.yaml
@@ -1,20 +0,0 @@
---- !ditz.rubyforge.org,2008-03-06/issue
-title: cache threading
-desc: |-
- thread information should be cached so that it doesn't have to be
- recomputed each time.
-type: :feature
-component: threading
-release:
-reporter: William Morgan <wmorgan-sup@masanjin.net>
-status: :unstarted
-disposition:
-creation_time: 2008-05-19 23:39:19.716625 Z
-references: []
-
-id: 6c053cca2eb05af486a2d09c6772fd5bd0cca444
-log_events:
-- - 2008-05-19 23:39:20.190260 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - created
- - ""
diff --git a/bugs/issue-6e0d634de74b2eb8297174ecd408b3810ba9351b.yaml b/bugs/issue-6e0d634de74b2eb8297174ecd408b3810ba9351b.yaml
@@ -1,24 +0,0 @@
---- !ditz.rubyforge.org,2008-03-06/issue
-title: imap connection sharing
-desc: |
- current behavior is a separate connection for each folder, which is kinda
- silly.
- potentially want to still keep a separate connection for polling, but that
- might be micro-optimization, especially given that the whole ruby imap
- library seems quite slow.
-
-type: :feature
-component: imap
-release:
-reporter: William Morgan <wmorgan-sup@masanjin.net>
-status: :unstarted
-disposition:
-creation_time: 2008-03-07 04:25:12.351934 Z
-references: []
-
-id: 6e0d634de74b2eb8297174ecd408b3810ba9351b
-log_events:
-- - 2008-03-07 04:25:12.351966 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - created
- - ""
diff --git a/bugs/issue-6e7960514f66ee67da083bc7bb5632d5808fc607.yaml b/bugs/issue-6e7960514f66ee67da083bc7bb5632d5808fc607.yaml
@@ -1,30 +0,0 @@
---- !ditz.rubyforge.org,2008-03-06/issue
-title: "'!!' will load all threads in current search"
-desc: |-
- can be dangerous, but sometimes you know there aren't a million and you
- just want them all loaded, e.g. to apply some mass tagging operation.
- with the cancel-search feature, can always be canceled if
- onerous.
-type: :feature
-component: sup
-release: "0.5"
-reporter: Marcus Williams <marcus-sup@bar-coded.net>
-status: :closed
-disposition: fixed
-creation_time: 2008-03-07 04:17:44.706909 Z
-references: []
-
-id: 6e7960514f66ee67da083bc7bb5632d5808fc607
-log_events:
-- - 2008-03-07 04:17:44.706948 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - created
- - ""
-- - 2008-03-07 04:17:48.834972 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - changed status from unstarted to fixed
- - ""
-- - 2008-03-11 06:52:15.604233 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - changed description
- - ""
diff --git a/bugs/issue-7456c2d8fbd5de4dac651f6f4e9756f577497e01.yaml b/bugs/issue-7456c2d8fbd5de4dac651f6f4e9756f577497e01.yaml
@@ -1,26 +0,0 @@
---- !ditz.rubyforge.org,2008-03-06/issue
-title: edit-as-new doesn't preserve replyto and references headers
-desc: ""
-type: :bugfix
-component: sup
-release: "0.6"
-reporter: William Morgan <wmorgan-ditz@masanjin.net>
-status: :closed
-disposition: :fixed
-creation_time: 2008-05-31 17:07:05.126884 Z
-references: []
-
-id: 7456c2d8fbd5de4dac651f6f4e9756f577497e01
-log_events:
-- - 2008-05-31 17:07:07.008637 Z
- - William Morgan <wmorgan-ditz@masanjin.net>
- - created
- - ""
-- - 2008-05-31 17:07:22.611383 Z
- - William Morgan <wmorgan-ditz@masanjin.net>
- - changed status from unstarted to in_progress
- - in branch edit-as-new-fix, merged into next
-- - 2008-06-19 18:22:24.036557 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - closed issue with disposition fixed
- - merged into master
diff --git a/bugs/issue-76802330c4fdd091e8b1dd08dcc29ed432f003d4.yaml b/bugs/issue-76802330c4fdd091e8b1dd08dcc29ed432f003d4.yaml
@@ -1,26 +0,0 @@
---- !ditz.rubyforge.org,2008-03-06/issue
-title: in-buffer search always shifts the screen, even when unnecessary
-desc: ""
-type: :bugfix
-component: curses
-release: "0.6"
-reporter: William Morgan <wmorgan-sup@masanjin.net>
-status: :closed
-disposition: :fixed
-creation_time: 2008-05-01 22:34:01.983057 Z
-references: []
-
-id: 76802330c4fdd091e8b1dd08dcc29ed432f003d4
-log_events:
-- - 2008-05-01 22:34:02.958758 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - created
- - ""
-- - 2008-05-01 22:34:24.254778 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - changed status from unstarted to in_progress
- - branch find-in-buffer-fix, merged into next
-- - 2008-05-25 04:19:45.168367 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - closed issue with disposition fixed
- - merged into master
diff --git a/bugs/issue-799771a6a435dcad66dc80e7e051d91d24d005b1.yaml b/bugs/issue-799771a6a435dcad66dc80e7e051d91d24d005b1.yaml
@@ -1,31 +0,0 @@
---- !ditz.rubyforge.org,2008-03-06/issue
-title: IMAP server restart crashes sup
-desc: |-
- this very bizarre backtrace:
-
- --- SystemExit from thread: main
- closed stream
- /usr/lib/ruby/1.8/openssl/buffering.rb:237:in `select'
- ./lib/sup/buffer.rb:31:in `nonblocking_getch'
- bin/sup:227
-
- wtf?
-
- There's no reason that
- nonblocking_getch would be calling the openssl stuff, and openssl's
- buffering.rb doesn't mention select at all. Weird.
-type: :bugfix
-component: imap
-release:
-reporter: William Morgan <wmorgan-sup@masanjin.net>
-status: :unstarted
-disposition:
-creation_time: 2008-05-19 23:17:32.271870 Z
-references: []
-
-id: 799771a6a435dcad66dc80e7e051d91d24d005b1
-log_events:
-- - 2008-05-19 23:17:33.615525 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - created
- - ""
diff --git a/bugs/issue-7a68c1e7120a8540c7c51c6095f4815918d16641.yaml b/bugs/issue-7a68c1e7120a8540c7c51c6095f4815918d16641.yaml
@@ -1,28 +0,0 @@
---- !ditz.rubyforge.org,2008-03-06/issue
-title: attachment markers in thread-view-mode
-desc: |-
- i'd like to see them in thread-view-mode as well
- (c.f. {issue 65506670167642cc581956bc1b25c26b5bff215b} and {issue 1a1527438c2d198eae9a264ce9e6b847854d9837})
-type: :feature
-component: curses
-release: "0.6"
-reporter: William Morgan <wmorgan-ditz@masanjin.net>
-status: :closed
-disposition: :fixed
-creation_time: 2008-05-31 17:08:28.081944 Z
-references: []
-
-id: 7a68c1e7120a8540c7c51c6095f4815918d16641
-log_events:
-- - 2008-05-31 17:08:28.710190 Z
- - William Morgan <wmorgan-ditz@masanjin.net>
- - created
- - ""
-- - 2008-05-31 17:08:50.679595 Z
- - William Morgan <wmorgan-ditz@masanjin.net>
- - changed status from unstarted to in_progress
- - on branch attachments as well, remerged into next
-- - 2008-06-19 18:20:56.657318 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - closed issue with disposition fixed
- - merged into master
diff --git a/bugs/issue-7c77e757321c2639daea013824ad1a14099815b1.yaml b/bugs/issue-7c77e757321c2639daea013824ad1a14099815b1.yaml
@@ -1,26 +0,0 @@
---- !ditz.rubyforge.org,2008-03-06/issue
-title: in-buffer searches should move buffer horizontally when necessary
-desc: ""
-type: :feature
-component: curses
-release: "0.5"
-reporter: William Morgan <wmorgan-sup@masanjin.net>
-status: :closed
-disposition: :fixed
-creation_time: 2008-03-07 03:56:17.653639 Z
-references: []
-
-id: 7c77e757321c2639daea013824ad1a14099815b1
-log_events:
-- - 2008-03-07 03:56:17.653674 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - created
- - ""
-- - 2008-03-07 03:56:21.870750 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - changed status from unstarted to in_progress
- - ""
-- - 2008-04-20 20:44:07.668281 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - closed issue with disposition fixed
- - ""
diff --git a/bugs/issue-7d8474dfeeefaa50151c3ce48bee6b686d36a216.yaml b/bugs/issue-7d8474dfeeefaa50151c3ce48bee6b686d36a216.yaml
@@ -1,29 +0,0 @@
---- !ditz.rubyforge.org,2008-03-06/issue
-title: reply-to mode hook
-desc: |-
- need a hook for selecting the default setting of the reply-to
- horizontal selector
-type: :feature
-component: hooks
-release: "0.6"
-reporter: William Morgan <wmorgan-sup@masanjin.net>
-status: :closed
-disposition: :fixed
-creation_time: 2008-06-04 03:04:10.253690 Z
-references: []
-
-id: 7d8474dfeeefaa50151c3ce48bee6b686d36a216
-log_events:
-- - 2008-06-04 03:04:10.945071 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - created
- - ""
-- - 2008-06-04 03:04:21.284329 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - changed status from unstarted to in_progress
- - branch 'reply-to-hook', merged into next
-- - 2008-07-30 23:41:50.393799 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - closed with disposition fixed
- - merged into master
-git_branch: reply-to-hook
diff --git a/bugs/issue-829b449c51fca9a39047d00fabc552cc110c69b2.yaml b/bugs/issue-829b449c51fca9a39047d00fabc552cc110c69b2.yaml
@@ -1,24 +0,0 @@
---- !ditz.rubyforge.org,2008-03-06/issue
-title: don't crash when people.txt is corrupted
-desc: |-
- This was a debug check, but if Sup crashes when writing out people.txt,
- this will prevent it from ever starting again!
-type: :bugfix
-component: sup
-release: "0.5"
-reporter: William Morgan <wmorgan-sup@masanjin.net>
-status: :closed
-disposition: fixed
-creation_time: 2008-03-07 04:07:56.208521 Z
-references: []
-
-id: 829b449c51fca9a39047d00fabc552cc110c69b2
-log_events:
-- - 2008-03-07 04:07:56.208558 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - created
- - ""
-- - 2008-03-07 04:21:04.553157 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - changed status from unstarted to fixed
- - ""
diff --git a/bugs/issue-82c80f6dc2ce7b10b9e8f503d68253ced0ee8a1b.yaml b/bugs/issue-82c80f6dc2ce7b10b9e8f503d68253ced0ee8a1b.yaml
@@ -1,24 +0,0 @@
---- !ditz.rubyforge.org,2008-03-06/issue
-title: gpg generates invalid signature when :edit_signature is on
-desc: |-
- when :edit_signature is on and there's a signature, gpg signatures are invalid,
- ccording to mutt and other clients. sup itself thinks they're fine.
-type: :bugfix
-component: crypto
-release: "0.6"
-reporter: William Morgan <wmorgan-sup@masanjin.net>
-status: :closed
-disposition: :fixed
-creation_time: 2008-05-19 21:19:23.267668 Z
-references: []
-
-id: 82c80f6dc2ce7b10b9e8f503d68253ced0ee8a1b
-log_events:
-- - 2008-05-19 21:19:24.611826 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - created
- - ""
-- - 2008-05-19 21:19:49.649415 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - closed issue with disposition fixed
- - turns out it was a newline issue. patch directly applied to master.
diff --git a/bugs/issue-8a5cf9242ca60fa6c81091e425f734b4fb03e41a.yaml b/bugs/issue-8a5cf9242ca60fa6c81091e425f734b4fb03e41a.yaml
@@ -1,53 +0,0 @@
---- !ditz.rubyforge.org,2008-03-06/issue
-title: index speedup
-desc: |
- I've just merged in a changeset that makes Sup store message body
- content in the Ferret index. (They've always been indexed, but now
- they're stored as well.) This means that changing the labels on a
- message can be a copy operation of the previous Ferret document, rather
- than requiring downloading and parsing the original message to create a
- new Ferret document.
- So, this should have two effects:
-
- 1. The Ferret index size will expand by about 50%. Sorry.
- 2. Tweaking message labels should be much, much faster, since the
- message no longer has to be downloaded from the source in order to
- change the labels. If you've ever tried to label a large IMAP thread,
- you no longer have to wait 5 minutes just to save. :)
-
- The index size increase is unfortunate, but it's something that has to
- happen anyways if we want search-results-mode to have matching text in
- the snippets, which is in the future TODO.
-
- The change was made in such a way that it's incrementally applied
- whenever a message is saved or changed in the Ferret index. So, if you
- want the above behavior on all messages immediately, you must do
- sup-sync --all on a source (which will require downloading each
- message). Otherwise, you will get the slow behavior (message body needs
- to be downloaded from the source) the first time you save a message
- after merging this change, and the fast behavior (no downloading
- required) on all subsequent times.
-
-type: :feature
-component: indexing
-release: "0.5"
-reporter: William Morgan <wmorgan-sup@masanjin.net>
-status: :closed
-disposition: :fixed
-creation_time: 2008-03-07 02:48:23.885656 Z
-references: []
-
-id: 8a5cf9242ca60fa6c81091e425f734b4fb03e41a
-log_events:
-- - 2008-03-07 02:48:23.885693 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - created
- - ""
-- - 2008-03-07 02:48:50.979828 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - changed status from unstarted to in_progress
- - ""
-- - 2008-04-20 22:10:33.970635 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - closed issue with disposition fixed
- - ""
diff --git a/bugs/issue-8aa7ea95f066fd0668452093b85903bd142905c9.yaml b/bugs/issue-8aa7ea95f066fd0668452093b85903bd142905c9.yaml
@@ -1,26 +0,0 @@
---- !ditz.rubyforge.org,2008-03-06/issue
-title: "'q' asks and 'Q' quits without asking"
-desc: ""
-type: :feature
-component: curses
-release: "0.6"
-reporter: William Morgan <wmorgan-ditz@masanjin.net>
-status: :closed
-disposition: :fixed
-creation_time: 2008-05-20 03:25:17.109472 Z
-references: []
-
-id: 8aa7ea95f066fd0668452093b85903bd142905c9
-log_events:
-- - 2008-05-20 03:25:19.265580 Z
- - William Morgan <wmorgan-ditz@masanjin.net>
- - created
- - ""
-- - 2008-05-25 02:13:32.219668 Z
- - William Morgan <wmorgan-ditz@masanjin.net>
- - closed issue with disposition fixed
- - fixed in master
-- - 2008-05-25 02:13:40.344453 Z
- - William Morgan <wmorgan-ditz@masanjin.net>
- - assigned to release 0.6 from unassigned
- - ""
diff --git a/bugs/issue-8c0e627c500f679badca28f60ba76998fd65d46a.yaml b/bugs/issue-8c0e627c500f679badca28f60ba76998fd65d46a.yaml
@@ -1,26 +0,0 @@
---- !ditz.rubyforge.org,2008-03-06/issue
-title: workaround for rubymail quoting bug in pgp MIME header
-desc: gpg MIME headers are being double-quoted due to a rubymail bug
-type: :bugfix
-component: sup
-release: "0.5"
-reporter: Jan Spakula <teatime@gmx.com>
-status: :closed
-disposition: fixed
-creation_time: 2008-03-07 03:35:36.731751 Z
-references:
-- http://rubyforge.org/pipermail/sup-talk/2008-February/001222.html
-id: 8c0e627c500f679badca28f60ba76998fd65d46a
-log_events:
-- - 2008-03-07 03:35:36.731787 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - created
- - ""
-- - 2008-03-07 03:36:24.938159 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - changed status from unstarted to fixed
- - ""
-- - 2008-03-08 22:22:59.515414 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - added reference 1
- - ""
diff --git a/bugs/issue-8e825caee33a6ac144580bf44d0d3060ad162394.yaml b/bugs/issue-8e825caee33a6ac144580bf44d0d3060ad162394.yaml
@@ -1,21 +0,0 @@
---- !ditz.rubyforge.org,2008-03-06/issue
-title: From lines detected over-aggressively
-desc: |-
- mbox lines starting with "From " should only be considered new-message
- delimiters if they have a valid email address, date, etc.
-type: :bugfix
-component: mbox
-release:
-reporter: William Morgan <wmorgan-sup@masanjin.net>
-status: :unstarted
-disposition:
-creation_time: 2008-11-10 03:56:07.002467 Z
-references: []
-
-id: 8e825caee33a6ac144580bf44d0d3060ad162394
-log_events:
-- - 2008-11-10 03:56:07.002940 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - created
- - ""
-git_branch:
diff --git a/bugs/issue-91e1549102c0bfa2c201476d9618f7d234d1a626.yaml b/bugs/issue-91e1549102c0bfa2c201476d9618f7d234d1a626.yaml
@@ -1,22 +0,0 @@
---- !ditz.rubyforge.org,2008-03-06/issue
-title: gpg should use exact match for email address
-desc: otherwise substring matches can select the wrong key
-type: :bugfix
-component: crypto
-release: "0.6"
-reporter: William Morgan <wmorgan-ditz@masanjin.net>
-status: :closed
-disposition: :fixed
-creation_time: 2008-05-25 02:15:58.006265 Z
-references: []
-
-id: 91e1549102c0bfa2c201476d9618f7d234d1a626
-log_events:
-- - 2008-05-25 02:15:59.100203 Z
- - William Morgan <wmorgan-ditz@masanjin.net>
- - created
- - ""
-- - 2008-05-25 02:16:07.730483 Z
- - William Morgan <wmorgan-ditz@masanjin.net>
- - closed issue with disposition fixed
- - fixed in master
diff --git a/bugs/issue-9f7e28de46d74f7f1e445ae75ea4e230c7473374.yaml b/bugs/issue-9f7e28de46d74f7f1e445ae75ea4e230c7473374.yaml
@@ -1,22 +0,0 @@
---- !ditz.rubyforge.org,2008-03-06/issue
-title: threads with unsent draft messages are now shown in red
-desc: ""
-type: :feature
-component: curses
-release: "0.5"
-reporter: Nicolas Pouillard <nicolas.pouillard@gmail.com>
-status: :closed
-disposition: fixed
-creation_time: 2008-03-07 04:30:53.909487 Z
-references: []
-
-id: 9f7e28de46d74f7f1e445ae75ea4e230c7473374
-log_events:
-- - 2008-03-07 04:30:53.909522 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - created
- - ""
-- - 2008-03-07 04:31:03.704713 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - changed status from unstarted to fixed
- - ""
diff --git a/bugs/issue-a1a3427de5e8d4f74c0620f99e97ed92d21e924c.yaml b/bugs/issue-a1a3427de5e8d4f74c0620f99e97ed92d21e924c.yaml
@@ -1,30 +0,0 @@
---- !ditz.rubyforge.org,2008-03-06/issue
-title: sup-config name guessing logic can generate nil and crash
-desc: ""
-type: :bugfix
-component: sup
-release: "0.5"
-reporter: Jean-Hadrien CHABRAN <jh@chabran.fr>
-status: :closed
-disposition: fixed
-creation_time: 2008-03-09 17:45:46.095924 Z
-references:
-- http://rubyforge.org/pipermail/sup-talk/2008-March/001260.html
-id: a1a3427de5e8d4f74c0620f99e97ed92d21e924c
-log_events:
-- - 2008-03-09 17:45:46.095961 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - created
- - ""
-- - 2008-03-09 17:46:21.702965 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - added reference 1
- - ""
-- - 2008-03-09 17:46:45.446763 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - changed reporter
- - ""
-- - 2008-03-09 17:47:06.797832 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - changed status from unstarted to fixed
- - fixed in master
diff --git a/bugs/issue-a1e622dbae0e1841b4d9a376d419aed1d91460e0.yaml b/bugs/issue-a1e622dbae0e1841b4d9a376d419aed1d91460e0.yaml
@@ -1,26 +0,0 @@
---- !ditz.rubyforge.org,2008-03-06/issue
-title: non-ascii characters in message id need to be normalized
-desc: apparently this happens. in spam email, of course.
-type: :bugfix
-component: sup
-release: "0.6"
-reporter: William Morgan <wmorgan-ditz@masanjin.net>
-status: :closed
-disposition: :fixed
-creation_time: 2008-05-11 23:04:01.078305 Z
-references: []
-
-id: a1e622dbae0e1841b4d9a376d419aed1d91460e0
-log_events:
-- - 2008-05-11 23:04:01.677838 Z
- - William Morgan <wmorgan-ditz@masanjin.net>
- - created
- - ""
-- - 2008-05-11 23:21:40.281018 Z
- - William Morgan <wmorgan-ditz@masanjin.net>
- - changed status from unstarted to in_progress
- - branch non-ascii-message-id, merged into next
-- - 2008-06-19 18:09:04.143173 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - closed issue with disposition fixed
- - merged into master
diff --git a/bugs/issue-a533480a30a18c3e823dbe20b759e1dcb32ca2b9.yaml b/bugs/issue-a533480a30a18c3e823dbe20b759e1dcb32ca2b9.yaml
@@ -1,26 +0,0 @@
---- !ditz.rubyforge.org,2008-03-06/issue
-title: forward/reply without saving in the editor drops all newlines
-desc: ""
-type: :bugfix
-component: sup
-release: "0.6"
-reporter: William Morgan <wmorgan-sup@masanjin.net>
-status: :closed
-disposition: :fixed
-creation_time: 2008-04-23 01:31:16.072859 Z
-references: []
-
-id: a533480a30a18c3e823dbe20b759e1dcb32ca2b9
-log_events:
-- - 2008-04-23 01:31:16.640737 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - created
- - ""
-- - 2008-04-23 01:39:10.304801 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - changed status from unstarted to in_progress
- - branch unedited-newlines, merged into next
-- - 2008-05-25 04:22:44.178693 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - closed issue with disposition fixed
- - merged into master
diff --git a/bugs/issue-a68148169baa3838051f4bdb4c175e11cbf7f143.yaml b/bugs/issue-a68148169baa3838051f4bdb4c175e11cbf7f143.yaml
@@ -1,22 +0,0 @@
---- !ditz.rubyforge.org,2008-03-06/issue
-title: all ferret access needs to be wrapped in a mutex
-desc: |-
- concurrent access breaks things. at least, that's what I *think* is
- going on here.
-
- http://rubyforge.org/pipermail/sup-talk/2008-April/001333.html
-type: :bugfix
-component: indexing
-release:
-reporter: William Morgan <wmorgan-sup@masanjin.net>
-status: :unstarted
-disposition:
-creation_time: 2008-05-01 01:09:39.706808 Z
-references: []
-
-id: a68148169baa3838051f4bdb4c175e11cbf7f143
-log_events:
-- - 2008-05-01 01:09:40.747646 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - created
- - ""
diff --git a/bugs/issue-aae5ae6378afa9bd2a8e1b15d28ba7ccef867791.yaml b/bugs/issue-aae5ae6378afa9bd2a8e1b15d28ba7ccef867791.yaml
@@ -1,27 +0,0 @@
---- !ditz.rubyforge.org,2008-03-06/issue
-title: remove email->name mapping
-desc: it doesn't work and wouldn't buy that much even if it did
-type: :bugfix
-component: sup
-release:
-reporter: William Morgan <wmorgan-sup@masanjin.net>
-status: :closed
-disposition: :fixed
-creation_time: 2008-05-19 23:42:25.910550 Z
-references: []
-
-id: aae5ae6378afa9bd2a8e1b15d28ba7ccef867791
-log_events:
-- - 2008-05-19 23:42:26.490587 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - created
- - ""
-- - 2008-07-31 00:54:39.921596 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - unassigned from release 0.6
- - ""
-- - 2008-11-22 16:31:27.450146 Z
- - Nicolas Pouillard <nicolas.pouillard@gmail.com>
- - closed with disposition fixed
- - This mapping and the PersonManager are now removed.
-git_branch:
diff --git a/bugs/issue-ad82aa00f4064fc7e1332cee0dae2c2ae95bb217.yaml b/bugs/issue-ad82aa00f4064fc7e1332cee0dae2c2ae95bb217.yaml
@@ -1,26 +0,0 @@
---- !ditz.rubyforge.org,2008-03-06/issue
-title: add more vi keys
-desc: ""
-type: :feature
-component: curses
-release: "0.6"
-reporter: William Morgan <wmorgan-sup@masanjin.net>
-status: :closed
-disposition: :fixed
-creation_time: 2008-04-26 22:23:43.675951 Z
-references: []
-
-id: ad82aa00f4064fc7e1332cee0dae2c2ae95bb217
-log_events:
-- - 2008-04-26 22:23:44.484689 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - created
- - ""
-- - 2008-04-26 22:24:00.893661 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - changed status from unstarted to in_progress
- - branch more-vi-keys. in next.
-- - 2008-05-25 04:12:57.577438 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - closed issue with disposition fixed
- - merged into master
diff --git a/bugs/issue-b1f1579fd8350d8add15c5cb588169acfdc5ea24.yaml b/bugs/issue-b1f1579fd8350d8add15c5cb588169acfdc5ea24.yaml
@@ -1,29 +0,0 @@
---- !ditz.rubyforge.org,2008-03-06/issue
-title: offer to delete lockfile after trying to kill owner process
-desc: |-
- often the lockfile points to a dead process, so repeatedly offering to kill
- it isn't all that useful.
-type: :feature
-component: sup
-release:
-reporter: William Morgan <wmorgan-sup@masanjin.net>
-status: :unstarted
-disposition:
-creation_time: 2008-04-14 01:25:59.111165 Z
-references: []
-
-id: b1f1579fd8350d8add15c5cb588169acfdc5ea24
-log_events:
-- - 2008-04-14 01:26:00.135062 Z
- - William Morgan <w@adap.tv>
- - created
- - ""
-- - 2008-05-19 23:40:28.102694 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - assigned to release 0.6 from unassigned
- - ""
-- - 2008-07-31 00:54:38.573917 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - unassigned from release 0.6
- - ""
-git_branch:
diff --git a/bugs/issue-b80aa39ef3b8d33bd57e4988c55d89c7c0df5c96.yaml b/bugs/issue-b80aa39ef3b8d33bd57e4988c55d89c7c0df5c96.yaml
@@ -1,24 +0,0 @@
---- !ditz.rubyforge.org,2008-03-06/issue
-title: spurious messages appearing in inbox
-desc: |-
- this is because ThreadSet is claiming that non-relevant videos are actually
- relevant
-type: :bugfix
-component: indexing
-release: "0.5"
-reporter: William Morgan <wmorgan-sup@masanjin.net>
-status: :closed
-disposition: fixed
-creation_time: 2008-03-07 03:55:29.353904 Z
-references: []
-
-id: b80aa39ef3b8d33bd57e4988c55d89c7c0df5c96
-log_events:
-- - 2008-03-07 03:55:29.353940 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - created
- - ""
-- - 2008-03-07 03:55:34.495965 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - changed status from unstarted to fixed
- - ""
diff --git a/bugs/issue-bc03bc702f41e6a9687b52d3e32db29132c0f65a.yaml b/bugs/issue-bc03bc702f41e6a9687b52d3e32db29132c0f65a.yaml
@@ -1,25 +0,0 @@
---- !ditz.rubyforge.org,2008-03-06/issue
-title: add a mark-as-spam hook
-desc: |-
- a simple hook that triggers when a message is marked as spam, so that
- users can trigger additional stuff.
-type: :feature
-component: hooks
-release: "0.6"
-reporter: William Morgan <wmorgan-sup@masanjin.net>
-status: :closed
-disposition: :fixed
-creation_time: 2008-07-31 00:50:51.282526 Z
-references: []
-
-id: bc03bc702f41e6a9687b52d3e32db29132c0f65a
-log_events:
-- - 2008-07-31 00:50:52.114135 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - created
- - ""
-- - 2008-07-31 00:51:10.671706 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - closed with disposition fixed
- - branch mark-as-spam-hook, merged into master
-git_branch:
diff --git a/bugs/issue-bdd4415a9d4c8fd3602500111bf9268aa7c7c6a4.yaml b/bugs/issue-bdd4415a9d4c8fd3602500111bf9268aa7c7c6a4.yaml
@@ -1,27 +0,0 @@
---- !ditz.rubyforge.org,2008-03-06/issue
-title: configurable colors
-desc: All colors should be user-configurable.
-type: :feature
-component: curses
-release: "0.6"
-reporter: William Morgan <wmorgan-sup@masanjin.net>
-status: :closed
-disposition: :fixed
-creation_time: 2008-06-04 02:27:15.458560 Z
-references: []
-
-id: bdd4415a9d4c8fd3602500111bf9268aa7c7c6a4
-log_events:
-- - 2008-06-04 02:27:16.721829 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - created
- - ""
-- - 2008-06-04 02:27:27.256556 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - changed status from unstarted to in_progress
- - branch 'colors', merged into next.
-- - 2008-07-30 23:41:33.553377 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - closed with disposition fixed
- - merged into master
-git_branch: color
diff --git a/bugs/issue-bff2527210b3aacae2f74029e5856fed82f1689c.yaml b/bugs/issue-bff2527210b3aacae2f74029e5856fed82f1689c.yaml
@@ -1,33 +0,0 @@
---- !ditz.rubyforge.org,2008-03-06/issue
-title: wide characters break screen clearing
-desc: |-
- if you look at a message with wide characters using the new wide-char-aware
- ncurses library, there will often be snippets of the previous screen
- immediately to the right of the end of the lines that have wide characters
- in them.
-
- some kind of line length issue maybe? (because everything is done in terms
- of bytes still. thanks ruby!)
-type: :bugfix
-component: curses
-release:
-reporter: William Morgan <wmorgan-sup@masanjin.net>
-status: :closed
-disposition: :wontfix
-creation_time: 2008-04-26 21:35:31.519359 Z
-references: []
-
-id: bff2527210b3aacae2f74029e5856fed82f1689c
-log_events:
-- - 2008-04-26 21:35:32.384516 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - created
- - ""
-- - 2008-04-26 21:44:04.152193 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - unassigned from release 0.6
- - depends on {issue 23658477a445c2e61405fecb4cb641a2298caba6} and that's not necessarily destined for 0.6 yet.
-- - 2008-04-28 02:36:51.698817 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - closed issue with disposition wontfix
- - dup of {issue c48f7fc58bba0b38ff6ae14cca01b08a5a7a6c33}. you'd think i'd'a remembered.
diff --git a/bugs/issue-c48f7fc58bba0b38ff6ae14cca01b08a5a7a6c33.yaml b/bugs/issue-c48f7fc58bba0b38ff6ae14cca01b08a5a7a6c33.yaml
@@ -1,21 +0,0 @@
---- !ditz.rubyforge.org,2008-03-06/issue
-title: wide characters screw up line cursor display
-desc: |-
- in a message with wide characters, the screen isn't cleared properly, or
- something. probably due to the # of characters for something being calculated
- wrong (bytes instead of chars).
-type: :bugfix
-component: curses
-release:
-reporter: William Morgan <wmorgan-sup@masanjin.net>
-status: :unstarted
-disposition:
-creation_time: 2008-04-23 02:05:47.272610 Z
-references: []
-
-id: c48f7fc58bba0b38ff6ae14cca01b08a5a7a6c33
-log_events:
-- - 2008-04-23 02:05:49.360399 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - created
- - ""
diff --git a/bugs/issue-c52f9762bc24a8f45863eb2e7beefa4201db34e8.yaml b/bugs/issue-c52f9762bc24a8f45863eb2e7beefa4201db34e8.yaml
@@ -1,22 +0,0 @@
---- !ditz.rubyforge.org,2008-03-06/issue
-title: add a --compose option to spawn a compose-message buffer on startup
-desc: ""
-type: :feature
-component: sup
-release: "0.5"
-reporter: William Morgan <wmorgan-sup@masanjin.net>
-status: :closed
-disposition: fixed
-creation_time: 2008-03-07 04:28:32.198492 Z
-references: []
-
-id: c52f9762bc24a8f45863eb2e7beefa4201db34e8
-log_events:
-- - 2008-03-07 04:28:32.198527 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - created
- - ""
-- - 2008-03-07 04:28:37.471873 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - changed status from unstarted to fixed
- - ""
diff --git a/bugs/issue-c660ddfa9d633501140dd199bdfd7cd9fed5df0b.yaml b/bugs/issue-c660ddfa9d633501140dd199bdfd7cd9fed5df0b.yaml
@@ -1,22 +0,0 @@
---- !ditz.rubyforge.org,2008-03-06/issue
-title: ctrl-g should interrupt thread search operation
-desc: ""
-type: :feature
-component: sup
-release: "0.5"
-reporter: Marcus Williams <marcus-sup@bar-coded.net>
-status: :closed
-disposition: fixed
-creation_time: 2008-03-07 04:15:47.155992 Z
-references: []
-
-id: c660ddfa9d633501140dd199bdfd7cd9fed5df0b
-log_events:
-- - 2008-03-07 04:15:47.156031 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - created
- - ""
-- - 2008-03-07 04:15:52.274258 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - changed status from unstarted to fixed
- - ""
diff --git a/bugs/issue-cef3096582de268c050f78223eb6a22ac2599606.yaml b/bugs/issue-cef3096582de268c050f78223eb6a22ac2599606.yaml
@@ -1,31 +0,0 @@
---- !ditz.rubyforge.org,2008-03-06/issue
-title: ruby 1.8.7 breaks sup in weird ways
-desc: |-
- --- ArgumentError from thread: main
- wrong number of arguments (2 for 1)
- /home/benjamin/projects/sup/lib/sup/index.rb:422:in `respond_to?'
- /home/benjamin/projects/sup/lib/sup/index.rb:422:in `flatten'
- /home/benjamin/projects/sup/lib/sup/index.rb:422:in `load_sources'
- /home/benjamin/projects/sup/lib/sup/index.rb:108:in `load'
- /home/benjamin/projects/sup/lib/sup/util.rb:497:in `send'
- /home/benjamin/projects/sup/lib/sup/util.rb:497:in `method_missing'
- /home/benjamin/projects/sup/bin/sup:122
-type: :bugfix
-component: sup
-release: "0.6"
-reporter: William Morgan <wmorgan-sup@masanjin.net>
-status: :closed
-disposition: :fixed
-creation_time: 2008-06-04 17:39:39.013305 Z
-references: []
-
-id: cef3096582de268c050f78223eb6a22ac2599606
-log_events:
-- - 2008-06-04 17:39:39.670176 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - created
- - ""
-- - 2008-06-19 17:57:46.648682 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - closed issue with disposition fixed
- - fixed directly in master
diff --git a/bugs/issue-cf09ec6ec7c35d7d8c002b0521f97b6e94dc9b3e.yaml b/bugs/issue-cf09ec6ec7c35d7d8c002b0521f97b6e94dc9b3e.yaml
@@ -1,26 +0,0 @@
---- !ditz.rubyforge.org,2008-03-06/issue
-title: invalid gecos can cause sup-config to crash
-desc: ""
-type: :bugfix
-component: sup
-release: "0.5"
-reporter: Jean-Hadrien CHABRAN <jh@chabran.fr>
-status: :closed
-disposition: fixed
-creation_time: 2008-03-14 18:54:32.560987 Z
-references:
-- http://rubyforge.org/pipermail/sup-talk/2008-March/001260.html
-id: cf09ec6ec7c35d7d8c002b0521f97b6e94dc9b3e
-log_events:
-- - 2008-03-14 18:54:32.561241 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - created
- - ""
-- - 2008-03-14 18:54:52.486259 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - added reference 1
- - ""
-- - 2008-03-14 18:55:10.323790 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - changed status from unstarted to fixed
- - ""
diff --git a/bugs/issue-cfbfc65dc90280fa5ecc63094af01d2a47ff0c6e.yaml b/bugs/issue-cfbfc65dc90280fa5ecc63094af01d2a47ff0c6e.yaml
@@ -1,22 +0,0 @@
---- !ditz.rubyforge.org,2008-03-06/issue
-title: exception thrown when a forwarded attachment is not a known mime type
-desc: a minor typo
-type: :bugfix
-component: sup
-release: "0.6"
-reporter: William Morgan <wmorgan-sup@masanjin.net>
-status: :closed
-disposition: :fixed
-creation_time: 2008-04-23 01:23:06.368926 Z
-references: []
-
-id: cfbfc65dc90280fa5ecc63094af01d2a47ff0c6e
-log_events:
-- - 2008-04-23 01:23:07.968757 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - created
- - ""
-- - 2008-04-23 01:23:14.995087 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - closed issue with disposition fixed
- - fixed in master
diff --git a/bugs/issue-d131464e921aefc35571c119aac4d9f1decdebae.yaml b/bugs/issue-d131464e921aefc35571c119aac4d9f1decdebae.yaml
@@ -1,30 +0,0 @@
---- !ditz.rubyforge.org,2008-03-06/issue
-title: blank message-id headers are treated as valid and crash indexing
-desc: |-
- specifically, they trigger the "just added message to index" debug exception
- because the id consists of nothing but spaces.
-
- header parsing needs to be fixed to not grab headers that are empty.
-type: :bugfix
-component: mbox
-release: "0.6"
-reporter: William Morgan <wmorgan-sup@masanjin.net>
-status: :closed
-disposition: :fixed
-creation_time: 2008-04-26 21:07:33.463910 Z
-references: []
-
-id: d131464e921aefc35571c119aac4d9f1decdebae
-log_events:
-- - 2008-04-26 21:07:34.221325 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - created
- - ""
-- - 2008-04-26 21:41:55.731750 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - changed status from unstarted to in_progress
- - branch header-parsing-fix. merged into next.
-- - 2008-05-25 04:19:15.986573 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - closed issue with disposition fixed
- - merged into master
diff --git a/bugs/issue-d994a360c9cb2a6e12a734962a39ffbc6486a725.yaml b/bugs/issue-d994a360c9cb2a6e12a734962a39ffbc6486a725.yaml
@@ -1,34 +0,0 @@
---- !ditz.rubyforge.org,2008-03-06/issue
-title: flags need a separate backup outside of the ferret index
-desc: |
- Ferret still occasionally barfs and corrupts its own index. Currently all
- user state is stored in the index and only in the index, so that means
- you lose big-time if that happens. You can sup-dump your labels, but really,
- how often are you going to do that.
- Sup should maintain a separate backup of all labels in some fast on-disk
- hashtable (message ids to label sets). Bdb comes to mind.
-
-type: :feature
-component: sup
-release:
-reporter: William Morgan <wmorgan-sup@masanjin.net>
-status: :unstarted
-disposition:
-creation_time: 2008-03-07 04:22:50.236621 Z
-references: []
-
-id: d994a360c9cb2a6e12a734962a39ffbc6486a725
-log_events:
-- - 2008-03-07 04:22:50.236657 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - created
- - ""
-- - 2008-04-20 21:44:51.655741 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - assigned to release 0.6 from 0.5
- - ""
-- - 2008-07-31 00:54:37.881077 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - unassigned from release 0.6
- - ""
-git_branch:
diff --git a/bugs/issue-d9e6be1b524c6c0a5c31c9c468bda170c2a8cb58.yaml b/bugs/issue-d9e6be1b524c6c0a5c31c9c468bda170c2a8cb58.yaml
@@ -1,33 +0,0 @@
---- !ditz.rubyforge.org,2008-03-06/issue
-title: temp files disappear on sup crash
-desc: |-
- because we're using the Tempfile library, Sup crashes mean that tempfiles
- containing message bodies are lost. Sup needs to manage its own tempfiles.
-type: :bugfix
-component: sup
-release:
-reporter: "Marko Myllym\xC3\xA4ki <marko.myllymaki@iki.fi>"
-status: :unstarted
-disposition:
-creation_time: 2008-03-07 04:59:51.404664 Z
-references:
-- http://rubyforge.org/pipermail/sup-talk/2008-February/001174.html
-id: d9e6be1b524c6c0a5c31c9c468bda170c2a8cb58
-log_events:
-- - 2008-03-07 04:59:51.404701 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - created
- - ""
-- - 2008-03-11 06:20:47.540967 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - added reference 1
- - ""
-- - 2008-04-20 21:45:00.615452 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - assigned to release 0.6 from 0.5
- - ""
-- - 2008-07-31 00:54:38.222035 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - unassigned from release 0.6
- - ""
-git_branch:
diff --git a/bugs/issue-e24df153080c6e7a16335018b04d70d9381258b8.yaml b/bugs/issue-e24df153080c6e7a16335018b04d70d9381258b8.yaml
@@ -1,20 +0,0 @@
---- !ditz.rubyforge.org,2008-03-06/issue
-title: Pulling new threads should not shift the cursor.
-desc: |-
- In thread-view-index, the selected thread should not change due to additions
- of new threads.
-type: :bugfix
-component: curses
-release:
-reporter: Nicolas Pouillard <nicolas.pouillard@gmail.com>
-status: :unstarted
-disposition:
-creation_time: 2008-04-21 08:26:00.191881 Z
-references: []
-
-id: e24df153080c6e7a16335018b04d70d9381258b8
-log_events:
-- - 2008-04-21 08:26:03.807376 Z
- - Nicolas Pouillard <nicolas.pouillard@gmail.com>
- - created
- - ""
diff --git a/bugs/issue-e43b18777ea3aef3566bd80acd126e9ef8a5883a.yaml b/bugs/issue-e43b18777ea3aef3566bd80acd126e9ef8a5883a.yaml
@@ -1,34 +0,0 @@
---- !ditz.rubyforge.org,2008-03-06/issue
-title: long message ids (>255 characters) never get matched by ferret
-desc: |
- this is a ferret bug.
- Apparently, constructing a TermQuery object with a field value of more than
- 255 characters never successfully matches.
-
- This is not a good long-term solution. A good one would be to take the SHA1
- of every message id instead. That will require an index rebuild, so I will
- save that patch until later.
-
-type: :bugfix
-component: indexing
-release: "0.5"
-reporter: William Morgan <wmorgan-sup@masanjin.net>
-status: :closed
-disposition: :fixed
-creation_time: 2008-03-07 03:40:55.475449 Z
-references: []
-
-id: e43b18777ea3aef3566bd80acd126e9ef8a5883a
-log_events:
-- - 2008-03-07 03:40:55.475485 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - created
- - ""
-- - 2008-03-07 03:50:18.590242 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - changed status from unstarted to in_progress
- - ""
-- - 2008-04-20 22:10:44.010446 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - closed issue with disposition fixed
- - ""
diff --git a/bugs/issue-e7739718b4dbf49bbd3dd47133affbf7cb1e2361.yaml b/bugs/issue-e7739718b4dbf49bbd3dd47133affbf7cb1e2361.yaml
@@ -1,24 +0,0 @@
---- !ditz.rubyforge.org,2008-03-06/issue
-title: "maildir speedup: don't scan directory except when polling"
-desc: |-
- lots of useless scanning. removing it should make things faster for large
- maildirs.
-type: :feature
-component: maildir
-release: "0.5"
-reporter: William Morgan <wmorgan-sup@masanjin.net>
-status: :closed
-disposition: fixed
-creation_time: 2008-03-07 04:20:32.735159 Z
-references: []
-
-id: e7739718b4dbf49bbd3dd47133affbf7cb1e2361
-log_events:
-- - 2008-03-07 04:20:32.735194 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - created
- - ""
-- - 2008-03-07 04:20:37.257919 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - changed status from unstarted to fixed
- - ""
diff --git a/bugs/issue-e9c2f66a7ff4fb4525c2719e77ac8eedf3835dfd.yaml b/bugs/issue-e9c2f66a7ff4fb4525c2719e77ac8eedf3835dfd.yaml
@@ -1,20 +0,0 @@
---- !ditz.rubyforge.org,2008-03-06/issue
-title: force hook reload feature
-desc: |-
- would be nice for hook debugging. otherwise you have to restart sup
- each time.
-type: :feature
-component: hooks
-release:
-reporter: William Morgan <wmorgan-sup@masanjin.net>
-status: :unstarted
-disposition:
-creation_time: 2008-05-19 23:19:38.202269 Z
-references: []
-
-id: e9c2f66a7ff4fb4525c2719e77ac8eedf3835dfd
-log_events:
-- - 2008-05-19 23:19:38.757600 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - created
- - ""
diff --git a/bugs/issue-f767a9d2071da7b0f66698ce74e642bf347be96b.yaml b/bugs/issue-f767a9d2071da7b0f66698ce74e642bf347be96b.yaml
@@ -1,21 +0,0 @@
---- !ditz.rubyforge.org,2008-03-06/issue
-title: mbox file handle closing
-desc: |-
- currently an open file handle is maintained for every single mbox folder.
- (well, every one that's accessed by polling or by opening a message therefrom.)
- that is plum crazy.
-type: :feature
-component: mbox
-release:
-reporter: William Morgan <wmorgan-sup@masanjin.net>
-status: :unstarted
-disposition:
-creation_time: 2008-03-07 04:27:35.146273 Z
-references: []
-
-id: f767a9d2071da7b0f66698ce74e642bf347be96b
-log_events:
-- - 2008-03-07 04:27:35.146307 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - created
- - ""
diff --git a/bugs/issue-fd7c7a7d7caf41ff20e7d10ca3f074fc02c14a5b.yaml b/bugs/issue-fd7c7a7d7caf41ff20e7d10ca3f074fc02c14a5b.yaml
@@ -1,30 +0,0 @@
---- !ditz.rubyforge.org,2008-03-06/issue
-title: thread joining doesn't always work
-desc: |
- sometimes it works, and sometimes it doesn't, and i haven't found the
- pattern yet.
-
- also, UpdateManager isn't being called properly (maybe even needs a
- custom event). e.g. if you join in search-results-mode, the results
- aren't joined in inbox-mode.
-
-type: :bugfix
-component: indexing
-release:
-reporter: William Morgan <wmorgan-sup@masanjin.net>
-status: :unstarted
-disposition:
-creation_time: 2008-04-29 00:09:38.366801 Z
-references: []
-
-id: fd7c7a7d7caf41ff20e7d10ca3f074fc02c14a5b
-log_events:
-- - 2008-04-29 00:09:38.998592 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - created
- - ""
-- - 2008-07-31 00:54:39.251862 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - unassigned from release 0.6
- - ""
-git_branch:
diff --git a/bugs/issue-fdfc906e8f4f6eb10f1ebdf39c416415d9ab6af9.yaml b/bugs/issue-fdfc906e8f4f6eb10f1ebdf39c416415d9ab6af9.yaml
@@ -1,26 +0,0 @@
---- !ditz.rubyforge.org,2008-03-06/issue
-title: archive-and-mark-read command in inbox-mode
-desc: ""
-type: :feature
-component: curses
-release: "0.6"
-reporter: William Morgan <wmorgan-sup@masanjin.net>
-status: :closed
-disposition: :fixed
-creation_time: 2008-04-26 23:32:53.791207 Z
-references: []
-
-id: fdfc906e8f4f6eb10f1ebdf39c416415d9ab6af9
-log_events:
-- - 2008-04-26 23:32:57.083084 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - created
- - ""
-- - 2008-04-26 23:33:12.980220 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - changed status from unstarted to in_progress
- - branch read-and-archive. in next.
-- - 2008-05-25 04:14:48.307896 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - closed issue with disposition fixed
- - merged into master
diff --git a/bugs/project.yaml b/bugs/project.yaml
@@ -1,53 +0,0 @@
---- !ditz.rubyforge.org,2008-03-06/project
-name: sup
-version: 0.0.1
-components:
-- !ditz.rubyforge.org,2008-03-06/component
- name: sup
-- !ditz.rubyforge.org,2008-03-06/component
- name: threading
-- !ditz.rubyforge.org,2008-03-06/component
- name: indexing
-- !ditz.rubyforge.org,2008-03-06/component
- name: curses
-- !ditz.rubyforge.org,2008-03-06/component
- name: hooks
-- !ditz.rubyforge.org,2008-03-06/component
- name: sup-sync
-- !ditz.rubyforge.org,2008-03-06/component
- name: sup-sync-back
-- !ditz.rubyforge.org,2008-03-06/component
- name: maildir
-- !ditz.rubyforge.org,2008-03-06/component
- name: imap
-- !ditz.rubyforge.org,2008-03-06/component
- name: mbox
-- !ditz.rubyforge.org,2008-03-06/component
- name: crypto
-releases:
-- !ditz.rubyforge.org,2008-03-06/release
- name: "0.5"
- status: :released
- release_time: 2008-04-22 15:55:47.323776 Z
- log_events:
- - - 2008-03-07 02:37:54.903172 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - created
- - ""
- - - 2008-04-22 15:55:47.323829 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - released
- - ""
-- !ditz.rubyforge.org,2008-03-06/release
- name: "0.6"
- status: :released
- release_time: 2008-08-04 02:48:44.154676 Z
- log_events:
- - - 2008-04-20 21:17:04.443432 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - created
- - ""
- - - 2008-08-04 02:48:44.154704 Z
- - William Morgan <wmorgan-sup@masanjin.net>
- - released
- - ""
diff --git a/contrib/colorpicker.rb b/contrib/colorpicker.rb
@@ -1,10 +1,6 @@
require 'rubygems'
-begin
- require 'ncursesw'
-rescue LoadError
- require 'ncurses'
-end
+require 'ncursesw'
Ncurses.initscr
Ncurses.noecho
diff --git a/lib/sup.rb b/lib/sup.rb
@@ -1,6 +1,11 @@
require 'rubygems'
+
require 'syck'
require 'yaml'
+if YAML.const_defined? :ENGINE
+ YAML::ENGINE.yamler = 'syck'
+end
+
require 'zlib'
require 'thread'
require 'fileutils'
@@ -39,8 +44,6 @@ class Module
end
module Redwood
- VERSION = "git"
-
BASE_DIR = ENV["SUP_BASE"] || File.join(ENV["HOME"], ".sup")
CONFIG_FN = File.join(BASE_DIR, "config.yaml")
COLOR_FN = File.join(BASE_DIR, "colors.yaml")
@@ -285,7 +288,8 @@ EOS
:poll_interval => 300,
:wrap_width => 0,
:slip_rows => 0,
- :col_jump => 2
+ :col_jump => 2,
+ :stem_language => "english"
}
if File.exists? filename
config = Redwood::load_yaml_obj filename
@@ -330,6 +334,7 @@ EOS
:load_config, :managers
end
+require 'sup/version'
require "sup/util"
require "sup/hook"
require "sup/time"
diff --git a/lib/sup/buffer.rb b/lib/sup/buffer.rb
@@ -1,11 +1,7 @@
require 'etc'
require 'thread'
-begin
- require 'ncursesw'
-rescue LoadError
- require 'ncurses'
-end
+require 'ncursesw'
if defined? Ncurses
module Ncurses
diff --git a/lib/sup/client.rb b/lib/sup/client.rb
@@ -1,92 +0,0 @@
-require 'sup/protocol'
-
-module Redwood
-
-class Client < EM::P::RedwoodClient
- def initialize *a
- @next_tag = 1
- @cbs = {}
- super *a
- end
-
- def mktag &b
- @next_tag.tap do |x|
- @cbs[x] = b
- @next_tag += 1
- end
- end
-
- def rmtag tag
- @cbs.delete tag
- end
-
- def query qstr, offset, limit, raw, &b
- tag = mktag do |type,tag,args|
- if type == 'message'
- b.call args
- else
- fail unless type == 'done'
- b.call nil
- rmtag tag
- end
- end
- send_message 'query', tag,
- 'query' => qstr,
- 'offset' => offset,
- 'limit' => limit,
- 'raw' => raw
- end
-
- def count qstr, &b
- tag = mktag do |type,tag,args|
- b.call args['count']
- rmtag tag
- end
- send_message 'count', tag,
- 'query' => qstr
- end
-
- def label qstr, add, remove, &b
- tag = mktag do |type,tag,args|
- b.call
- rmtag tag
- end
- send_message 'label', tag,
- 'query' => qstr,
- 'add' => add,
- 'remove' => remove
- end
-
- def add raw, labels, &b
- tag = mktag do |type,tag,args|
- b.call
- rmtag tag
- end
- send_message 'add', tag,
- 'raw' => raw,
- 'labels' => labels
- end
-
- def thread msg_id, raw, &b
- tag = mktag do |type,tag,args|
- if type == 'message'
- b.call args
- else
- fail unless type == 'done'
- b.call nil
- rmtag tag
- end
- end
-
- send_message 'thread', tag,
- 'message_id' => msg_id,
- 'raw' => raw
- end
-
- def receive_message type, tag, args
- cb = @cbs[tag] or fail "invalid tag #{tag.inspect}"
- cb[type, tag, args]
- end
-end
-
-end
diff --git a/lib/sup/contact.rb b/lib/sup/contact.rb
@@ -27,9 +27,10 @@ class ContactManager
def contacts_with_aliases; @a2p.values.uniq end
def update_alias person, aalias=nil
- if(old_aalias = @p2a[person]) # remove old alias
+ old_aalias = @p2a[person]
+ if(old_aalias != nil and old_aalias != "") # remove old alias
@a2p.delete old_aalias
- @e2p.delete old_aalias.email
+ @e2p.delete person.email
end
@p2a[person] = aalias
unless aalias.nil? || aalias.empty?
diff --git a/lib/sup/crypto.rb b/lib/sup/crypto.rb
@@ -1,4 +1,6 @@
begin
+ # gpgme broke its API in 2.0, so make sure we have the old version for now.
+ gem 'gpgme', '=1.0.8'
require 'gpgme'
rescue LoadError
end
@@ -39,6 +41,20 @@ from_key: the key that generated the signature (class is GPGME::Key)
Return value: an array of lines of output
EOS
+ HookManager.register "gpg-expand-keys", <<EOS
+Runs when the list of encryption recipients is created, allowing you to
+replace a recipient with one or more GPGME recipients. For example, you could
+replace the email address of a mailing list with the key IDs that belong to
+the recipients of that list. This is essentially what GPG groups do, which
+are not supported by GPGME.
+
+Variables:
+recipients: an array of recipients of the current email
+
+Return value: an array of recipients (email address or GPG key ID) to encrypt
+the email for
+EOS
+
def initialize
@mutex = Mutex.new
@@ -135,7 +151,7 @@ EOS
gpg_opts = HookManager.run("gpg-options",
{:operation => "encrypt", :options => gpg_opts}) || gpg_opts
recipients = to + [from]
-
+ recipients = HookManager.run("gpg-expand-keys", { :recipients => recipients }) || recipients
begin
cipher = GPGME.encrypt(recipients, format_payload(payload), gpg_opts)
rescue GPGME::Error => exc
diff --git a/lib/sup/index.rb b/lib/sup/index.rb
@@ -25,7 +25,6 @@ module Redwood
class Index
include InteractiveLock
- STEM_LANGUAGE = "english"
INDEX_VERSION = '4'
## dates are converted to integers for xapian, and are used for document ids,
@@ -428,7 +427,7 @@ EOS
qp = Xapian::QueryParser.new
qp.database = @xapian
- qp.stemmer = Xapian::Stem.new(STEM_LANGUAGE)
+ qp.stemmer = Xapian::Stem.new($config[:stem_language])
qp.stemming_strategy = Xapian::QueryParser::STEM_SOME
qp.default_op = Xapian::Query::OP_AND
qp.add_valuerangeprocessor(Xapian::NumberValueRangeProcessor.new(DATE_VALUENO, 'date:', true))
@@ -804,7 +803,7 @@ class Xapian::Document
def index_text text, prefix, weight=1
term_generator = Xapian::TermGenerator.new
- term_generator.stemmer = Xapian::Stem.new(Redwood::Index::STEM_LANGUAGE)
+ term_generator.stemmer = Xapian::Stem.new($config[:stem_language])
term_generator.document = self
term_generator.index_text text, weight, prefix
end
diff --git a/lib/sup/message-chunks.rb b/lib/sup/message-chunks.rb
@@ -1,4 +1,5 @@
require 'tempfile'
+require 'rbconfig'
## Here we define all the "chunks" that a message is parsed
## into. Chunks are used by ThreadViewMode to render a message. Chunks
@@ -146,7 +147,7 @@ EOS
def initial_state; :open end
def viewable?; @lines.nil? end
def view_default! path
- case Config::CONFIG['arch']
+ case RbConfig::CONFIG['arch']
when /darwin/
cmd = "open '#{path}'"
else
diff --git a/lib/sup/message.rb b/lib/sup/message.rb
@@ -615,7 +615,7 @@ private
## like ":a:a:a:a:a" that occurred in certain emails.
if line =~ QUOTE_PATTERN || (line =~ /:$/ && line =~ /\w/ && nextline =~ QUOTE_PATTERN)
newstate = :quote
- elsif line =~ SIG_PATTERN && (lines.length - i) < MAX_SIG_DISTANCE
+ elsif line =~ SIG_PATTERN && (lines.length - i) < MAX_SIG_DISTANCE && !lines[(i+1)..-1].index { |l| l =~ /^-- $/ }
newstate = :sig
elsif line =~ BLOCK_QUOTE_PATTERN
newstate = :block_quote
diff --git a/lib/sup/modes/edit-message-mode.rb b/lib/sup/modes/edit-message-mode.rb
@@ -93,7 +93,6 @@ EOS
@header_lines = []
@body = opts.delete(:body) || []
- @body += sig_lines if $config[:edit_signature] && !opts.delete(:have_signature)
if opts[:attachments]
@attachments = opts[:attachments].values
@@ -112,10 +111,14 @@ EOS
@message_id = "<#{Time.now.to_i}-sup-#{rand 10000}@#{hostname}>"
@edited = false
+ @sig_edited = false
@selectors = []
@selector_label_width = 0
@async_mode = nil
+ HookManager.run "before-edit", :header => @header, :body => @body
+
+ @account_selector = nil
# only show account selector if there is more than one email address
if $config[:account_selector] && AccountManager.user_emails.length > 1
## Duplicate e-mail strings to prevent a "can't modify frozen
@@ -144,7 +147,6 @@ EOS
end
add_selector @crypto_selector if @crypto_selector
- HookManager.run "before-edit", :header => @header, :body => @body
if @crypto_selector
HookManager.run "crypto-mode", :header => @header, :body => @body, :crypto_selector => @crypto_selector
end
@@ -185,14 +187,41 @@ EOS
def edit_cc; edit_field "Cc" end
def edit_subject; edit_field "Subject" end
- def edit_message
- old_from = @header["From"] if @account_selector
-
- @file = Tempfile.new "sup.#{self.class.name.gsub(/.*::/, '').camel_to_hyphy}"
+ def save_message_to_file
+ sig = sig_lines.join("\n")
+ @file = Tempfile.new ["sup.#{self.class.name.gsub(/.*::/, '').camel_to_hyphy}", ".eml"]
@file.puts format_headers(@header - NON_EDITABLE_HEADERS).first
@file.puts
@file.puts @body.join("\n")
+ @file.puts sig if ($config[:edit_signature] and !@sig_edited)
@file.close
+ end
+
+ def set_sig_edit_flag
+ sig = sig_lines.join("\n")
+ if $config[:edit_signature]
+ pbody = @body.join("\n")
+ blen = pbody.length
+ slen = sig.length
+
+ if blen > slen and pbody[blen-slen..blen] == sig
+ @sig_edited = false
+ @body = pbody[0..blen-slen].split("\n")
+ else
+ @sig_edited = true
+ end
+ end
+ end
+
+ def edit_message
+ old_from = @header["From"] if @account_selector
+
+ begin
+ save_message_to_file
+ rescue SystemCallError => e
+ BufferManager.flash "Can't save message to file: #{e.message}"
+ return
+ end
editor = $config[:editor] || ENV['EDITOR'] || "/usr/bin/vi"
@@ -204,6 +233,7 @@ EOS
header, @body = parse_file @file.path
@header = header - NON_EDITABLE_HEADERS
+ set_sig_edit_flag
if @account_selector and @header["From"] != old_from
@account_user = @header["From"]
@@ -218,11 +248,12 @@ EOS
end
def edit_message_async
- @file = Tempfile.new ["sup.#{self.class.name.gsub(/.*::/, '').camel_to_hyphy}", ".eml"]
- @file.puts format_headers(@header - NON_EDITABLE_HEADERS).first
- @file.puts
- @file.puts @body.join("\n")
- @file.close
+ begin
+ save_message_to_file
+ rescue SystemCallError => e
+ BufferManager.flash "Can't save message to file: #{e.message}"
+ return
+ end
@mtime = File.mtime @file.path
@@ -245,6 +276,7 @@ EOS
header, @body = parse_file @file.path
@header = header - NON_EDITABLE_HEADERS
+ set_sig_edit_flag
handle_new_text @header, @body
update
@@ -362,7 +394,7 @@ protected
def regen_text
header, @header_lines = format_headers(@header - NON_EDITABLE_HEADERS) + [""]
@text = header + [""] + @body
- @text += sig_lines unless $config[:edit_signature]
+ @text += sig_lines unless @sig_edited
@attachment_lines_offset = 0
@@ -477,7 +509,7 @@ protected
m = RMail::Message.new
m.header["Content-Type"] = "text/plain; charset=#{$encoding}"
m.body = @body.join("\n")
- m.body += sig_lines.join("\n") unless $config[:edit_signature]
+ m.body += "\n" + sig_lines.join("\n") unless @sig_edited
## body must end in a newline or GPG signatures will be WRONG!
m.body += "\n" unless m.body =~ /\n\Z/
diff --git a/lib/sup/modes/reply-mode.rb b/lib/sup/modes/reply-mode.rb
@@ -48,6 +48,7 @@ EOS
## the full headers (most importantly the list-post header, if
## any)
body = reply_body_lines message
+ @body_orig = body
## first, determine the address at which we received this email. this will
## become our From: address in the reply.
@@ -97,14 +98,21 @@ EOS
@headers = {}
@headers[:recipient] = {
"To" => cc.map { |p| p.full_address },
+ "Cc" => [],
} if useful_recipient
## typically we don't want to have a reply-to-sender option if the sender
## is a user account. however, if the cc is empty, it's a message to
## ourselves, so for the lack of any other options, we'll add it.
- @headers[:sender] = { "To" => [to.full_address], } if !AccountManager.is_account?(to) || !useful_recipient
+ @headers[:sender] = {
+ "To" => [to.full_address],
+ "Cc" => [],
+ } if !AccountManager.is_account?(to) || !useful_recipient
- @headers[:user] = {}
+ @headers[:user] = {
+ "To" => [],
+ "Cc" => [],
+ }
not_me_ccs = cc.select { |p| !AccountManager.is_account?(p) }
@headers[:all] = {
@@ -114,22 +122,11 @@ EOS
@headers[:list] = {
"To" => [@m.list_address.full_address],
+ "Cc" => [],
} if @m.is_list_message?
refs = gen_references
- @headers.each do |k, v|
- @headers[k] = {
- "From" => from.full_address,
- "To" => [],
- "Cc" => [],
- "Bcc" => [],
- "In-reply-to" => "<#{@m.id}>",
- "Subject" => Message.reify_subj(@m.subj),
- "References" => refs,
- }.merge v
- end
-
types = REPLY_TYPES.select { |t| @headers.member?(t) }
@type_selector = HorizontalSelector.new "Reply to:", types, types.map { |x| TYPE_DESCRIPTIONS[x] }
@@ -148,13 +145,17 @@ EOS
:recipient
end)
- @bodies = {}
- @headers.each do |k, v|
- @bodies[k] = body
- HookManager.run "before-edit", :header => v, :body => @bodies[k]
- end
+ headers_full = {
+ "From" => from.full_address,
+ "Bcc" => [],
+ "In-reply-to" => "<#{@m.id}>",
+ "Subject" => Message.reify_subj(@m.subj),
+ "References" => refs,
+ }.merge @headers[@type_selector.val]
+
+ HookManager.run "before-edit", :header => headers_full, :body => body
- super :header => @headers[@type_selector.val], :body => @bodies[@type_selector.val], :twiddles => false
+ super :header => headers_full, :body => body, :twiddles => false
add_selector @type_selector
end
@@ -163,8 +164,7 @@ protected
def move_cursor_right
super
if @headers[@type_selector.val] != self.header
- self.header = @headers[@type_selector.val]
- self.body = @bodies[@type_selector.val] unless @edited
+ self.header = self.header.merge @headers[@type_selector.val]
rerun_crypto_selector_hook
update
end
@@ -173,8 +173,7 @@ protected
def move_cursor_left
super
if @headers[@type_selector.val] != self.header
- self.header = @headers[@type_selector.val]
- self.body = @bodies[@type_selector.val] unless @edited
+ self.header = self.header.merge @headers[@type_selector.val]
rerun_crypto_selector_hook
update
end
@@ -192,14 +191,15 @@ protected
end
def handle_new_text new_header, new_body
- if new_body != @bodies[@type_selector.val]
- @bodies[@type_selector.val] = new_body
+ if new_body != @body_orig
+ @body_orig = new_body
@edited = true
end
old_header = @headers[@type_selector.val]
- if new_header.size != old_header.size || old_header.any? { |k, v| new_header[k] != v }
+ if old_header.any? { |k, v| new_header[k] != v }
@type_selector.set_to :user
- self.header = @headers[:user] = new_header
+ self.header["To"] = @headers[:user]["To"] = new_header["To"]
+ self.header["Cc"] = @headers[:user]["Cc"] = new_header["Cc"]
update
end
end
@@ -210,8 +210,10 @@ protected
def edit_field field
edited_field = super
- if edited_field && edited_field != "Subject"
+ if edited_field and (field == "To" or field == "Cc")
@type_selector.set_to :user
+ @headers[:user]["To"] = self.header["To"]
+ @headers[:user]["Cc"] = self.header["Cc"]
update
end
end
diff --git a/lib/sup/modes/thread-view-mode.rb b/lib/sup/modes/thread-view-mode.rb
@@ -846,7 +846,7 @@ private
else
width = buffer.content_width
end
- lines = lines.map { |l| l.chomp.wrap width }.flatten
+ lines = lines.map { |l| l.chomp.wrap width if l }.flatten
end
return lines
end
diff --git a/lib/sup/protocol.rb b/lib/sup/protocol.rb
@@ -1,161 +0,0 @@
-require 'eventmachine'
-require 'socket'
-require 'stringio'
-require 'yajl'
-
-class EM::P::Redwood < EM::Connection
- VERSION = 1
- ENCODINGS = %w(marshal json)
-
- attr_reader :debug
-
- def initialize *args
- @state = :negotiating
- @version_buf = ""
- @debug = false
- super
- end
-
- def receive_data data
- if @state == :negotiating
- @version_buf << data
- if i = @version_buf.index("\n")
- l = @version_buf.slice!(0..i)
- receive_version *parse_version(l.strip)
- x = @version_buf
- @version_buf = nil
- @state = :established
- connection_established
- receive_data x
- end
- else
- @filter.decode(data).each do |msg|
- puts "#{self.class.name} received: #{msg.inspect}" if @debug
- validate_message *msg
- receive_message *msg
- end
- end
- end
-
- def connection_established
- end
-
- def send_version encodings, extensions
- fail if encodings.empty?
- send_data "Redwood #{VERSION} #{encodings * ','} #{extensions.empty? ? :none : (extensions * ',')}\n"
- end
-
- def send_message type, tag, params={}
- fail "attempted to send message during negotiation" unless @state == :established
- puts "#{self.class.name} sent: #{[type, tag, params].inspect}" if @debug
- validate_message type, tag, params
- send_data @filter.encode([type,tag,params])
- end
-
- def receive_version l
- fail "unimplemented"
- end
-
- def receive_message type, tag, params
- fail "unimplemented"
- end
-
-private
-
- def validate_message type, tag, params
- fail unless type.is_a? String or type.is_a? Symbol
- fail unless tag.is_a? String or tag.is_a? Integer
- fail unless params.is_a? Hash
- end
-
- def parse_version l
- l =~ /^Redwood\s+(\d+)\s+([\w,]+)\s+([\w,]+)$/ or fail "unexpected banner #{l.inspect}"
- version, encodings, extensions = $1.to_i, $2, $3
- encodings = encodings.split ','
- extensions = extensions.split ','
- extensions = [] if extensions == ['none']
- fail unless version == VERSION
- fail if encodings.empty?
- [encodings, extensions]
- end
-
- def create_filter encoding
- case encoding
- when 'json' then JSONFilter.new
- when 'marshal' then MarshalFilter.new
- else fail "unknown encoding #{encoding.inspect}"
- end
- end
-
- class JSONFilter
- def initialize
- @parser = Yajl::Parser.new :check_utf8 => false
- end
-
- def decode chunk
- parsed = []
- @parser.on_parse_complete = lambda { |o| parsed << o }
- @parser << chunk
- parsed
- end
-
- def encode *os
- os.inject('') { |s, o| s << Yajl::Encoder.encode(o) }
- end
- end
-
- class MarshalFilter
- def initialize
- @buf = ''
- @state = :prefix
- @size = 0
- end
-
- def decode chunk
- received = []
- @buf << chunk
-
- begin
- if @state == :prefix
- break unless @buf.size >= 4
- prefix = @buf.slice!(0...4)
- @size = prefix.unpack('N')[0]
- @state = :data
- end
-
- fail unless @state == :data
- break if @buf.size < @size
- received << Marshal.load(@buf.slice!(0...@size))
- @state = :prefix
- end until @buf.empty?
-
- received
- end
-
- def encode o
- data = Marshal.dump o
- [data.size].pack('N') + data
- end
- end
-end
-
-class EM::P::RedwoodServer < EM::P::Redwood
- def post_init
- send_version ENCODINGS, []
- end
-
- def receive_version encodings, extensions
- fail unless encodings.size == 1
- fail unless ENCODINGS.member? encodings.first
- @filter = create_filter encodings.first
- end
-end
-
-class EM::P::RedwoodClient < EM::P::Redwood
- def receive_version encodings, extensions
- encoding = (ENCODINGS & encodings).first
- fail unless encoding
- @filter = create_filter encoding
- send_version [encoding], []
- end
-end
diff --git a/lib/sup/server.rb b/lib/sup/server.rb
@@ -1,116 +0,0 @@
-require 'sup/protocol'
-
-module Redwood
-
-class Server < EM::P::RedwoodServer
- def initialize index
- super
- @index = index
- end
-
- def receive_message type, tag, params
- if respond_to? :"request_#{type}"
- send :"request_#{type}", tag, params
- else
- send_message 'error', tag, 'description' => "invalid request type #{type.inspect}"
- end
- end
-
- def request_query tag, a
- q = @index.parse_query a['query']
- query q, a['offset'], a['limit'], a['raw'] do |r|
- send_message 'message', tag, r
- end
- send_message 'done', tag
- end
-
- def request_count tag, a
- q = @index.parse_query a['query']
- c = count q
- send_message 'count', tag, 'count' => c
- end
-
- def request_label tag, a
- q = @index.parse_query a['query']
- label q, a['add'], a['remove']
- send_message 'done', tag
- end
-
- def request_add tag, a
- add a['raw'], a['labels']
- send_message 'done', tag
- end
-
- def request_thread tag, a
- thread a['message_id'], a['raw'] do |r|
- send_message 'message', tag, r
- end
- send_message 'done', tag
- end
-
-private
-
- def result_from_message m, raw
- mkperson = lambda { |p| { :email => p.email, :name => p.name } }
- {
- 'summary' => {
- 'message_id' => m.id,
- 'date' => m.date,
- 'from' => mkperson[m.from],
- 'to' => m.to.map(&mkperson),
- 'cc' => m.cc.map(&mkperson),
- 'bcc' => m.bcc.map(&mkperson),
- 'subject' => m.subj,
- 'refs' => m.refs,
- 'replytos' => m.replytos,
- 'labels' => m.labels.map(&:to_s),
- },
- 'raw' => raw ? m.raw_message : nil,
- }
- end
-
- def query query, offset, limit, raw
- c = 0
- @index.each_message query do |m|
- next if c < offset
- break if c >= offset + limit if limit
- yield result_from_message(m, raw)
- c += 1
- end
- nil
- end
-
- def count query
- @index.num_results_for query
- end
-
- def label query, remove_labels, add_labels
- @index.each_message query do |m|
- remove_labels.each { |l| m.remove_label l }
- add_labels.each { |l| m.add_label l }
- @index.update_message_state m
- end
- nil
- end
-
- def add raw, labels
- SentManager.source.store_message Time.now, "test@example.com" do |io|
- io.write raw
- end
- PollManager.poll_from SentManager.source do |sym,m,old_m,progress|
- next unless sym == :add
- m.labels = labels
- end
- nil
- end
-
- def thread msg_id, raw
- msg = @index.build_message msg_id
- @index.each_message_in_thread_for msg do |id, builder|
- m = builder.call
- yield result_from_message(m, raw)
- end
- end
-end
-
-end
diff --git a/lib/sup/source.rb b/lib/sup/source.rb
@@ -160,7 +160,7 @@ module SerializeLabelsNicely
end
def after_unmarshal!
- @labels = Set.new(@labels.map { |s| s.to_sym })
+ @labels = Set.new(@labels.to_a.map { |s| s.to_sym })
end
end
diff --git a/lib/sup/util.rb b/lib/sup/util.rb
@@ -5,6 +5,7 @@ require 'pathname'
require 'set'
require 'enumerator'
require 'benchmark'
+require 'iconv'
## time for some monkeypatching!
class Symbol
diff --git a/lib/sup/version.rb b/lib/sup/version.rb
@@ -0,0 +1,3 @@
+module Redwood
+ VERSION = "git"
+end
diff --git a/protocol.md b/protocol.md
@@ -1,168 +0,0 @@
-Redwood Protocol
-================
-
-The server begins by sending a line of the form `Redwood <ver> <encodings>
-<extensions>`, where `ver` is the major protocol version (1), encodings is a
-comma-separated list of supported message encodings (e.g. `json,bert,marshal`),
-and `extensions` is a comma-separated list of protocol extensions. The server
-must advertise at least one encoding. A zero-length list of extensions is
-represented by `none`. The client replies in the same format, with the
-restrictions that the protocol version must match, `encodings` and `extensions`
-must be subsets of what the server advertised, and there must be exactly 1
-encoding specified.
-
-Requests and responses are represented as `[type, params]`, where `type`
-is a lowercase string corresponding to one of the message types specified
-below and `params` is a dictionary with string keys.
-
-Requests
---------
-
-There may be zero or more replies to a request. Multiple requests may be
-issued concurrently. There is an implicit, optional, opaque `tag` parameter to
-every request which will be returned in all replies to the request to
-aid clients in keeping multiple requests in flight. `tag` may be an
-arbitrary datastructure and for the purposes of Cancel defaults to nil.
-
-### Query
-Send a Message response for each hit on `query` starting at `offset`
-and sending a maximum of `limit` Messages responses. `raw` controls
-whether the raw message text is included in the response.
-
-#### Parameters
-* `query`: Query
-* `offset`: int
-* `limit`: int
-* `raw`: boolean
-
-#### Responses
-* multiple Message
-* one Done after all Messages
-
-
-### Count
-Send a count reply with the number of hits for `query`.
-
-#### Parameters
-* `query`: Query
-
-#### Responses
-* one Count
-
-
-### Label
-Modify the labels on all messages matching `query`. First removes the
-labels in `remove` then adds those in `add`.
-
-#### Parameters
-* `query`: Query
-* `add`: string list
-* `remove`: string list
-
-#### Responses
-* one Done
-
-
-### Add
-Add a message to the database. `raw` is the normal RFC 2822 message text.
-
-#### Parameters
-* `raw`: string
-* `labels`: string list
-
-#### Responses
-* one Done
-
-
-### Stream
-Sends a Message response whenever a new message that matches `query` is
-added with the Add request. This request will not terminate until a
-corresponding Cancel request is sent.
-
-#### Parameters
-* `query`: Query
-
-#### Responses
-multiple Message
-
-
-### Cancel
-Cancels all active requests with tag `target`. This is only required to
-be implemented for the Stream request.
-
-#### Parameters
-* `target`: string
-
-#### Responses
-one Done
-
-
-
-Responses
----------
-
-### Done
-Signifies that a request has completed successfully.
-
-
-### Message
-Represents a query result. If `raw` is present it is the raw message
-text that was previously a parameter to the Add request.
-
-#### Parameters
-* `summary`: Summary
-* `raw`: optional string
-
-
-### Count
-`count` is the number of messages matched.
-
-#### Parameters
-* `count`: int
-
-
-### Error
-
-#### Parameters
-* `type`: string
-* `message`: string
-
-
-
-Datatypes
----------
-
-### Query
-Recursive prefix-notation datastructure describing a boolean condition.
-Where `a` and `b` are Queries and `field` and `value` are strings, a
-Query can be any of the following:
-
-* `[:and, a, b, ...]`
-* `[:or, a, b, ...]`
-* `[:not, a, b]`
-* `[:term, field, value]`
-
-
-### Summary
-* `message_id`: string
-* `date`: time
-* `from`: Person
-* `to`, `cc`, `bcc`: Person list
-* `subject`: string
-* `refs`: string list
-* `replytos`: string list
-* `labels`: string list
-
-
-### Person
-* `name`: string
-* `email`: string
-
-
-TODO
-----
-
-* Protocol negotiation
- - Version
- - Compression (none, gzip, ...)
-* Specify string encodings
diff --git a/sup-files.rb b/sup-files.rb
@@ -1,11 +0,0 @@
-SUP_LIB_DIRS = %w(lib lib/sup lib/sup/modes)
-SUP_EXECUTABLES = %w(sup sup-add sup-cmd sup-config sup-dump sup-import-dump sup-recover-sources sup-server sup-sync sup-sync-back sup-tweak-labels)
-SUP_EXTRA_FILES = %w(CONTRIBUTORS README.txt LICENSE History.txt ReleaseNotes)
-SUP_FILES =
- SUP_EXTRA_FILES +
- SUP_EXECUTABLES.map { |f| "bin/#{f}" } +
- SUP_LIB_DIRS.map { |d| Dir["#{d}/*.rb"] }.flatten
-
-if $0 == __FILE__ # if executed from commandline
- puts SUP_FILES
-end
diff --git a/sup-version.rb b/sup-version.rb
@@ -1,15 +0,0 @@
-## allow people who use development versions by running "rake gem"
-## and installing the resulting gem it to be able to do this. (gem
-## versions must be in dotted-digit notation only and can be passed
-## with the REL environment variable to "rake gem").
-SUP_VERSION = if ENV['REL']
- ENV['REL']
-else
- $:.unshift 'lib' # force loading from ./lib/ if it exists
- require 'sup'
- if Redwood::VERSION == "git"
- "999"
- else
- Redwood::VERSION
- end
-end
diff --git a/sup.gemspec b/sup.gemspec
@@ -0,0 +1,51 @@
+lib = File.expand_path("../lib", __FILE__)
+$:.unshift(lib) unless $:.include?(lib)
+
+require 'sup/version'
+
+# Files
+SUP_EXECUTABLES = %w(sup sup-add sup-config sup-dump sup-import-dump
+ sup-recover-sources sup-sync sup-sync-back sup-tweak-labels)
+SUP_EXTRA_FILES = %w(CONTRIBUTORS README.md LICENSE History.txt ReleaseNotes)
+SUP_FILES =
+ SUP_EXTRA_FILES +
+ SUP_EXECUTABLES.map { |f| "bin/#{f}" } +
+ Dir["lib/**/*.rb"]
+
+
+module Redwood
+ Gemspec = Gem::Specification.new do |s|
+ s.name = "sup"
+ s.version = ENV["REL"] || (::Redwood::VERSION == "git" ? "999" : ::Redwood::VERSION)
+ s.date = Time.now.strftime "%Y-%m-%d"
+ s.authors = ["William Morgan", "Gaute Hope", "Hamish Downer", "Matthieu Rakotojaona"]
+ s.email = "sup-talk@rubyforge.org"
+ s.summary = "A console-based email client with the best features of GMail, mutt and Emacs"
+ s.homepage = "https://github.com/sup-heliotrope/sup/wiki"
+ s.description = <<-DESC
+ Sup is a console-based email client for people with a lot of email.
+
+ * GMail-like thread-centered archiving, tagging and muting
+ * Handling mail from multiple mbox and Maildir sources
+ * Blazing fast full-text search with a rich query language
+ * Multiple accounts - pick the right one when sending mail
+ * Ruby-programmable hooks
+ * Automatically tracking recent contacts
+DESC
+ s.license = 'GPL-2'
+ s.files = SUP_FILES
+ s.executables = SUP_EXECUTABLES
+
+ s.add_dependency "xapian-full-alaveteli", "~> 1.2"
+ s.add_dependency "ncursesw-sup", "~> 1.3", ">= 1.3.1"
+ s.add_dependency "rmail", ">= 0.17"
+ s.add_dependency "highline"
+ s.add_dependency "trollop", ">= 1.12"
+ s.add_dependency "lockfile"
+ s.add_dependency "mime-types", "~> 1"
+ s.add_dependency "gettext"
+
+ s.add_development_dependency "bundler", "~> 1.3"
+ s.add_development_dependency "rake"
+ end
+end
diff --git a/test/dummy_source.rb b/test/dummy_source.rb
@@ -12,7 +12,7 @@ class DummySource < Source
attr_accessor :messages
def initialize uri, last_date=nil, usual=true, archived=false, id=nil, labels=[]
- super uri, last_date, usual, archived, id
+ super uri, usual, archived, id
@messages = nil
end
diff --git a/test/test_header_parsing.rb b/test/test_header_parsing.rb
@@ -7,10 +7,14 @@ require 'stringio'
include Redwood
class TestMBoxParsing < Test::Unit::TestCase
+
def setup
+ @path = Dir.mktmpdir
+ @mbox = File.join(@path, 'test_mbox')
end
def teardown
+ FileUtils.rm_r @path
end
def test_normal_headers
@@ -106,7 +110,7 @@ EOS
end
def test_from_line_splitting
- l = MBox.new StringIO.new(<<EOS)
+ l = MBox.new mbox_for_string(<<EOS)
From sup-talk-bounces@rubyforge.org Mon Apr 27 12:56:18 2009
From: Bob <bob@bob.com>
To: a dear friend
@@ -125,14 +129,14 @@ From bob@bob.com
This is the end of the email.
EOS
- offset, labels = l.next
- assert_equal 0, offset
- offset, labels = l.next
+ offset = l.next_offset 0
+ assert_equal 61, offset
+ offset = l.next_offset 61
assert_nil offset
end
def test_more_from_line_splitting
- l = MBox.new StringIO.new(<<EOS)
+ l = MBox.new mbox_for_string(<<EOS)
From sup-talk-bounces@rubyforge.org Mon Apr 27 12:56:18 2009
From: Bob <bob@bob.com>
To: a dear friend
@@ -145,13 +149,20 @@ To: a dear friend
Hello again! Would you like to buy my products?
EOS
- offset, labels = l.next
+ offset = l.next_offset 0
assert_not_nil offset
- offset, labels = l.next
+ offset = l.next_offset offset
assert_not_nil offset
- offset, labels = l.next
+ offset = l.next_offset offset
assert_nil offset
end
+
+ def mbox_for_string content
+ File.open(@mbox, 'w') do |f|
+ f.write content
+ end
+ "mbox://#{@mbox}"
+ end
end
diff --git a/test/test_message.rb b/test/test_message.rb
@@ -29,9 +29,13 @@ module Redwood
class TestMessage < Test::Unit::TestCase
def setup
+ @path = Dir.mktmpdir
+ Redwood::HookManager.init File.join(@path, 'hooks')
end
def teardown
+ Redwood::HookManager.deinstantiate!
+ FileUtils.rm_r @path
end
def test_simple_message
@@ -72,7 +76,7 @@ EOS
source.messages = [ message ]
source_info = 0
- sup_message = Message.new( {:source => source, :source_info => source_info } )
+ sup_message = Message.build_from_source(source, source_info)
sup_message.load_from_source!
# see how well parsing the header went
@@ -222,7 +226,7 @@ EOS
source.messages = [ message ]
source_info = 0
- sup_message = Message.new( {:source => source, :source_info => source_info } )
+ sup_message = Message.build_from_source(source, source_info)
sup_message.load_from_source!
# read the message body chunks
@@ -272,7 +276,7 @@ EOS
source.messages = [ message ]
source_info = 0
- sup_message = Message.new( {:source => source, :source_info => source_info } )
+ sup_message = Message.build_from_source(source, source_info)
sup_message.load_from_source!
to = sup_message.to
@@ -318,7 +322,7 @@ EOS
source.messages = [ message ]
source_info = 0
- sup_message = Message.new( {:source => source, :source_info => source_info } )
+ sup_message = Message.build_from_source(source, source_info)
sup_message.load_from_source!
# read the message body chunks: no errors should reach this level
@@ -417,7 +421,7 @@ EOS
source.messages = [ message ]
source_info = 0
- sup_message = Message.new( {:source => source, :source_info => source_info } )
+ sup_message = Message.build_from_source(source, source_info)
sup_message.load_from_source!
# read the message body chunks
@@ -508,7 +512,7 @@ EOS
source.messages = [ message ]
source_info = 0
- sup_message = Message.new( {:source => source, :source_info => source_info } )
+ sup_message = Message.build_from_source(source, source_info)
sup_message.load_from_source!
# See how well parsing the message ID went.
@@ -517,7 +521,7 @@ EOS
# Look at another header field whose first line was blank.
list_unsubscribe = sup_message.list_unsubscribe
- assert_equal("<http://mailman2.widget.com/mailman/listinfo/monitor-list>, " +
+ assert_equal("<http://mailman2.widget.com/mailman/listinfo/monitor-list>,\n \t" +
"<mailto:monitor-list-request@widget.com?subject=unsubscribe>",
list_unsubscribe)
diff --git a/test/test_server.rb b/test/test_server.rb
@@ -1,106 +0,0 @@
-#!/usr/bin/ruby
-# encoding: utf-8
-
-require 'test/unit'
-require 'iconv'
-require 'stringio'
-require 'tmpdir'
-require 'fileutils'
-require 'thread'
-require 'eventmachine'
-require 'sup'
-require 'sup/server'
-
-Thread.abort_on_exception = true
-
-module EM
- # Run the reactor in a new thread. This is useful for using EventMachine
- # alongside synchronous code. It is recommended to use EM.error_handler to
- # detect when an exception terminates the reactor thread.
- def self.spawn_reactor_thread
- fail "reactor already started" if EM.reactor_running?
- q = ::Queue.new
- Thread.new { EM.run { q << nil } }
- q.pop
- end
-
- # Stop the reactor and wait for it to finish. This is the counterpart to #spawn_reactor_thread.
- def self.kill_reactor_thread
- fail "reactor is not running" unless EM.reactor_running?
- fail "current thread is running the reactor" if EM.reactor_thread?
- EM.stop
- EM.reactor_thread.join
- end
-end
-
-class QueueingClient < EM::P::RedwoodClient
- def initialize
- super
- @q = Queue.new
- @readyq = Queue.new
- end
-
- def receive_message type, tag, params
- @q << [type, tag, params]
- end
-
- def connection_established
- @readyq << nil
- end
-
- def wait_until_ready
- @readyq.pop
- end
-
- def read
- @q.pop
- end
-
- alias write send_message
-end
-
-class TestServer < Test::Unit::TestCase
- def setup
- port = rand(1000) + 30000
- EM.spawn_reactor_thread
- @path = Dir.mktmpdir
- socket_path = File.join(@path, 'socket')
- Redwood::HookManager.init File.join(@path, 'hooks')
- Redwood::SourceManager.init
- Redwood::SourceManager.load_sources File.join(@path, 'sources.yaml')
- Redwood::Index.init @path
- Redwood::SearchManager.init File.join(@path, 'searches')
- Redwood::Index.load
- @server = EM.start_server socket_path,
- Redwood::Server, Redwood::Index.instance
- @client = EM.connect socket_path, QueueingClient
- @client.wait_until_ready
- end
-
- def teardown
- FileUtils.rm_r @path if passed?
- puts "not cleaning up #{@path}" unless passed?
- %w(Index SearchManager SourceManager HookManager).each do |x|
- Redwood.const_get(x.to_sym).deinstantiate!
- end
- EM.kill_reactor_thread
- end
-
- def test_invalid_request
- @client.write 'foo', '1'
- check @client.read, 'error', '1'
- end
-
- def test_query
- @client.write 'query', '1', 'query' => 'type:mail'
- check @client.read, 'done', '1'
- end
-
- def check resp, type, tag, args={}
- assert_equal type.to_s, resp[0]
- assert_equal tag.to_s, resp[1]
- args.each do |k,v|
- assert_equal v, resp[2][k.to_s]
- end
- end
-end
diff --git a/test/test_yaml_regressions.rb b/test/test_yaml_regressions.rb
@@ -0,0 +1,17 @@
+require 'test/unit'
+
+# Requiring 'yaml' before 'sup' in 1.9.x would get Psych loaded first
+# and becoming the default yamler.
+require 'yaml'
+require 'sup'
+
+module Redwood
+ class TestYamlRegressions < Test::Unit::TestCase
+ def test_yamling_hash
+ hsh = {:foo => 42}
+ reloaded = YAML.load(hsh.to_yaml)
+
+ assert_equal reloaded, hsh
+ end
+ end
+end
diff --git a/www/index.html b/www/index.html
@@ -1,224 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
- <head>
- <title>Sup</title>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <link rel="stylesheet" href="main.css" type="text/css" />
- </head>
-
- <body>
- <h1>Sup</h1>
-
- <blockquote>
- “Finally a mail client that does what we want, how we want it.”
- </blockquote>
-
- <blockquote>
- “Every other client we've tried is intolerable.”
- </blockquote>
-
- <blockquote>
- “It's just what I wanted, but I hadn't realized what I wanted until I saw it.”
- </blockquote>
-
- <blockquote>
- “Sup is almost to the point where I could jump ship from mutt.”
- </blockquote>
-
- <blockquote>
- “I was previously intrigued by a gmail-styled
- mutt-killer written in Ruby, but having actually spent a few
- hours reading the docs, and trying out all the keys, and
- reading the docs again, and trying the keys out again, and then
- actually engaging in a bunch of practice usage runs, I now
- officially can't fucking wait for the future of this thing; it
- has my full attention.”
- </blockquote>
-
- <p>
- Sup is a console-based email client for people with a lot of email.
- It supports tagging, very fast full-text search, automatic contact-
- list management, custom code insertion via a hook system, and more.
- If you're the type of person who treats email as an extension of your
- long-term memory, Sup is for you.
- </p>
-
- <p>
- Sup makes it easy to:
- </p>
-
- <ul>
- <li>
- Handle massive amounts of email.
- </li>
-
- <li>
- Mix email from different sources: mbox files and maildirs.
- For remote sources (IMAP, IMAPS, ssh+file), use another
- tool (offlineimap, fetchmail, rsync) to grab local copies.
- </li>
-
- <li>
- Instantaneously search over your entire email collection.
- Search over body text, or use a query language to combine
- search predicates in any way.
- </li>
-
- <li>
- Handle multiple accounts. Replying to email sent to a
- particular account will use the correct SMTP server, signature,
- and from address.
- </li>
-
- <li>
- Add custom code to handle certain types of messages or to
- handle certain types of text within messages.
- </li>
-
- <li>
- Organize email with user-defined labels, automatically track
- recent contacts, and much more!
- </li>
- </ul>
-
- <p>
- The goal of Sup is to become the email client of choice for nerds
- everywhere.
- </p>
-
- <h2>Screenshots</h2>
-
- <ul id="screenshots">
- <li><a href="ss1.png"><img src="ss1-small.png" alt="Sup screenshot 1" /></a></li>
- <li><a href="ss2.png"><img src="ss2-small.png" alt="Sup screenshot 2" /></a></li>
- <li><a href="ss3.png"><img src="ss3-small.png" alt="Sup screenshot 3" /></a></li>
- <li><a href="ss4.png"><img src="ss4-small.png" alt="Sup screenshot 4" /></a></li>
- <li><a href="ss5.png"><img src="ss5-small.png" alt="Sup screenshot 5" /></a></li>
- <li><a href="ss6.png"><img src="ss6-small.png" alt="Sup screenshot 6" /></a></li>
- </ul>
-
- <h2>Documentation</h2>
-
- <p>
- Please read the <a href="README.txt">README</a>, the <a
- href="FAQ.txt">FAQ</a>, the <a href="NewUserGuide.txt">new user guide</a>
- and the <a href="Philosophy.txt">philosophical statement</a>.
- </p>
-
- <p> Please also read and contribute to the <a href="http://sup.rubyforge.org/wiki/wiki.pl">Sup wiki</a>. </p>
-
- <h2>Status</h2>
-
- <p>
- The current version of Sup is 0.12.1, released 2011-01-23. This is a
- beta release. It supports mbox and Maildir mailstores.
- </p>
-
- <p>To be notified by email of Sup releases, subscribe to the
- <a href="http://rubyforge.org/mailman/listinfo/sup-announce">sup-announce mailing list</a>. One email per release.
- </p>
-
- <!-- <p>Issue and release status is available on the <a href="ditz/">Sup ditz page</a>.</p> -->
- <p>Sup news can often be see on <a href="http://all-thing.net/label/sup/">William's blog</a>.</p>
-
- <h2>Bug reports</h2>
- <p>Find a problem with Sup? Or have a feature you'd like to see? <a href="http://masanjin.net/sup-bugs/issue?@template=item">Submit
- it</a> to the <a href="http://masanjin.net/sup-bugs/">official Sup issue
- tracker</a>.
-
- <h2>Getting it</h2>
-
- <p>
- You can download Sup releases from the <a
- href="http://rubyforge.org/projects/sup/">Sup RubyForge page</a>.
- If you have RubyGems installed, simply command your computer to "gem
- install sup".
- </p>
-
- <p>
- If you're interested in development, you can clone the git repository like so: <code>git clone git://gitorious.org/sup/mainline.git</code>. You can also browse the <a
- href="http://gitorious.org/projects/sup">Sup Gitorious
- repository</a>. You may consider subscribing to the sup-devel list (below).
- </p>
-
- <h2>Make some new friends</h2>
-
- <p> If you'd like to meet hot single Sup users in your area, try the <a
- href="http://rubyforge.org/mailman/listinfo/sup-talk">sup-talk mailing list</a> (<a href="http://rubyforge.org/pipermail/sup-talk/">archives</a>).
- </p>
-
- <p> If you'd like to meet some grumpy old programmers to talk about Sup internals with, try the <a
- href="http://rubyforge.org/mailman/listinfo/sup-devel">sup-devel mailing list</a> (<a href="http://rubyforge.org/pipermail/sup-devel/">archives</a>).
-
-
- <h2>Credit</h2>
-
- <p>
- Sup is brought to you by <a href="http://masanjin.net/">William Morgan</a> and the following honorable contributors:
- <ul>
- <li> William Morgan </li>
- <li> Rich Lane </li>
- <li> Ismo Puustinen </li>
- <li> Nicolas Pouillard </li>
- <li> Eric Sherman </li>
- <li> Michael Stapelberg </li>
- <li> Ben Walton </li>
- <li> Mike Stipicevic </li>
- <li> Marcus Williams </li>
- <li> Lionel Ott </li>
- <li> Tero Tilus </li>
- <li> Ingmar Vanhassel </li>
- <li> Mark Alexander </li>
- <li> Gaute Hope </li>
- <li> Christopher Warrington </li>
- <li> W. Trevor King </li>
- <li> Gaudenz Steinlin </li>
- <li> Richard Brown </li>
- <li> Marc Hartstein </li>
- <li> Sascha Silbe </li>
- <li> Israel Herraiz </li>
- <li> Anthony Martinez </li>
- <li> Hamish Downer </li>
- <li> Bo Borgerson </li>
- <li> William Erik Baxter </li>
- <li> Michael Hamann </li>
- <li> Grant Hollingworth </li>
- <li> Adeodato Simó </li>
- <li> Daniel Schoepe </li>
- <li> Jason Petsod </li>
- <li> Steve Goldman </li>
- <li> Edward Z. Yang </li>
- <li> Decklin Foster </li>
- <li> Cameron Matheson </li>
- <li> Carl Worth </li>
- <li> Jeff Balogh </li>
- <li> Andrew Pimlott </li>
- <li> Alex Vandiver </li>
- <li> Peter Harkins </li>
- <li> Kornilios Kourtis </li>
- <li> Giorgio Lando </li>
- <li> Damien Leone </li>
- <li> Benoît PIERRE </li>
- <li> Alvaro Herrera </li>
- <li> Jonah </li>
- <li> Adam Lloyd </li>
- <li> Todd Eisenberger </li>
- <li> ian </li>
- <li> Steven Walter </li>
- <li> ian </li>
- <li> Jon M. Dugan </li>
- <li> Gregor Hoffleit </li>
- <li> Stefan Lundström </li>
- <li> Kirill Smelkov </li>
- </ul>
- </p>
-
- <p>
- Sup is made possible by the <a href="http://xapian.org">Xapian</a> search engine,
- and by <a href="http://www.lickey.com/">Matt Armstrong</a> and his
- tragically abandoned <a href="http://www.rfc20.org/rubymail/">RubyMail</a>
- package.
- </p>
- </body>
-</html>
diff --git a/www/main.css b/www/main.css
@@ -1,36 +0,0 @@
-body
-{
- background: white;
- color: #404040;
- margin-bottom: 2em;
- margin-left: auto;
- margin-right: auto;
- width: 90%;
-}
-
-a, a:visited
-{
- border-bottom: 1px dotted #03c;
- background: inherit;
- color: #03c;
- text-decoration: none;
-}
-
-#screenshots
-{
- margin: 0;
- padding: 0;
-}
-#screenshots li
-{
- display: inline;
- list-style: none;
-}
-#screenshots a
-{
- border-bottom: none;
-}
-#screenshots img
-{
- border: 0;
-}
diff --git a/www/ss1.png b/www/ss1.png
Binary files differ.
diff --git a/www/ss2.png b/www/ss2.png
Binary files differ.
diff --git a/www/ss3.png b/www/ss3.png
Binary files differ.
diff --git a/www/ss4.png b/www/ss4.png
Binary files differ.
diff --git a/www/ss5.png b/www/ss5.png
Binary files differ.
diff --git a/www/ss6.png b/www/ss6.png
Binary files differ.