sup 0.21.0 → 0.22.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CONTRIBUTORS +18 -17
- data/History.txt +8 -0
- data/Rakefile +0 -1
- data/bin/sup +0 -1
- data/bin/sup-add +1 -2
- data/bin/sup-config +0 -1
- data/bin/sup-dump +0 -1
- data/bin/sup-import-dump +1 -2
- data/bin/sup-sync +0 -1
- data/bin/sup-sync-back-maildir +0 -1
- data/bin/sup-tweak-labels +1 -2
- data/contrib/colorpicker.rb +0 -2
- data/devel/profile.rb +0 -1
- data/ext/mkrf_conf_xapian.rb +0 -2
- data/lib/sup.rb +0 -1
- data/lib/sup/crypto.rb +7 -6
- data/lib/sup/draft.rb +1 -1
- data/lib/sup/mode.rb +2 -2
- data/lib/sup/modes/thread_index_mode.rb +5 -1
- data/lib/sup/modes/thread_view_mode.rb +4 -3
- data/lib/sup/util.rb +1 -75
- data/lib/sup/version.rb +1 -1
- data/sup.gemspec +1 -1
- data/test/{messages → fixtures}/bad-content-transfer-encoding-1.eml +0 -0
- data/test/{messages → fixtures}/binary-content-transfer-encoding-2.eml +0 -0
- data/test/fixtures/blank-header-fields.eml +71 -0
- data/test/{unit/fixtures → fixtures}/contacts.txt +0 -0
- data/test/fixtures/malicious-attachment-names.eml +55 -0
- data/test/fixtures/missing-from-to.eml +18 -0
- data/test/{messages → fixtures}/missing-line.eml +0 -0
- data/test/fixtures/multi-part-2.eml +72 -0
- data/test/fixtures/multi-part.eml +61 -0
- data/test/fixtures/no-body.eml +18 -0
- data/test/fixtures/simple-message.eml +29 -0
- data/test/gnupg_test_home/key_ecc.gen +13 -0
- data/test/gnupg_test_home/pubring.gpg +0 -0
- data/test/gnupg_test_home/regen_keys.sh +3 -0
- data/test/test_crypto.rb +11 -1
- data/test/test_helper.rb +6 -3
- data/test/test_message.rb +25 -383
- data/test/test_messages_dir.rb +3 -9
- data/test/unit/test_contact.rb +1 -1
- metadata +41 -15
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3d3899a57ac9c9c12a9169f7b7f6d0bbef7e6d9e
|
4
|
+
data.tar.gz: 0768bfb04caf6681aef3b16ac81b546d29a1ccd7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9affb8ec99b6873ba9ee5f17dfdc2c834d08a886bde0b71b9b7f06d5c1b9538c74d089712fdaa05e1c973ddf8d70aa3b5f80f69e2df4f31d8918c475d9cee9d6
|
7
|
+
data.tar.gz: b6d73929c911365ee14ce8948c2bbba478985d0b706375351c8f14e7aec72ecd285d35beca63fce9cb2d46fb70882c950c6960319d8632eb1f31aeed9ab0279f
|
data/CONTRIBUTORS
CHANGED
@@ -3,16 +3,16 @@ Rich Lane <rlane at the club.cc.cmu dot edus>
|
|
3
3
|
Gaute Hope <eg at the gaute.vetsj dot coms>
|
4
4
|
Whyme Lyu <callme5long at the gmail dot coms>
|
5
5
|
Hamish Downer <dmishd at the gmail dot coms>
|
6
|
+
Zeger-Jan van de Weg <mail at the zjvandeweg dot nls>
|
6
7
|
Damien Leone <damien.leone at the fensalir dot frs>
|
7
8
|
Sascha Silbe <sascha-pgp at the silbe dot orgs>
|
8
9
|
Eric Weikl <eric.weikl at the gmx dot nets>
|
9
10
|
Paweł Wilk <siefca at the gnu dot orgs>
|
10
11
|
Ismo Puustinen <ismo at the iki dot fis>
|
11
|
-
Nicolas Pouillard <nicolas.pouillard at the gmail dot coms>
|
12
12
|
Matthieu Rakotojaona <matthieu.rakotojaona at the gmail dot coms>
|
13
|
+
Nicolas Pouillard <nicolas.pouillard at the gmail dot coms>
|
13
14
|
Michael Stapelberg <michael at the stapelberg dot des>
|
14
15
|
Eric Sherman <hyperbolist at the gmail dot coms>
|
15
|
-
Zeger-Jan van de Weg <mail at the zjvandeweg dot nls>
|
16
16
|
Tero Tilus <tero at the tilus dot nets>
|
17
17
|
Ben Walton <bwalton at the artsci.utoronto dot cas>
|
18
18
|
Scott Bonds <scott at the ggr dot coms>
|
@@ -25,8 +25,8 @@ Marcus Williams <marcus-sup at the bar-coded dot nets>
|
|
25
25
|
Lionel Ott <white.magic at the gmx dot des>
|
26
26
|
Gaudenz Steinlin <gaudenz at the soziologie dot chs>
|
27
27
|
Per Andersson <avtobiff at the gmail dot coms>
|
28
|
-
Ingmar Vanhassel <ingmar at the exherbo dot orgs>
|
29
28
|
Mark Alexander <marka at the pobox dot coms>
|
29
|
+
Ingmar Vanhassel <ingmar at the exherbo dot orgs>
|
30
30
|
Edward Z. Yang <ezyang at the mit dot edus>
|
31
31
|
julien@macbook <julien.stechele at the gmail dot coms>
|
32
32
|
Christopher Warrington <chrisw at the rice dot edus>
|
@@ -40,24 +40,24 @@ Markus Klinik <mkl at the lambdanaut dot nets>
|
|
40
40
|
Bo Borgerson <gigabo at the gmail dot coms>
|
41
41
|
Atte Kojo <atte.kojo at the reaktor dot fis>
|
42
42
|
Michael Hamann <michael at the content-space dot des>
|
43
|
-
William Erik Baxter <web at the superscript dot coms>
|
44
43
|
Jonathan Lassoff <jof at the thejof dot coms>
|
44
|
+
William Erik Baxter <web at the superscript dot coms>
|
45
45
|
Grant Hollingworth <grant at the antiflux dot orgs>
|
46
46
|
Ico Doornekamp <ico at the pruts dot nls>
|
47
47
|
Adeodato Simó <dato at the net.com.org dot ess>
|
48
48
|
Daniel Schoepe <daniel.schoepe at the googlemail dot coms>
|
49
|
-
Jason Petsod <jason at the petsod dot orgs>
|
50
49
|
James Taylor <james at the jamestaylor dot orgs>
|
51
|
-
|
50
|
+
Jason Petsod <jason at the petsod dot orgs>
|
52
51
|
Robin Burchell <viroteck at the viroteck dot nets>
|
52
|
+
Steve Goldman <sgoldman at the tower-research dot coms>
|
53
53
|
Peter Harkins <ph at the malaprop dot orgs>
|
54
|
-
Decklin Foster <decklin at the red-bean dot coms>
|
55
54
|
rjg-vB <rthrd at the web dot des>
|
55
|
+
Decklin Foster <decklin at the red-bean dot coms>
|
56
56
|
Cameron Matheson <cam+sup at the cammunism dot orgs>
|
57
|
-
Alex Vandiver <alex at the chmrr dot nets>
|
58
57
|
Carl Worth <cworth at the cworth dot orgs>
|
59
|
-
|
58
|
+
Alex Vandiver <alex at the chmrr dot nets>
|
60
59
|
Andrew Pimlott <andrew at the pimlott dot nets>
|
60
|
+
Jeff Balogh <its.jeff.balogh at the gmail dot coms>
|
61
61
|
Matías Aguirre <matiasaguirre at the gmail dot coms>
|
62
62
|
PaulSmecker <paul.smecker at the gmail dot coms>
|
63
63
|
Ruthard Baudach <rthrd at the web dot des>
|
@@ -67,23 +67,24 @@ madhat2r <MaDhAt2r at the dukefoo dot coms>
|
|
67
67
|
Kevin Riggle <kevinr at the free-dissociation dot coms>
|
68
68
|
Giorgio Lando <patroclo7 at the gmail dot coms>
|
69
69
|
Benoît PIERRE <benoit.pierre at the gmail dot coms>
|
70
|
-
Alvaro Herrera <alvherre at the alvh.no-ip dot orgs>
|
71
70
|
Steven Lawrance <stl at the koffein dot nets>
|
71
|
+
Alvaro Herrera <alvherre at the alvh.no-ip dot orgs>
|
72
72
|
Jonah <Jonah at the GoodCoffee dot cas>
|
73
73
|
ian <itaylor at the uark dot edus>
|
74
|
-
|
75
|
-
MichaelRevell <mikearevell at the gmail dot coms>
|
76
|
-
Adam Lloyd <adam at the alloy-d dot nets>
|
74
|
+
Elias Norberg <xyzzy at the kudzu dot ses>
|
77
75
|
0xACE <0xACE at the users.noreply.github dot coms>
|
76
|
+
MichaelRevell <mikearevell at the gmail dot coms>
|
78
77
|
Gregor Hoffleit <gregor at the sam.mediasupervision dot des>
|
78
|
+
Adam Lloyd <adam at the alloy-d dot nets>
|
79
|
+
Todd Eisenberger <teisenbe at the andrew.cmu dot edus>
|
80
|
+
Johannes Larsen <mail at the johslarsen dot nets>
|
79
81
|
Sharif Olorin <sio at the tesser dot orgs>
|
80
|
-
Steven Walter <swalter at the monarch.(none)>
|
81
82
|
Steven Schmeiser <steven at the schmeiser dot orgs>
|
82
|
-
|
83
|
+
Steven Walter <swalter at the monarch.(none)>
|
83
84
|
William A. Kennington III <william at the wkennington dot coms>
|
84
85
|
akojo <atte.kojo at the gmail dot coms>
|
85
86
|
Horacio Sanson <horacio at the skillupjapan.co dot jps>
|
86
|
-
Jon M. Dugan <jdugan at the es dot nets>
|
87
87
|
Matthias Vallentin <vallentin at the icir dot orgs>
|
88
|
-
|
88
|
+
Jon M. Dugan <jdugan at the es dot nets>
|
89
|
+
Stefan Lundström <lundst at the snabb.(none)>
|
89
90
|
Kirill Smelkov <kirr at the landau.phys.spbu dot rus>
|
data/History.txt
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
== 0.22.0 / 2015-06-16
|
2
|
+
|
3
|
+
* Use mime-types 2
|
4
|
+
* Fix ruby style (Zeger-Jan van de Weg)
|
5
|
+
* Johannes Larsen: fix long-standing bug with draft-id mixups causing
|
6
|
+
drafts to disappear.
|
7
|
+
* Various bugs and minor improvements.
|
8
|
+
|
1
9
|
== 0.21.0 / 2015-02-12
|
2
10
|
|
3
11
|
* Key binding to fetch GPG key from keyserver (Matthieu Rakotojaona)
|
data/Rakefile
CHANGED
data/bin/sup
CHANGED
data/bin/sup-add
CHANGED
@@ -3,7 +3,6 @@
|
|
3
3
|
$:.unshift File.join(File.dirname(__FILE__), *%w[.. lib])
|
4
4
|
|
5
5
|
require 'uri'
|
6
|
-
require 'rubygems'
|
7
6
|
require 'highline/import'
|
8
7
|
require 'trollop'
|
9
8
|
require "sup"
|
@@ -95,7 +94,7 @@ begin
|
|
95
94
|
next
|
96
95
|
end
|
97
96
|
|
98
|
-
parsed_uri = URI(uri)
|
97
|
+
parsed_uri = URI(URI.escape(uri))
|
99
98
|
|
100
99
|
source =
|
101
100
|
case parsed_uri.scheme
|
data/bin/sup-config
CHANGED
data/bin/sup-dump
CHANGED
data/bin/sup-import-dump
CHANGED
@@ -3,7 +3,6 @@
|
|
3
3
|
$:.unshift File.join(File.dirname(__FILE__), *%w[.. lib])
|
4
4
|
|
5
5
|
require 'uri'
|
6
|
-
require 'rubygems'
|
7
6
|
require 'trollop'
|
8
7
|
require "sup"
|
9
8
|
|
@@ -82,7 +81,7 @@ begin
|
|
82
81
|
next if opts[:dry_run]
|
83
82
|
|
84
83
|
m.labels = new_labels
|
85
|
-
index.update_message_state m
|
84
|
+
index.update_message_state [m, false]
|
86
85
|
end
|
87
86
|
|
88
87
|
index.commit_transaction if opts[:atomic]
|
data/bin/sup-sync
CHANGED
data/bin/sup-sync-back-maildir
CHANGED
data/bin/sup-tweak-labels
CHANGED
@@ -2,7 +2,6 @@
|
|
2
2
|
|
3
3
|
$:.unshift File.join(File.dirname(__FILE__), *%w[.. lib])
|
4
4
|
|
5
|
-
require 'rubygems'
|
6
5
|
require 'trollop'
|
7
6
|
require "sup"
|
8
7
|
|
@@ -83,7 +82,7 @@ begin
|
|
83
82
|
## query to only messages with those labels
|
84
83
|
query += " (" + remove_labels.map { |l| "label:#{l}" }.join(" OR ") + ")"
|
85
84
|
end
|
86
|
-
query += ' ' + opts[:query] if opts[:query]
|
85
|
+
query += ' AND ' + opts[:query] if opts[:query]
|
87
86
|
|
88
87
|
parsed_query = index.parse_query query
|
89
88
|
parsed_query.merge! :load_spam => true, :load_deleted => true, :load_killed => true
|
data/contrib/colorpicker.rb
CHANGED
data/devel/profile.rb
CHANGED
data/ext/mkrf_conf_xapian.rb
CHANGED
data/lib/sup.rb
CHANGED
data/lib/sup/crypto.rb
CHANGED
@@ -10,11 +10,11 @@ class CryptoManager
|
|
10
10
|
|
11
11
|
class Error < StandardError; end
|
12
12
|
|
13
|
-
OUTGOING_MESSAGE_OPERATIONS =
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
13
|
+
OUTGOING_MESSAGE_OPERATIONS = {
|
14
|
+
sign: "Sign",
|
15
|
+
sign_and_encrypt: "Sign and encrypt",
|
16
|
+
encrypt: "Encrypt only"
|
17
|
+
}
|
18
18
|
|
19
19
|
KEY_PATTERN = /(-----BEGIN PGP PUBLIC KEY BLOCK.*-----END PGP PUBLIC KEY BLOCK)/m
|
20
20
|
KEYSERVER_URL = "http://pool.sks-keyservers.net:11371/pks/lookup"
|
@@ -467,6 +467,7 @@ private
|
|
467
467
|
when GPGME::PK_DSA then "DSA "
|
468
468
|
when GPGME::PK_ELG then "ElGamel "
|
469
469
|
when GPGME::PK_ELG_E then "ElGamel "
|
470
|
+
else "unknown key type (#{subkey.pubkey_algo}) "
|
470
471
|
end
|
471
472
|
end
|
472
473
|
|
@@ -475,7 +476,7 @@ private
|
|
475
476
|
# elsif only one account, then leave blank so gpg default will be user
|
476
477
|
# else set --local-user from_email_address
|
477
478
|
# NOTE: multiple signers doesn't seem to work with gpgme (2.0.2, 1.0.8)
|
478
|
-
#
|
479
|
+
#
|
479
480
|
def gen_sign_user_opts from
|
480
481
|
account = AccountManager.account_for from
|
481
482
|
account ||= AccountManager.default_account
|
data/lib/sup/draft.rb
CHANGED
data/lib/sup/mode.rb
CHANGED
@@ -46,7 +46,7 @@ class Mode
|
|
46
46
|
end
|
47
47
|
|
48
48
|
def resolve_input c
|
49
|
-
ancestors.each do |klass| # try all keymaps in order of ancestry
|
49
|
+
self.class.ancestors.each do |klass| # try all keymaps in order of ancestry
|
50
50
|
next unless @@keymaps.member?(klass)
|
51
51
|
action = BufferManager.resolve_input_with_keymap c, @@keymaps[klass]
|
52
52
|
return action if action
|
@@ -62,7 +62,7 @@ class Mode
|
|
62
62
|
|
63
63
|
def help_text
|
64
64
|
used_keys = {}
|
65
|
-
ancestors.map do |klass|
|
65
|
+
self.class.ancestors.map do |klass|
|
66
66
|
km = @@keymaps[klass] or next
|
67
67
|
title = "Keybindings from #{Mode.make_name klass.name}"
|
68
68
|
s = <<EOS
|
@@ -1026,7 +1026,11 @@ private
|
|
1026
1026
|
end
|
1027
1027
|
|
1028
1028
|
def from_width
|
1029
|
-
|
1029
|
+
if buffer
|
1030
|
+
[(buffer.content_width.to_f * 0.2).to_i, MIN_FROM_WIDTH].max
|
1031
|
+
else
|
1032
|
+
MIN_FROM_WIDTH # not sure why the buffer is gone
|
1033
|
+
end
|
1030
1034
|
end
|
1031
1035
|
|
1032
1036
|
def initialize_threads
|
@@ -940,9 +940,10 @@ private
|
|
940
940
|
addressee_lines += format_person_list " Bcc: ", m.bcc
|
941
941
|
end
|
942
942
|
|
943
|
-
headers =
|
944
|
-
|
945
|
-
|
943
|
+
headers = {
|
944
|
+
"Date" => "#{m.date.to_message_nice_s} (#{m.date.to_nice_distance_s})",
|
945
|
+
"Subject" => m.subj
|
946
|
+
}
|
946
947
|
|
947
948
|
show_labels = @thread.labels - LabelManager::HIDDEN_RESERVED_LABELS
|
948
949
|
unless show_labels.empty?
|
data/lib/sup/util.rb
CHANGED
@@ -10,15 +10,6 @@ require 'benchmark'
|
|
10
10
|
require 'unicode'
|
11
11
|
require 'fileutils'
|
12
12
|
|
13
|
-
## time for some monkeypatching!
|
14
|
-
class Symbol
|
15
|
-
unless method_defined? :to_proc
|
16
|
-
def to_proc
|
17
|
-
proc { |obj, *args| obj.send(self, *args) }
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
13
|
class Lockfile
|
23
14
|
def gen_lock_id
|
24
15
|
Hash[
|
@@ -89,7 +80,7 @@ module RMail
|
|
89
80
|
end
|
90
81
|
|
91
82
|
def charset
|
92
|
-
if header.field?("content-type") && header.fetch("content-type") =~ /charset
|
83
|
+
if header.field?("content-type") && header.fetch("content-type") =~ /charset\s*=\s*"?(.*?)"?(;|$)/i
|
93
84
|
$1
|
94
85
|
end
|
95
86
|
end
|
@@ -170,13 +161,6 @@ module RMail
|
|
170
161
|
end
|
171
162
|
end
|
172
163
|
|
173
|
-
class Range
|
174
|
-
## only valid for integer ranges (unless I guess it's exclusive)
|
175
|
-
def size
|
176
|
-
last - first + (exclude_end? ? 0 : 1)
|
177
|
-
end
|
178
|
-
end
|
179
|
-
|
180
164
|
class Module
|
181
165
|
def bool_reader *args
|
182
166
|
args.each { |sym| class_eval %{ def #{sym}?; @#{sym}; end } }
|
@@ -198,17 +182,6 @@ class Module
|
|
198
182
|
end
|
199
183
|
|
200
184
|
class Object
|
201
|
-
def ancestors
|
202
|
-
ret = []
|
203
|
-
klass = self.class
|
204
|
-
|
205
|
-
until klass == Object
|
206
|
-
ret << klass
|
207
|
-
klass = klass.superclass
|
208
|
-
end
|
209
|
-
ret
|
210
|
-
end
|
211
|
-
|
212
185
|
## "k combinator"
|
213
186
|
def returning x; yield x; x; end
|
214
187
|
|
@@ -382,8 +355,6 @@ class String
|
|
382
355
|
|
383
356
|
# Fix the damn string! make sure it is valid utf-8, then convert to
|
384
357
|
# user encoding.
|
385
|
-
#
|
386
|
-
# Not Ruby 1.8 compatible
|
387
358
|
def fix_encoding!
|
388
359
|
# first try to encode to utf-8 from whatever current encoding
|
389
360
|
encode!('UTF-8', :invalid => :replace, :undef => :replace)
|
@@ -406,8 +377,6 @@ class String
|
|
406
377
|
|
407
378
|
# transcode the string if original encoding is know
|
408
379
|
# fix if broken.
|
409
|
-
#
|
410
|
-
# Not Ruby 1.8 compatible
|
411
380
|
def transcode to_encoding, from_encoding
|
412
381
|
begin
|
413
382
|
encode!(to_encoding, from_encoding, :invalid => :replace, :undef => :replace)
|
@@ -474,13 +443,6 @@ class String
|
|
474
443
|
out = out.fix_encoding! # this should now be an utf-8 string of ascii
|
475
444
|
# compat chars.
|
476
445
|
end
|
477
|
-
|
478
|
-
unless method_defined? :ascii_only?
|
479
|
-
def ascii_only?
|
480
|
-
size.times { |i| return false if self[i] & 128 != 0 }
|
481
|
-
return true
|
482
|
-
end
|
483
|
-
end
|
484
446
|
end
|
485
447
|
|
486
448
|
class Numeric
|
@@ -518,12 +480,6 @@ class Fixnum
|
|
518
480
|
end
|
519
481
|
end
|
520
482
|
|
521
|
-
unless method_defined?(:ord)
|
522
|
-
def ord
|
523
|
-
self
|
524
|
-
end
|
525
|
-
end
|
526
|
-
|
527
483
|
## hacking the english language
|
528
484
|
def pluralize s
|
529
485
|
to_s + " " +
|
@@ -607,10 +563,6 @@ module Enumerable
|
|
607
563
|
end
|
608
564
|
end
|
609
565
|
|
610
|
-
unless Object.const_defined? :Enumerator
|
611
|
-
Enumerator = Enumerable::Enumerator
|
612
|
-
end
|
613
|
-
|
614
566
|
class Array
|
615
567
|
def flatten_one_level
|
616
568
|
inject([]) { |a, e| a + e }
|
@@ -706,32 +658,6 @@ class SavingHash
|
|
706
658
|
defer_all_other_method_calls_to :hash
|
707
659
|
end
|
708
660
|
|
709
|
-
class OrderedHash < Hash
|
710
|
-
alias_method :store, :[]=
|
711
|
-
alias_method :each_pair, :each
|
712
|
-
attr_reader :keys
|
713
|
-
|
714
|
-
def initialize *a
|
715
|
-
@keys = []
|
716
|
-
a.each { |k, v| self[k] = v }
|
717
|
-
end
|
718
|
-
|
719
|
-
def []= key, val
|
720
|
-
@keys << key unless member?(key)
|
721
|
-
super
|
722
|
-
end
|
723
|
-
|
724
|
-
def values; keys.map { |k| self[k] } end
|
725
|
-
def index key; @keys.index key end
|
726
|
-
|
727
|
-
def delete key
|
728
|
-
@keys.delete key
|
729
|
-
super
|
730
|
-
end
|
731
|
-
|
732
|
-
def each; @keys.each { |k| yield k, self[k] } end
|
733
|
-
end
|
734
|
-
|
735
661
|
## easy thread-safe class for determining who's the "winner" in a race (i.e.
|
736
662
|
## first person to hit the finish line
|
737
663
|
class FinishLine
|