sup 1.0 → 1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/checks.yml +70 -0
- data/.rubocop.yml +5 -0
- data/CONTRIBUTORS +3 -2
- data/Gemfile +5 -1
- data/History.txt +20 -0
- data/Manifest.txt +149 -0
- data/README.md +9 -3
- data/Rakefile +40 -1
- data/bin/sup-add +4 -8
- data/ext/mkrf_conf_xapian.rb +10 -4
- data/lib/sup/colormap.rb +1 -1
- data/lib/sup/hook.rb +1 -1
- data/lib/sup/index.rb +2 -2
- data/lib/sup/keymap.rb +1 -1
- data/lib/sup/maildir.rb +4 -4
- data/lib/sup/mbox.rb +4 -4
- data/lib/sup/message.rb +6 -5
- data/lib/sup/message_chunks.rb +27 -19
- data/lib/sup/modes/completion_mode.rb +0 -1
- data/lib/sup/modes/file_browser_mode.rb +2 -2
- data/lib/sup/modes/label_list_mode.rb +1 -1
- data/lib/sup/modes/search_list_mode.rb +2 -2
- data/lib/sup/modes/thread_view_mode.rb +1 -2
- data/lib/sup/rfc2047.rb +21 -6
- data/lib/sup/source.rb +8 -2
- data/lib/sup/textfield.rb +0 -1
- data/lib/sup/thread.rb +0 -1
- data/lib/sup/util.rb +28 -48
- data/lib/sup/version.rb +1 -1
- data/lib/sup.rb +12 -8
- data/man/sup-add.1 +15 -15
- data/man/sup-config.1 +11 -11
- data/man/sup-dump.1 +9 -9
- data/man/sup-import-dump.1 +15 -15
- data/man/sup-psych-ify-config-files.1 +9 -9
- data/man/sup-recover-sources.1 +12 -12
- data/man/sup-sync-back-maildir.1 +14 -14
- data/man/sup-sync.1 +20 -20
- data/man/sup-tweak-labels.1 +16 -16
- data/man/sup.1 +21 -21
- data/sup.gemspec +6 -4
- data/test/dummy_source.rb +21 -15
- data/test/fixtures/embedded-message.eml +34 -0
- data/test/fixtures/non-ascii-header-in-nested-message.eml +36 -0
- data/test/fixtures/non-ascii-header.eml +8 -0
- data/test/fixtures/rfc2047-header-encoding.eml +15 -0
- data/test/fixtures/text-attachments-with-charset.eml +15 -1
- data/test/fixtures/utf8-header.eml +17 -0
- data/test/integration/test_mbox.rb +1 -1
- data/test/integration/test_sup-add.rb +83 -0
- data/test/test_crypto.rb +44 -0
- data/test/test_header_parsing.rb +9 -1
- data/test/test_helper.rb +7 -4
- data/test/test_message.rb +124 -32
- data/test/test_messages_dir.rb +13 -15
- data/test/unit/test_horizontal_selector.rb +4 -4
- data/test/unit/test_locale_fiddler.rb +1 -1
- data/test/unit/util/test_query.rb +1 -1
- data/test/unit/util/test_string.rb +3 -3
- data/test/unit/util/test_uri.rb +2 -2
- metadata +46 -18
- data/.travis.yml +0 -18
- data/bin/sup-psych-ify-config-files +0 -21
- data/test/integration/test_label_service.rb +0 -18
- data/test/test_yaml_migration.rb +0 -85
@@ -43,7 +43,7 @@ protected
|
|
43
43
|
end
|
44
44
|
|
45
45
|
def view
|
46
|
-
|
46
|
+
_name, f = @files[curpos - RESERVED_ROWS]
|
47
47
|
return unless f && f.file?
|
48
48
|
|
49
49
|
begin
|
@@ -54,7 +54,7 @@ protected
|
|
54
54
|
end
|
55
55
|
|
56
56
|
def select_file_or_follow_directory
|
57
|
-
|
57
|
+
_name, f = @files[curpos - RESERVED_ROWS]
|
58
58
|
return unless f
|
59
59
|
|
60
60
|
if f.directory? && f.to_s != "."
|
@@ -131,13 +131,13 @@ protected
|
|
131
131
|
end
|
132
132
|
|
133
133
|
def select_search
|
134
|
-
name,
|
134
|
+
name, _num_unread = @searches[curpos]
|
135
135
|
return unless name
|
136
136
|
SearchResultsMode.spawn_from_query SearchManager.search_string_for(name)
|
137
137
|
end
|
138
138
|
|
139
139
|
def delete_selected_search
|
140
|
-
name,
|
140
|
+
name, _num_unread = @searches[curpos]
|
141
141
|
return unless name
|
142
142
|
reload if SearchManager.delete name
|
143
143
|
end
|
@@ -241,7 +241,7 @@ EOS
|
|
241
241
|
|
242
242
|
begin
|
243
243
|
u = URI.parse($1)
|
244
|
-
rescue URI::InvalidURIError
|
244
|
+
rescue URI::InvalidURIError
|
245
245
|
BufferManager.flash("Invalid unsubscribe link")
|
246
246
|
return
|
247
247
|
end
|
@@ -868,7 +868,6 @@ private
|
|
868
868
|
(0 ... text.length).each do |i|
|
869
869
|
@chunk_lines[@text.length + i] = m
|
870
870
|
@message_lines[@text.length + i] = m
|
871
|
-
lw = text[i].flatten.select { |x| x.is_a? String }.map { |x| x.display_length }.sum
|
872
871
|
end
|
873
872
|
|
874
873
|
@text += text
|
data/lib/sup/rfc2047.rb
CHANGED
@@ -17,7 +17,7 @@
|
|
17
17
|
# This file is distributed under the same terms as Ruby.
|
18
18
|
|
19
19
|
module Rfc2047
|
20
|
-
WORD = %r{=\?([!\#$%&'*+-/0-9A-Z\\^\`a-z{|}~]+)\?([BbQq])\?([!->@-~]+)\?=} # :nodoc: 'stupid ruby-mode
|
20
|
+
WORD = %r{=\?([!\#$%&'*+-/0-9A-Z\\^\`a-z{|}~]+)\?([BbQq])\?([!->@-~ ]+)\?=} # :nodoc: 'stupid ruby-mode
|
21
21
|
WORDSEQ = %r{(#{WORD.source})\s+(?=#{WORD.source})}
|
22
22
|
|
23
23
|
def Rfc2047.is_encoded? s; s =~ WORD end
|
@@ -28,16 +28,17 @@ module Rfc2047
|
|
28
28
|
# converted to the target encoding, it is left in its encoded form.
|
29
29
|
def Rfc2047.decode_to(target, from)
|
30
30
|
from = from.gsub(WORDSEQ, '\1')
|
31
|
-
|
31
|
+
from.gsub(WORD) do
|
32
32
|
|word|
|
33
33
|
charset, encoding, text = $1, $2, $3
|
34
34
|
|
35
35
|
# B64 or QP decode, as necessary:
|
36
36
|
case encoding
|
37
37
|
when 'b', 'B'
|
38
|
-
|
39
|
-
|
40
|
-
|
38
|
+
## Padding is optional in RFC 2047 words. Add some extra padding
|
39
|
+
## before decoding the base64, otherwise on Ruby 2.0 the final byte
|
40
|
+
## might be discarded.
|
41
|
+
text = (text + '===').unpack('m*')[0]
|
41
42
|
|
42
43
|
when 'q', 'Q'
|
43
44
|
# RFC 2047 has a variant of quoted printable where a ' ' character
|
@@ -50,7 +51,21 @@ module Rfc2047
|
|
50
51
|
# WORD.
|
51
52
|
end
|
52
53
|
|
53
|
-
|
54
|
+
# Handle UTF-7 specially because Ruby doesn't actually support it as
|
55
|
+
# a normal character encoding.
|
56
|
+
if charset == 'UTF-7'
|
57
|
+
begin
|
58
|
+
next text.decode_utf7.encode(target)
|
59
|
+
rescue ArgumentError, EncodingError
|
60
|
+
next word
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
begin
|
65
|
+
text.force_encoding(charset).encode(target)
|
66
|
+
rescue ArgumentError, EncodingError
|
67
|
+
word
|
68
|
+
end
|
54
69
|
end
|
55
70
|
end
|
56
71
|
end
|
data/lib/sup/source.rb
CHANGED
@@ -102,7 +102,7 @@ class Source
|
|
102
102
|
end
|
103
103
|
|
104
104
|
def synchronize &block
|
105
|
-
@poll_lock.synchronize
|
105
|
+
@poll_lock.synchronize(&block)
|
106
106
|
end
|
107
107
|
|
108
108
|
def try_lock
|
@@ -153,7 +153,7 @@ class Source
|
|
153
153
|
next unless Rfc2047.is_encoded? v
|
154
154
|
header[k] = begin
|
155
155
|
Rfc2047.decode_to $encoding, v
|
156
|
-
rescue Errno::EINVAL, Iconv::InvalidEncoding, Iconv::IllegalSequence
|
156
|
+
rescue Errno::EINVAL, Iconv::InvalidEncoding, Iconv::IllegalSequence
|
157
157
|
#debug "warning: error decoding RFC 2047 header (#{e.class.name}): #{e.message}"
|
158
158
|
v
|
159
159
|
end
|
@@ -169,6 +169,12 @@ protected
|
|
169
169
|
def Source.expand_filesystem_uri uri
|
170
170
|
uri.gsub "~", File.expand_path("~")
|
171
171
|
end
|
172
|
+
|
173
|
+
def Source.encode_path_for_uri path
|
174
|
+
path.gsub(Regexp.new("[#{Regexp.quote(URI_ENCODE_CHARS)}]")) { |c|
|
175
|
+
c.each_byte.map { |x| sprintf("%%%02X", x) }.join
|
176
|
+
}
|
177
|
+
end
|
172
178
|
end
|
173
179
|
|
174
180
|
## if you have a @labels instance variable, include this
|
data/lib/sup/textfield.rb
CHANGED
@@ -119,7 +119,6 @@ class TextField
|
|
119
119
|
Ncurses::Form::REQ_END_FIELD
|
120
120
|
when Ncurses::KEY_UP, Ncurses::KEY_DOWN
|
121
121
|
unless !@i || @history.empty?
|
122
|
-
value = get_cursed_value
|
123
122
|
#debug "history before #{@history.inspect}"
|
124
123
|
@i = @i + (c.is_keycode?(Ncurses::KEY_UP) ? -1 : 1)
|
125
124
|
@i = 0 if @i < 0
|
data/lib/sup/thread.rb
CHANGED
data/lib/sup/util.rb
CHANGED
@@ -4,6 +4,7 @@ require 'thread'
|
|
4
4
|
require 'lockfile'
|
5
5
|
require 'mime/types'
|
6
6
|
require 'pathname'
|
7
|
+
require 'rmail'
|
7
8
|
require 'set'
|
8
9
|
require 'enumerator'
|
9
10
|
require 'benchmark'
|
@@ -11,7 +12,7 @@ require 'unicode'
|
|
11
12
|
require 'unicode/display_width'
|
12
13
|
require 'fileutils'
|
13
14
|
|
14
|
-
|
15
|
+
module ExtendedLockfile
|
15
16
|
def gen_lock_id
|
16
17
|
Hash[
|
17
18
|
'host' => "#{ Socket.gethostname }",
|
@@ -37,6 +38,7 @@ class Lockfile
|
|
37
38
|
|
38
39
|
def touch_yourself; touch path end
|
39
40
|
end
|
41
|
+
Lockfile.send :prepend, ExtendedLockfile
|
40
42
|
|
41
43
|
class File
|
42
44
|
# platform safe file.link which attempts a copy if hard-linking fails
|
@@ -106,7 +108,7 @@ module RMail
|
|
106
108
|
end
|
107
109
|
end
|
108
110
|
|
109
|
-
|
111
|
+
module CustomizedSerialize
|
110
112
|
## Don't add MIME-Version headers on serialization. Sup sometimes want's to serialize
|
111
113
|
## message parts where these headers are not needed and messing with the message on
|
112
114
|
## serialization breaks gpg signatures. The commented section shows the original RMail
|
@@ -118,48 +120,7 @@ module RMail
|
|
118
120
|
# end
|
119
121
|
end
|
120
122
|
end
|
121
|
-
|
122
|
-
class Header
|
123
|
-
|
124
|
-
# Convert to ASCII before trying to match with regexp
|
125
|
-
class Field
|
126
|
-
|
127
|
-
class << self
|
128
|
-
def parse(field)
|
129
|
-
field = field.dup.to_s
|
130
|
-
field = field.fix_encoding!.ascii
|
131
|
-
if field =~ EXTRACT_FIELD_NAME_RE
|
132
|
-
[ $1, $'.chomp ]
|
133
|
-
else
|
134
|
-
[ "", Field.value_strip(field) ]
|
135
|
-
end
|
136
|
-
end
|
137
|
-
end
|
138
|
-
end
|
139
|
-
|
140
|
-
## Be more cautious about invalid content-type headers
|
141
|
-
## the original RMail code calls
|
142
|
-
## value.strip.split(/\s*;\s*/)[0].downcase
|
143
|
-
## without checking if split returned an element
|
144
|
-
|
145
|
-
# This returns the full content type of this message converted to
|
146
|
-
# lower case.
|
147
|
-
#
|
148
|
-
# If there is no content type header, returns the passed block is
|
149
|
-
# executed and its return value is returned. If no block is passed,
|
150
|
-
# the value of the +default+ argument is returned.
|
151
|
-
def content_type(default = nil)
|
152
|
-
if value = self['content-type'] and ct = value.strip.split(/\s*;\s*/)[0]
|
153
|
-
return ct.downcase
|
154
|
-
else
|
155
|
-
if block_given?
|
156
|
-
yield
|
157
|
-
else
|
158
|
-
default
|
159
|
-
end
|
160
|
-
end
|
161
|
-
end
|
162
|
-
end
|
123
|
+
Serialize.send :prepend, CustomizedSerialize
|
163
124
|
end
|
164
125
|
|
165
126
|
class Module
|
@@ -392,8 +353,23 @@ class String
|
|
392
353
|
self
|
393
354
|
end
|
394
355
|
|
356
|
+
## Decodes UTF-7 and returns the resulting decoded string as UTF-8.
|
357
|
+
##
|
358
|
+
## Ruby doesn't supply a UTF-7 encoding natively. There is
|
359
|
+
## Net::IMAP::decode_utf7 which only handles the IMAP "modified UTF-7"
|
360
|
+
## encoding. This implementation is inspired by that one but handles
|
361
|
+
## standard UTF-7 shift characters and not the IMAP-specific variation.
|
362
|
+
def decode_utf7
|
363
|
+
gsub(/\+([^-]+)?-/) {
|
364
|
+
if $1
|
365
|
+
($1 + "===").unpack("m")[0].encode(Encoding::UTF_8, Encoding::UTF_16BE)
|
366
|
+
else
|
367
|
+
"+"
|
368
|
+
end
|
369
|
+
}
|
370
|
+
end
|
371
|
+
|
395
372
|
def normalize_whitespace
|
396
|
-
fix_encoding!
|
397
373
|
gsub(/\t/, " ").gsub(/\r/, "")
|
398
374
|
end
|
399
375
|
|
@@ -405,7 +381,7 @@ class String
|
|
405
381
|
|
406
382
|
unless method_defined? :each
|
407
383
|
def each &b
|
408
|
-
each_line
|
384
|
+
each_line(&b)
|
409
385
|
end
|
410
386
|
end
|
411
387
|
|
@@ -507,7 +483,9 @@ module Enumerable
|
|
507
483
|
ret
|
508
484
|
end
|
509
485
|
|
510
|
-
|
486
|
+
if not method_defined? :sum
|
487
|
+
def sum; inject(0) { |x, y| x + y }; end
|
488
|
+
end
|
511
489
|
|
512
490
|
def map_to_hash
|
513
491
|
ret = {}
|
@@ -563,7 +541,9 @@ class Array
|
|
563
541
|
inject([]) { |a, e| a + e }
|
564
542
|
end
|
565
543
|
|
566
|
-
|
544
|
+
if not method_defined? :to_h
|
545
|
+
def to_h; Hash[*flatten_one_level]; end
|
546
|
+
end
|
567
547
|
def rest; self[1..-1]; end
|
568
548
|
|
569
549
|
def to_boolean_h; Hash[*map { |x| [x, true] }.flatten]; end
|
data/lib/sup/version.rb
CHANGED
data/lib/sup.rb
CHANGED
@@ -26,7 +26,7 @@ class Module
|
|
26
26
|
props = props.map { |p| p.to_s }
|
27
27
|
|
28
28
|
path = name.gsub(/::/, "/")
|
29
|
-
yaml_tag "
|
29
|
+
yaml_tag "tag:#{Redwood::YAML_DOMAIN},#{Redwood::YAML_DATE}/#{path}"
|
30
30
|
|
31
31
|
define_method :init_with do |coder|
|
32
32
|
initialize(*coder.map.values_at(*props))
|
@@ -38,9 +38,6 @@ class Module
|
|
38
38
|
hash
|
39
39
|
end
|
40
40
|
end
|
41
|
-
|
42
|
-
# Legacy
|
43
|
-
Psych.load_tags["!#{Redwood::LEGACY_YAML_DOMAIN},#{Redwood::YAML_DATE}/#{path}"] = self
|
44
41
|
end
|
45
42
|
end
|
46
43
|
|
@@ -139,10 +136,17 @@ module Redwood
|
|
139
136
|
|
140
137
|
def load_yaml_obj fn, compress=false
|
141
138
|
o = if File.exist? fn
|
142
|
-
if compress
|
143
|
-
Zlib::GzipReader.open(fn) { |f|
|
139
|
+
raw_contents = if compress
|
140
|
+
Zlib::GzipReader.open(fn) { |f| f.read }
|
141
|
+
else
|
142
|
+
File::open(fn) { |f| f.read }
|
143
|
+
end
|
144
|
+
## fix up malformed tag URIs created by earlier versions of sup
|
145
|
+
raw_contents.gsub!(/!supmua.org,2006-10-01\/(\S*)$/) { |m| "!<tag:supmua.org,2006-10-01/#{$1}>" }
|
146
|
+
if YAML.respond_to?(:unsafe_load) # Ruby 3.1+
|
147
|
+
YAML::unsafe_load raw_contents
|
144
148
|
else
|
145
|
-
YAML::
|
149
|
+
YAML::load raw_contents
|
146
150
|
end
|
147
151
|
end
|
148
152
|
if o.is_a?(Array)
|
@@ -349,7 +353,7 @@ EOM
|
|
349
353
|
name ||= ENV["USER"]
|
350
354
|
email = ENV["USER"] + "@" +
|
351
355
|
begin
|
352
|
-
|
356
|
+
Addrinfo.getaddrinfo(Socket.gethostname, 'smtp').first.getnameinfo.first
|
353
357
|
rescue SocketError
|
354
358
|
Socket.gethostname
|
355
359
|
end
|
data/man/sup-add.1
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
.\" Automatically generated by Pandoc 2.
|
1
|
+
.\" Automatically generated by Pandoc 2.9.2.1
|
2
2
|
.\"
|
3
3
|
.TH "SUP-ADD" "1" "April 9, 2012" "Sup User Manual" ""
|
4
4
|
.hy
|
@@ -33,30 +33,30 @@ maildir://<path to Maildir directory>
|
|
33
33
|
.fi
|
34
34
|
.SH OPTIONS
|
35
35
|
.TP
|
36
|
-
|
36
|
+
-a, --archive
|
37
37
|
Automatically archive all new messages from thesesources.
|
38
38
|
.TP
|
39
|
-
|
39
|
+
-u, --unusual
|
40
40
|
Do not automatically poll these sources for new messages.
|
41
41
|
.TP
|
42
|
-
|
42
|
+
-l \f[I]STRING\f[R], --labels \f[I]STRING\f[R]
|
43
43
|
A comma-separated set of labels to apply to all messages from this
|
44
44
|
source
|
45
45
|
.TP
|
46
|
-
|
46
|
+
-f, --force-new
|
47
47
|
Create a new account for this source, even if one already exists
|
48
48
|
.TP
|
49
|
-
|
49
|
+
-o \f[I]STRING\f[R], --force-account \f[I]STRING\f[R]
|
50
50
|
Reuse previously defined account user\[at]hostname
|
51
51
|
.TP
|
52
|
-
|
52
|
+
-v, --version
|
53
53
|
Print version and exit
|
54
54
|
.TP
|
55
|
-
|
55
|
+
-h, --help
|
56
56
|
Show help message
|
57
57
|
.SH FILES
|
58
58
|
.TP
|
59
|
-
|
59
|
+
$HOME/.sup/sources.yaml
|
60
60
|
Configuration file for Sup mail sources
|
61
61
|
.SH SEE ALSO
|
62
62
|
.PP
|
@@ -69,19 +69,19 @@ at
|
|
69
69
|
<https://github.com/sup-heliotrope/sup/issues>
|
70
70
|
.SH CONTACT INFORMATION
|
71
71
|
.TP
|
72
|
-
|
73
|
-
<
|
72
|
+
The Sup web page:
|
73
|
+
<https://sup-heliotrope.github.io/>
|
74
74
|
.TP
|
75
|
-
|
75
|
+
Code repository:
|
76
76
|
<https://github.com/sup-heliotrope/sup/>
|
77
77
|
.TP
|
78
|
-
|
78
|
+
Sup Wiki:
|
79
79
|
<https://github.com/sup-heliotrope/sup/wiki/>
|
80
80
|
.TP
|
81
|
-
|
81
|
+
Sup IRC channel:
|
82
82
|
#sup \[at] freenode.net
|
83
83
|
.TP
|
84
|
-
|
84
|
+
Mailing list:
|
85
85
|
supmua\[at]googlegroups.com
|
86
86
|
.RS
|
87
87
|
.PP
|
data/man/sup-config.1
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
.\" Automatically generated by Pandoc 2.
|
1
|
+
.\" Automatically generated by Pandoc 2.9.2.1
|
2
2
|
.\"
|
3
3
|
.TH "SUP-CONFIG" "1" "April 9, 2012" "Sup User Manual" ""
|
4
4
|
.hy
|
@@ -14,17 +14,17 @@ Interactive configuration tool for Sup.
|
|
14
14
|
Won\[cq]t destroy existing configuration.
|
15
15
|
.SH OPTIONS
|
16
16
|
.TP
|
17
|
-
|
17
|
+
-v, --version
|
18
18
|
Print versian and exit
|
19
19
|
.TP
|
20
|
-
|
20
|
+
-h, --help
|
21
21
|
Show help message
|
22
22
|
.SH FILES
|
23
23
|
.TP
|
24
|
-
|
24
|
+
$HOME/.sup/config.yaml
|
25
25
|
Configuration file for Sup
|
26
26
|
.TP
|
27
|
-
|
27
|
+
$HOME/.sup/sources.yaml
|
28
28
|
Configuration file for Sup mail sources
|
29
29
|
.SH SEE ALSO
|
30
30
|
.PP
|
@@ -37,19 +37,19 @@ at
|
|
37
37
|
<https://github.com/sup-heliotrope/sup/issues>
|
38
38
|
.SH CONTACT INFORMATION
|
39
39
|
.TP
|
40
|
-
|
41
|
-
<
|
40
|
+
The Sup web page:
|
41
|
+
<https://sup-heliotrope.github.io/>
|
42
42
|
.TP
|
43
|
-
|
43
|
+
Code repository:
|
44
44
|
<https://github.com/sup-heliotrope/sup/>
|
45
45
|
.TP
|
46
|
-
|
46
|
+
Sup Wiki:
|
47
47
|
<https://github.com/sup-heliotrope/sup/wiki/>
|
48
48
|
.TP
|
49
|
-
|
49
|
+
Sup IRC channel:
|
50
50
|
#sup \[at] freenode.net
|
51
51
|
.TP
|
52
|
-
|
52
|
+
Mailing list:
|
53
53
|
supmua\[at]googlegroups.com
|
54
54
|
.RS
|
55
55
|
.PP
|
data/man/sup-dump.1
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
.\" Automatically generated by Pandoc 2.
|
1
|
+
.\" Automatically generated by Pandoc 2.9.2.1
|
2
2
|
.\"
|
3
3
|
.TH "SUP-DUMP" "1" "April 9, 2012" "Sup User Manual" ""
|
4
4
|
.hy
|
@@ -17,10 +17,10 @@ This tool is primarily useful in the event that a Sup upgrade breaks
|
|
17
17
|
index format compatibility.
|
18
18
|
.SH OPTIONS
|
19
19
|
.TP
|
20
|
-
|
20
|
+
-v, --version
|
21
21
|
Print version and exit
|
22
22
|
.TP
|
23
|
-
|
23
|
+
-h, --help
|
24
24
|
Show help message
|
25
25
|
.SH EXAMPLES
|
26
26
|
.PP
|
@@ -50,19 +50,19 @@ at
|
|
50
50
|
<https://github.com/sup-heliotrope/sup/issues>
|
51
51
|
.SH CONTACT INFORMATION
|
52
52
|
.TP
|
53
|
-
|
54
|
-
<
|
53
|
+
The Sup web page:
|
54
|
+
<https://sup-heliotrope.github.io/>
|
55
55
|
.TP
|
56
|
-
|
56
|
+
Code repository:
|
57
57
|
<https://github.com/sup-heliotrope/sup/>
|
58
58
|
.TP
|
59
|
-
|
59
|
+
Sup Wiki:
|
60
60
|
<https://github.com/sup-heliotrope/sup/wiki/>
|
61
61
|
.TP
|
62
|
-
|
62
|
+
Sup IRC channel:
|
63
63
|
#sup \[at] freenode.net
|
64
64
|
.TP
|
65
|
-
|
65
|
+
Mailing list:
|
66
66
|
supmua\[at]googlegroups.com
|
67
67
|
.RS
|
68
68
|
.PP
|
data/man/sup-import-dump.1
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
.\" Automatically generated by Pandoc 2.
|
1
|
+
.\" Automatically generated by Pandoc 2.9.2.1
|
2
2
|
.\"
|
3
3
|
.TH "SUP-IMPORT-DUMP" "1" "April 9, 2012" "Sup User Manual" ""
|
4
4
|
.hy
|
@@ -18,29 +18,29 @@ If you need to recreate the index, see sup-sync --restore instead.
|
|
18
18
|
Messages not mentioned in the dump file will not be modified.
|
19
19
|
.SH OPTIONS
|
20
20
|
.TP
|
21
|
-
|
21
|
+
-v, --verbose
|
22
22
|
Print message ids as they\[cq]re processed
|
23
23
|
.TP
|
24
|
-
|
24
|
+
-i, --ignore-missing
|
25
25
|
Silently skip over messages that are not in the index
|
26
26
|
.TP
|
27
|
-
|
27
|
+
-w, --warn-missing
|
28
28
|
Warn about messages that are not in the index, but continue
|
29
29
|
.TP
|
30
|
-
|
30
|
+
-a, --abort-missing
|
31
31
|
Abort on encountering messages that are not in the index (default)
|
32
32
|
.TP
|
33
|
-
|
33
|
+
-t, --atomic
|
34
34
|
Use transaction to apply all changes atomically
|
35
35
|
.TP
|
36
|
-
|
36
|
+
-n, --dry-run
|
37
37
|
Don\[cq]t actually modify the index.
|
38
38
|
Probably only useful with --verbose
|
39
39
|
.TP
|
40
|
-
|
40
|
+
--version
|
41
41
|
Show version information
|
42
42
|
.TP
|
43
|
-
|
43
|
+
-h, --help
|
44
44
|
Show help message
|
45
45
|
.SH SEE ALSO
|
46
46
|
.PP
|
@@ -53,19 +53,19 @@ at
|
|
53
53
|
<https://github.com/sup-heliotrope/sup/issues>
|
54
54
|
.SH CONTACT INFORMATION
|
55
55
|
.TP
|
56
|
-
|
57
|
-
<
|
56
|
+
The Sup web page:
|
57
|
+
<https://sup-heliotrope.github.io/>
|
58
58
|
.TP
|
59
|
-
|
59
|
+
Code repository:
|
60
60
|
<https://github.com/sup-heliotrope/sup/>
|
61
61
|
.TP
|
62
|
-
|
62
|
+
Sup Wiki:
|
63
63
|
<https://github.com/sup-heliotrope/sup/wiki/>
|
64
64
|
.TP
|
65
|
-
|
65
|
+
Sup IRC channel:
|
66
66
|
#sup \[at] freenode.net
|
67
67
|
.TP
|
68
|
-
|
68
|
+
Mailing list:
|
69
69
|
supmua\[at]googlegroups.com
|
70
70
|
.RS
|
71
71
|
.PP
|
@@ -1,4 +1,4 @@
|
|
1
|
-
.\" Automatically generated by Pandoc 2.
|
1
|
+
.\" Automatically generated by Pandoc 2.9.2.1
|
2
2
|
.\"
|
3
3
|
.TH "SUP-SYNC" "1" "September 3, 2014" "Sup User Manual" ""
|
4
4
|
.hy
|
@@ -22,10 +22,10 @@ Read more on the Sup wiki
|
|
22
22
|
https://github.com/sup-heliotrope/sup/wiki/Migration-0.13-to-0.14
|
23
23
|
.SH FILES
|
24
24
|
.TP
|
25
|
-
|
25
|
+
$HOME/.sup/config.yaml
|
26
26
|
Sup configuration file
|
27
27
|
.TP
|
28
|
-
|
28
|
+
$HOME/.sup/sources.yaml
|
29
29
|
Configuration file for Sup mail sources
|
30
30
|
.SH SEE ALSO
|
31
31
|
.PP
|
@@ -38,19 +38,19 @@ at
|
|
38
38
|
<https://github.com/sup-heliotrope/sup/issues>
|
39
39
|
.SH CONTACT INFORMATION
|
40
40
|
.TP
|
41
|
-
|
42
|
-
<
|
41
|
+
The Sup web page:
|
42
|
+
<https://sup-heliotrope.github.io/>
|
43
43
|
.TP
|
44
|
-
|
44
|
+
Code repository:
|
45
45
|
<https://github.com/sup-heliotrope/sup/>
|
46
46
|
.TP
|
47
|
-
|
47
|
+
Sup Wiki:
|
48
48
|
<https://github.com/sup-heliotrope/sup/wiki/>
|
49
49
|
.TP
|
50
|
-
|
50
|
+
Sup IRC channel:
|
51
51
|
#sup \[at] freenode.net
|
52
52
|
.TP
|
53
|
-
|
53
|
+
Mailing list:
|
54
54
|
supmua\[at]googlegroups.com
|
55
55
|
.RS
|
56
56
|
.PP
|