sup 1.0 → 1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (66) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/checks.yml +70 -0
  3. data/.rubocop.yml +5 -0
  4. data/CONTRIBUTORS +3 -2
  5. data/Gemfile +5 -1
  6. data/History.txt +20 -0
  7. data/Manifest.txt +149 -0
  8. data/README.md +9 -3
  9. data/Rakefile +40 -1
  10. data/bin/sup-add +4 -8
  11. data/ext/mkrf_conf_xapian.rb +10 -4
  12. data/lib/sup/colormap.rb +1 -1
  13. data/lib/sup/hook.rb +1 -1
  14. data/lib/sup/index.rb +2 -2
  15. data/lib/sup/keymap.rb +1 -1
  16. data/lib/sup/maildir.rb +4 -4
  17. data/lib/sup/mbox.rb +4 -4
  18. data/lib/sup/message.rb +6 -5
  19. data/lib/sup/message_chunks.rb +27 -19
  20. data/lib/sup/modes/completion_mode.rb +0 -1
  21. data/lib/sup/modes/file_browser_mode.rb +2 -2
  22. data/lib/sup/modes/label_list_mode.rb +1 -1
  23. data/lib/sup/modes/search_list_mode.rb +2 -2
  24. data/lib/sup/modes/thread_view_mode.rb +1 -2
  25. data/lib/sup/rfc2047.rb +21 -6
  26. data/lib/sup/source.rb +8 -2
  27. data/lib/sup/textfield.rb +0 -1
  28. data/lib/sup/thread.rb +0 -1
  29. data/lib/sup/util.rb +28 -48
  30. data/lib/sup/version.rb +1 -1
  31. data/lib/sup.rb +12 -8
  32. data/man/sup-add.1 +15 -15
  33. data/man/sup-config.1 +11 -11
  34. data/man/sup-dump.1 +9 -9
  35. data/man/sup-import-dump.1 +15 -15
  36. data/man/sup-psych-ify-config-files.1 +9 -9
  37. data/man/sup-recover-sources.1 +12 -12
  38. data/man/sup-sync-back-maildir.1 +14 -14
  39. data/man/sup-sync.1 +20 -20
  40. data/man/sup-tweak-labels.1 +16 -16
  41. data/man/sup.1 +21 -21
  42. data/sup.gemspec +6 -4
  43. data/test/dummy_source.rb +21 -15
  44. data/test/fixtures/embedded-message.eml +34 -0
  45. data/test/fixtures/non-ascii-header-in-nested-message.eml +36 -0
  46. data/test/fixtures/non-ascii-header.eml +8 -0
  47. data/test/fixtures/rfc2047-header-encoding.eml +15 -0
  48. data/test/fixtures/text-attachments-with-charset.eml +15 -1
  49. data/test/fixtures/utf8-header.eml +17 -0
  50. data/test/integration/test_mbox.rb +1 -1
  51. data/test/integration/test_sup-add.rb +83 -0
  52. data/test/test_crypto.rb +44 -0
  53. data/test/test_header_parsing.rb +9 -1
  54. data/test/test_helper.rb +7 -4
  55. data/test/test_message.rb +124 -32
  56. data/test/test_messages_dir.rb +13 -15
  57. data/test/unit/test_horizontal_selector.rb +4 -4
  58. data/test/unit/test_locale_fiddler.rb +1 -1
  59. data/test/unit/util/test_query.rb +1 -1
  60. data/test/unit/util/test_string.rb +3 -3
  61. data/test/unit/util/test_uri.rb +2 -2
  62. metadata +46 -18
  63. data/.travis.yml +0 -18
  64. data/bin/sup-psych-ify-config-files +0 -21
  65. data/test/integration/test_label_service.rb +0 -18
  66. data/test/test_yaml_migration.rb +0 -85
@@ -43,7 +43,7 @@ protected
43
43
  end
44
44
 
45
45
  def view
46
- name, f = @files[curpos - RESERVED_ROWS]
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
- name, f = @files[curpos - RESERVED_ROWS]
57
+ _name, f = @files[curpos - RESERVED_ROWS]
58
58
  return unless f
59
59
 
60
60
  if f.directory? && f.to_s != "."
@@ -129,7 +129,7 @@ protected
129
129
  end
130
130
 
131
131
  def select_label
132
- label, num_unread = @labels[curpos]
132
+ label, _num_unread = @labels[curpos]
133
133
  return unless label
134
134
  LabelSearchResultsMode.spawn_nicely label
135
135
  end
@@ -131,13 +131,13 @@ protected
131
131
  end
132
132
 
133
133
  def select_search
134
- name, num_unread = @searches[curpos]
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, num_unread = @searches[curpos]
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 => e
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
- out = from.gsub(WORD) do
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
- #puts text
39
- text = text.unpack('m*')[0]
40
- #puts text.dump
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
- text.transcode(target, charset)
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 &block
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 => e
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
@@ -407,7 +407,6 @@ class ThreadSet
407
407
  #puts "adding: #{message.id}, refs #{message.refs.inspect}"
408
408
 
409
409
  el.message = message
410
- oldroot = el.root
411
410
 
412
411
  ## link via references:
413
412
  (message.refs + [el.id]).inject(nil) do |prev, ref_id|
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
- class Lockfile
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
- class Serialize
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 &b
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
- def sum; inject(0) { |x, y| x + y }; end
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
- def to_h; Hash[*flatten]; end
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
@@ -8,5 +8,5 @@ def git_suffix
8
8
  end
9
9
 
10
10
  module Redwood
11
- VERSION = "1.0"
11
+ VERSION = "1.1"
12
12
  end
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 "!#{Redwood::YAML_DOMAIN},#{Redwood::YAML_DATE}/#{path}"
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| YAML::load 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::load_file fn
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
- Socket.gethostbyname(Socket.gethostname).first
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.7.3
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
- .B -a, --archive
36
+ -a, --archive
37
37
  Automatically archive all new messages from thesesources.
38
38
  .TP
39
- .B -u, --unusual
39
+ -u, --unusual
40
40
  Do not automatically poll these sources for new messages.
41
41
  .TP
42
- .B -l \f[I]STRING\f[R], --labels \f[I]STRING\f[R]
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
- .B -f, --force-new
46
+ -f, --force-new
47
47
  Create a new account for this source, even if one already exists
48
48
  .TP
49
- .B -o \f[I]STRING\f[R], --force-account \f[I]STRING\f[R]
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
- .B -v, --version
52
+ -v, --version
53
53
  Print version and exit
54
54
  .TP
55
- .B -h, --help
55
+ -h, --help
56
56
  Show help message
57
57
  .SH FILES
58
58
  .TP
59
- .B $HOME/.sup/sources.yaml
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
- .B The Sup web page:
73
- <http://supmua.org/>
72
+ The Sup web page:
73
+ <https://sup-heliotrope.github.io/>
74
74
  .TP
75
- .B Code repository:
75
+ Code repository:
76
76
  <https://github.com/sup-heliotrope/sup/>
77
77
  .TP
78
- .B Sup Wiki:
78
+ Sup Wiki:
79
79
  <https://github.com/sup-heliotrope/sup/wiki/>
80
80
  .TP
81
- .B Sup IRC channel:
81
+ Sup IRC channel:
82
82
  #sup \[at] freenode.net
83
83
  .TP
84
- .B Mailing list:
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.7.3
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
- .B -v, --version
17
+ -v, --version
18
18
  Print versian and exit
19
19
  .TP
20
- .B -h, --help
20
+ -h, --help
21
21
  Show help message
22
22
  .SH FILES
23
23
  .TP
24
- .B $HOME/.sup/config.yaml
24
+ $HOME/.sup/config.yaml
25
25
  Configuration file for Sup
26
26
  .TP
27
- .B $HOME/.sup/sources.yaml
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
- .B The Sup web page:
41
- <http://supmua.org/>
40
+ The Sup web page:
41
+ <https://sup-heliotrope.github.io/>
42
42
  .TP
43
- .B Code repository:
43
+ Code repository:
44
44
  <https://github.com/sup-heliotrope/sup/>
45
45
  .TP
46
- .B Sup Wiki:
46
+ Sup Wiki:
47
47
  <https://github.com/sup-heliotrope/sup/wiki/>
48
48
  .TP
49
- .B Sup IRC channel:
49
+ Sup IRC channel:
50
50
  #sup \[at] freenode.net
51
51
  .TP
52
- .B Mailing list:
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.7.3
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
- .B -v, --version
20
+ -v, --version
21
21
  Print version and exit
22
22
  .TP
23
- .B -h, --help
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
- .B The Sup web page:
54
- <http://supmua.org/>
53
+ The Sup web page:
54
+ <https://sup-heliotrope.github.io/>
55
55
  .TP
56
- .B Code repository:
56
+ Code repository:
57
57
  <https://github.com/sup-heliotrope/sup/>
58
58
  .TP
59
- .B Sup Wiki:
59
+ Sup Wiki:
60
60
  <https://github.com/sup-heliotrope/sup/wiki/>
61
61
  .TP
62
- .B Sup IRC channel:
62
+ Sup IRC channel:
63
63
  #sup \[at] freenode.net
64
64
  .TP
65
- .B Mailing list:
65
+ Mailing list:
66
66
  supmua\[at]googlegroups.com
67
67
  .RS
68
68
  .PP
@@ -1,4 +1,4 @@
1
- .\" Automatically generated by Pandoc 2.7.3
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
- .B -v, --verbose
21
+ -v, --verbose
22
22
  Print message ids as they\[cq]re processed
23
23
  .TP
24
- .B -i, --ignore-missing
24
+ -i, --ignore-missing
25
25
  Silently skip over messages that are not in the index
26
26
  .TP
27
- .B -w, --warn-missing
27
+ -w, --warn-missing
28
28
  Warn about messages that are not in the index, but continue
29
29
  .TP
30
- .B -a, --abort-missing
30
+ -a, --abort-missing
31
31
  Abort on encountering messages that are not in the index (default)
32
32
  .TP
33
- .B -t, --atomic
33
+ -t, --atomic
34
34
  Use transaction to apply all changes atomically
35
35
  .TP
36
- .B -n, --dry-run
36
+ -n, --dry-run
37
37
  Don\[cq]t actually modify the index.
38
38
  Probably only useful with --verbose
39
39
  .TP
40
- .B --version
40
+ --version
41
41
  Show version information
42
42
  .TP
43
- .B -h, --help
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
- .B The Sup web page:
57
- <http://supmua.org/>
56
+ The Sup web page:
57
+ <https://sup-heliotrope.github.io/>
58
58
  .TP
59
- .B Code repository:
59
+ Code repository:
60
60
  <https://github.com/sup-heliotrope/sup/>
61
61
  .TP
62
- .B Sup Wiki:
62
+ Sup Wiki:
63
63
  <https://github.com/sup-heliotrope/sup/wiki/>
64
64
  .TP
65
- .B Sup IRC channel:
65
+ Sup IRC channel:
66
66
  #sup \[at] freenode.net
67
67
  .TP
68
- .B Mailing list:
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.7.3
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
- .B $HOME/.sup/config.yaml
25
+ $HOME/.sup/config.yaml
26
26
  Sup configuration file
27
27
  .TP
28
- .B $HOME/.sup/sources.yaml
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
- .B The Sup web page:
42
- <http://supmua.org/>
41
+ The Sup web page:
42
+ <https://sup-heliotrope.github.io/>
43
43
  .TP
44
- .B Code repository:
44
+ Code repository:
45
45
  <https://github.com/sup-heliotrope/sup/>
46
46
  .TP
47
- .B Sup Wiki:
47
+ Sup Wiki:
48
48
  <https://github.com/sup-heliotrope/sup/wiki/>
49
49
  .TP
50
- .B Sup IRC channel:
50
+ Sup IRC channel:
51
51
  #sup \[at] freenode.net
52
52
  .TP
53
- .B Mailing list:
53
+ Mailing list:
54
54
  supmua\[at]googlegroups.com
55
55
  .RS
56
56
  .PP