sup

A curses threads-with-tags style email client

sup.git

git clone https://supmua.dev/git/sup/

bin/sup-dump (1089B) - raw

      1 #!/usr/bin/env ruby
      2 
      3 $:.unshift File.join(File.dirname(__FILE__), *%w[.. lib])
      4 
      5 require 'xapian'
      6 require 'optimist'
      7 require 'set'
      8 
      9 BASE_DIR = ENV["SUP_BASE"] || File.join(ENV["HOME"], ".sup")
     10 
     11 $opts = Optimist::options do
     12   version "sup-dump"
     13   banner <<EOS
     14 Dumps all message state from the sup index to standard out. You can
     15 later use sup-sync --restored --restore <filename> to recover the index.
     16 
     17 This tool is primarily useful in the event that a Sup upgrade breaks index
     18 format compatibility.
     19 
     20 Usage:
     21   sup-dump > <filename>
     22   sup-dump | bzip2 > <filename> # even better
     23 EOS
     24 end
     25 
     26 xapian = Xapian::Database.new File.join(BASE_DIR, 'xapian')
     27 version = xapian.get_metadata 'rescue-version'
     28 version = '0' if version.empty?
     29 
     30 case version
     31 when '0'
     32   xapian.postlist('Kmail').each do |x|
     33     begin
     34       entry = Marshal.load(xapian.document(x.docid).data)
     35       puts "#{entry[:message_id]} (#{entry[:labels].sort_by { |l| l.to_s } * ' '})"
     36     rescue
     37       $stderr.puts "failed to dump document #{x.docid}"
     38     end
     39   end
     40 else
     41   abort "this sup-dump version doesn't understand your index"
     42 end