sup 1.1 → 1.3

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.
Files changed (82) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/checks.yml +40 -38
  3. data/.gitmodules +1 -0
  4. data/CONTRIBUTORS +3 -1
  5. data/History.txt +32 -3
  6. data/Manifest.txt +34 -1
  7. data/README.md +0 -1
  8. data/bin/sup-sync-back-maildir +1 -1
  9. data/contrib/nix/Gemfile +24 -0
  10. data/contrib/nix/Gemfile.lock +101 -0
  11. data/contrib/nix/README +7 -0
  12. data/contrib/nix/gem-install-shell.nix +14 -0
  13. data/contrib/nix/gemset.nix +391 -0
  14. data/contrib/nix/ruby2.4-Gemfile.lock +85 -0
  15. data/contrib/nix/ruby2.4-gemset.nix +329 -0
  16. data/contrib/nix/ruby2.4-shell.nix +26 -0
  17. data/contrib/nix/ruby2.5-Gemfile.lock +85 -0
  18. data/contrib/nix/ruby2.5-gemset.nix +329 -0
  19. data/contrib/nix/ruby2.5-shell.nix +26 -0
  20. data/contrib/nix/ruby2.6-Gemfile.lock +87 -0
  21. data/contrib/nix/ruby2.6-gemset.nix +339 -0
  22. data/contrib/nix/ruby2.6-shell.nix +26 -0
  23. data/contrib/nix/ruby2.7-Gemfile.lock +91 -0
  24. data/contrib/nix/ruby2.7-gemset.nix +359 -0
  25. data/contrib/nix/ruby2.7-shell.nix +14 -0
  26. data/contrib/nix/ruby3.0-Gemfile.lock +91 -0
  27. data/contrib/nix/ruby3.0-gemset.nix +359 -0
  28. data/contrib/nix/ruby3.0-shell.nix +14 -0
  29. data/contrib/nix/ruby3.1-shell.nix +25 -0
  30. data/contrib/nix/ruby3.2-shell.nix +25 -0
  31. data/contrib/nix/ruby3.3-shell.nix +25 -0
  32. data/contrib/nix/ruby3.4-shell.nix +36 -0
  33. data/contrib/nix/test-all-rubies.sh +6 -0
  34. data/doc/Hooks.txt +1 -1
  35. data/ext/mkrf_conf_xapian.rb +2 -2
  36. data/lib/sup/crypto.rb +8 -6
  37. data/lib/sup/index.rb +2 -2
  38. data/lib/sup/maildir.rb +5 -1
  39. data/lib/sup/mbox.rb +26 -8
  40. data/lib/sup/message.rb +15 -12
  41. data/lib/sup/modes/console_mode.rb +1 -1
  42. data/lib/sup/modes/edit_message_mode.rb +5 -5
  43. data/lib/sup/thread.rb +20 -20
  44. data/lib/sup/util.rb +12 -7
  45. data/lib/sup/version.rb +1 -1
  46. data/man/sup-add.1 +40 -40
  47. data/man/sup-config.1 +30 -26
  48. data/man/sup-dump.1 +38 -38
  49. data/man/sup-import-dump.1 +41 -37
  50. data/man/sup-psych-ify-config-files.1 +32 -28
  51. data/man/sup-recover-sources.1 +39 -35
  52. data/man/sup-sync-back-maildir.1 +39 -34
  53. data/man/sup-sync.1 +50 -46
  54. data/man/sup-tweak-labels.1 +43 -38
  55. data/man/sup.1 +42 -38
  56. data/shell.nix +1 -0
  57. data/sup.gemspec +2 -0
  58. data/test/dummy_source.rb +6 -0
  59. data/test/fixtures/embedded-message-rfc6532.eml +33 -0
  60. data/test/fixtures/invalid-date.eml +8 -0
  61. data/test/gnupg_test_home/private-keys-v1.d/26C05E44706A8E230B3255BB9532B34DC9420232.key +42 -0
  62. data/test/gnupg_test_home/private-keys-v1.d/D187ADC90EC4DEB7047678EAA37E33A53A465D47.key +5 -0
  63. data/test/gnupg_test_home/private-keys-v1.d/FB2D9BD3B1BE90B5BCF697781F8404224B0FCF5B.key +5 -0
  64. data/test/gnupg_test_home/pubring.gpg +0 -0
  65. data/test/gnupg_test_home/receiver_pubring.gpg +0 -0
  66. data/test/gnupg_test_home/receiver_secring.gpg +0 -0
  67. data/test/gnupg_test_home/regen_keys.sh +11 -2
  68. data/test/gnupg_test_home/secring.gpg +0 -0
  69. data/test/gnupg_test_home/sup-test-2@foo.bar.asc +20 -20
  70. data/test/integration/test_maildir.rb +18 -1
  71. data/test/integration/test_mbox.rb +13 -0
  72. data/test/integration/test_sup-sync-back-maildir.rb +40 -0
  73. data/test/test_crypto.rb +108 -71
  74. data/test/test_header_parsing.rb +2 -2
  75. data/test/test_message.rb +42 -0
  76. data/test/unit/test_contact.rb +1 -1
  77. data/test/unit/test_edit_message_mode.rb +94 -0
  78. data/test/unit/test_person.rb +3 -3
  79. data/test/unit/test_rmail_message.rb +36 -0
  80. data/test/unit/util/test_string.rb +3 -3
  81. metadata +73 -5
  82. data/test/gnupg_test_home/private-keys-v1.d/306D2EE90FF0014B5B9FD07E265C751791674140.key +0 -0
data/lib/sup/message.rb CHANGED
@@ -103,16 +103,10 @@ class Message
103
103
  when Time
104
104
  date
105
105
  when String
106
- begin
107
- Time.parse date
108
- rescue ArgumentError
109
- #debug "faking mangled date header for #{@id} (orig #{header['date'].inspect} gave error: #{e.message})"
110
- Time.now
111
- end
112
- else
113
- #debug "faking non-existent date header for #{@id}"
114
- Time.now
106
+ Time.rfc2822 date rescue nil
115
107
  end
108
+ @date = location.fallback_date if @date.nil?
109
+ @date = Time.utc 1970, 1, 1 if @date.nil?
116
110
 
117
111
  subj = header["subject"]
118
112
  subj = subj ? subj.fix_encoding! : nil
@@ -271,7 +265,7 @@ class Message
271
265
  message_to_chunks rmsg
272
266
  rescue SourceError, SocketError, RMail::EncodingUnsupportedError => e
273
267
  warn_with_location "problem reading message #{id}"
274
- debug "could not load message: #{location.inspect}, exception: #{e.inspect}"
268
+ debug "could not load message, exception: #{e.inspect}"
275
269
 
276
270
  [Chunk::Text.new(error_message.split("\n"))]
277
271
 
@@ -466,6 +460,11 @@ private
466
460
  end
467
461
  end
468
462
 
463
+ def has_embedded_message? m
464
+ return false unless m.header.content_type
465
+ %w(message/rfc822 message/global).include? m.header.content_type.downcase
466
+ end
467
+
469
468
  ## takes a RMail::Message, breaks it into Chunk:: classes.
470
469
  def message_to_chunks m, encrypted=false, sibling_types=[]
471
470
  if m.multipart?
@@ -483,7 +482,7 @@ private
483
482
  end
484
483
 
485
484
  chunks
486
- elsif m.header.content_type && m.header.content_type.downcase == "message/rfc822"
485
+ elsif has_embedded_message? m
487
486
  encoding = m.header["Content-Transfer-Encoding"]
488
487
  if m.body
489
488
  body =
@@ -760,7 +759,7 @@ private
760
759
 
761
760
  def warn_with_location msg
762
761
  warn msg
763
- warn "Message is in #{location.source.uri} at #{location.info}"
762
+ warn "Message is in #{@locations}"
764
763
  end
765
764
  end
766
765
 
@@ -808,6 +807,10 @@ class Location
808
807
  source.load_message info
809
808
  end
810
809
 
810
+ def fallback_date
811
+ source.fallback_date_for_message info
812
+ end
813
+
811
814
  def valid?
812
815
  source.valid? info
813
816
  end
@@ -11,7 +11,7 @@ class Console
11
11
  end
12
12
 
13
13
  def query(query)
14
- Enumerator.new(Index.instance, :each_message, Index.parse_query(query))
14
+ Index.instance.enum_for :each_message, Index.parse_query(query)
15
15
  end
16
16
 
17
17
  def add_labels(query, *labels)
@@ -563,7 +563,7 @@ protected
563
563
  ## there are attachments, so wrap body in an attachment of its own
564
564
  unless @attachments.empty?
565
565
  body_m = m
566
- body_m.header["Content-Disposition"] = "inline"
566
+ body_m.header["Content-Disposition"] = +"inline"
567
567
  m = RMail::Message.new
568
568
 
569
569
  m.add_part body_m
@@ -601,8 +601,8 @@ protected
601
601
  m.header["Date"] = date.rfc2822
602
602
  m.header["Message-Id"] = @message_id
603
603
  m.header["User-Agent"] = "Sup/#{Redwood::VERSION}"
604
- m.header["Content-Transfer-Encoding"] ||= '8bit'
605
- m.header["MIME-Version"] = "1.0" if m.multipart?
604
+ m.header["Content-Transfer-Encoding"] ||= +"8bit"
605
+ m.header["MIME-Version"] = +"1.0" if m.multipart?
606
606
  m
607
607
  end
608
608
 
@@ -716,10 +716,10 @@ private
716
716
  ## encode to quoted-printable for all text/* MIME types,
717
717
  ## use base64 otherwise
718
718
  if msg_part.header["Content-Type"] =~ /text\/.*/
719
- msg_part.header["Content-Transfer-Encoding"] = 'quoted-printable'
719
+ msg_part.header.set "Content-Transfer-Encoding", +"quoted-printable"
720
720
  msg_part.body = [msg_part.body].pack('M')
721
721
  else
722
- msg_part.header["Content-Transfer-Encoding"] = 'base64'
722
+ msg_part.header.set "Content-Transfer-Encoding", +"base64"
723
723
  msg_part.body = [msg_part.body].pack('m')
724
724
  end
725
725
  msg_part
data/lib/sup/thread.rb CHANGED
@@ -86,22 +86,22 @@ class Thread
86
86
  end
87
87
  end
88
88
 
89
- def first; each { |m, *o| return m if m }; nil; end
90
- def has_message?; any? { |m, *o| m.is_a? Message }; end
91
- def dirty?; any? { |m, *o| m && m.dirty? }; end
92
- def date; map { |m, *o| m.date if m }.compact.max; end
89
+ def first; each { |m, *| return m if m }; nil; end
90
+ def has_message?; any? { |m, *| m.is_a? Message }; end
91
+ def dirty?; any? { |m, *| m && m.dirty? }; end
92
+ def date; map { |m, *| m.date if m }.compact.max; end
93
93
  def snippet
94
- with_snippets = select { |m, *o| m && m.snippet && !m.snippet.empty? }
95
- first_unread, * = with_snippets.select { |m, *o| m.has_label?(:unread) }.sort_by { |m, *o| m.date }.first
94
+ with_snippets = select { |m, *| m && m.snippet && !m.snippet.empty? }
95
+ first_unread, * = with_snippets.select { |m, *| m.has_label?(:unread) }.sort_by { |m, *| m.date }.first
96
96
  return first_unread.snippet if first_unread
97
- last_read, * = with_snippets.sort_by { |m, *o| m.date }.last
97
+ last_read, * = with_snippets.sort_by { |m, *| m.date }.last
98
98
  return last_read.snippet if last_read
99
99
  ""
100
100
  end
101
- def authors; map { |m, *o| m.from if m }.compact.uniq; end
101
+ def authors; map { |m, *| m.from if m }.compact.uniq; end
102
102
 
103
- def apply_label t; each { |m, *o| m && m.add_label(t) }; end
104
- def remove_label t; each { |m, *o| m && m.remove_label(t) }; end
103
+ def apply_label t; each { |m, *| m && m.add_label(t) }; end
104
+ def remove_label t; each { |m, *| m && m.remove_label(t) }; end
105
105
 
106
106
  def toggle_label label
107
107
  if has_label? label
@@ -113,24 +113,24 @@ class Thread
113
113
  end
114
114
  end
115
115
 
116
- def set_labels l; each { |m, *o| m && m.labels = l }; end
117
- def has_label? t; any? { |m, *o| m && m.has_label?(t) }; end
118
- def each_dirty_message; each { |m, *o| m && m.dirty? && yield(m) }; end
116
+ def set_labels l; each { |m, *| m && m.labels = l }; end
117
+ def has_label? t; any? { |m, *| m && m.has_label?(t) }; end
118
+ def each_dirty_message; each { |m, *| m && m.dirty? && yield(m) }; end
119
119
 
120
120
  def direct_participants
121
- map { |m, *o| [m.from] + m.to if m }.flatten.compact.uniq
121
+ map { |m, *| [m.from] + m.to if m }.flatten.compact.uniq
122
122
  end
123
123
 
124
124
  def participants
125
- map { |m, *o| [m.from] + m.to + m.cc + m.bcc if m }.flatten.compact.uniq
125
+ map { |m, *| [m.from] + m.to + m.cc + m.bcc if m }.flatten.compact.uniq
126
126
  end
127
127
 
128
- def size; map { |m, *o| m ? 1 : 0 }.sum; end
129
- def subj; argfind { |m, *o| m && m.subj }; end
130
- def labels; inject(Set.new) { |s, (m, *o)| m ? s | m.labels : s } end
128
+ def size; map { |m, *| m ? 1 : 0 }.sum; end
129
+ def subj; argfind { |m, *| m && m.subj }; end
130
+ def labels; inject(Set.new) { |s, (m, *)| m ? s | m.labels : s } end
131
131
  def labels= l
132
132
  raise ArgumentError, "not a set" unless l.is_a?(Set)
133
- each { |m, *o| m && m.labels = l.dup }
133
+ each { |m, *| m && m.labels = l.dup }
134
134
  end
135
135
 
136
136
  def latest_message
@@ -360,7 +360,7 @@ class ThreadSet
360
360
  ## merges in a pre-loaded thread
361
361
  def add_thread t
362
362
  raise "duplicate" if @threads.values.member? t
363
- t.each { |m, *o| add_message m }
363
+ t.each { |m, *| add_message m }
364
364
  end
365
365
 
366
366
  ## merges two threads together. both must be members of this threadset.
data/lib/sup/util.rb CHANGED
@@ -11,6 +11,7 @@ require 'benchmark'
11
11
  require 'unicode'
12
12
  require 'unicode/display_width'
13
13
  require 'fileutils'
14
+ require 'string-scrub' if /^2\.0\./ =~ RUBY_VERSION
14
15
 
15
16
  module ExtendedLockfile
16
17
  def gen_lock_id
@@ -79,7 +80,14 @@ module RMail
79
80
  def self.make_file_attachment fn
80
81
  bfn = File.basename fn
81
82
  t = MIME::Types.type_for(bfn).first || MIME::Types.type_for("exe").first
82
- make_attachment IO.read(fn), t.content_type, t.encoding, bfn.to_s
83
+ payload = IO.read fn
84
+ ## Need to encode as base64 or quoted-printable if any lines are longer than 998 chars.
85
+ encoding = if t.encoding != t.default_encoding and payload.each_line.any? { |l| l.length > 998 }
86
+ t.default_encoding
87
+ else
88
+ t.encoding
89
+ end
90
+ make_attachment payload, t.content_type, encoding, bfn.to_s
83
91
  end
84
92
 
85
93
  def charset
@@ -205,7 +213,7 @@ class String
205
213
  end
206
214
 
207
215
  def slice_by_display_length len
208
- each_char.each_with_object "" do |c, buffer|
216
+ each_char.each_with_object (+"") do |c, buffer|
209
217
  len -= Unicode::DisplayWidth.of(c)
210
218
  return buffer if len < 0
211
219
  buffer << c
@@ -315,11 +323,8 @@ class String
315
323
  # first try to encode to utf-8 from whatever current encoding
316
324
  encode!('UTF-8', :invalid => :replace, :undef => :replace)
317
325
 
318
- # do this anyway in case string is set to be UTF-8, encoding to
319
- # something else (UTF-16 which can fully represent UTF-8) and back
320
- # ensures invalid chars are replaced.
321
- encode!('UTF-16', 'UTF-8', :invalid => :replace, :undef => :replace)
322
- encode!('UTF-8', 'UTF-16', :invalid => :replace, :undef => :replace)
326
+ # ensure invalid chars are replaced
327
+ scrub!
323
328
 
324
329
  fail "Could not create valid UTF-8 string out of: '#{self.to_s}'." unless valid_encoding?
325
330
 
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.1"
11
+ VERSION = "1.3"
12
12
  end
data/man/sup-add.1 CHANGED
@@ -1,85 +1,80 @@
1
- .\" Automatically generated by Pandoc 2.9.2.1
1
+ .\" Automatically generated by Pandoc 3.1.11.1
2
2
  .\"
3
- .TH "SUP-ADD" "1" "April 9, 2012" "Sup User Manual" ""
4
- .hy
3
+ .TH "SUP\-ADD" "1" "April 9, 2012" "Sup User Manual" ""
5
4
  .SH NAME
6
- .PP
7
- sup-add - add a source to the Sup source list
5
+ sup\-add \- add a source to the Sup source list
8
6
  .SH SYNOPSIS
9
- .PP
10
- sup-add [\f[I]options\f[R]] [\f[I]source uri\&...\f[R]]
7
+ sup\-add [\f[I]options\f[R]] [\f[I]source uri\&...\f[R]]
11
8
  .SH DESCRIPTION
12
- .PP
13
9
  Add one ore more sources to the Sup source list
14
10
  .PP
15
11
  For mbox files on local disk, use the form:
16
12
  .IP
17
- .nf
18
- \f[C]
13
+ .EX
19
14
  mbox:<path to mbox file>, or
20
15
 
21
16
  mbox://<path to mbox file>
22
- \f[R]
23
- .fi
17
+ .EE
24
18
  .PP
25
19
  For Maildir folders, use the form:
26
20
  .IP
27
- .nf
28
- \f[C]
21
+ .EX
29
22
  maildir:<path to Maildir directory>; or
30
23
 
31
24
  maildir://<path to Maildir directory>
32
- \f[R]
33
- .fi
25
+ .EE
34
26
  .SH OPTIONS
35
27
  .TP
36
- -a, --archive
28
+ \-a, \-\-archive
37
29
  Automatically archive all new messages from thesesources.
38
30
  .TP
39
- -u, --unusual
31
+ \-u, \-\-unusual
40
32
  Do not automatically poll these sources for new messages.
41
33
  .TP
42
- -l \f[I]STRING\f[R], --labels \f[I]STRING\f[R]
43
- A comma-separated set of labels to apply to all messages from this
34
+ \-l \f[I]STRING\f[R], \-\-labels \f[I]STRING\f[R]
35
+ A comma\-separated set of labels to apply to all messages from this
44
36
  source
45
37
  .TP
46
- -f, --force-new
38
+ \-f, \-\-force\-new
47
39
  Create a new account for this source, even if one already exists
48
40
  .TP
49
- -o \f[I]STRING\f[R], --force-account \f[I]STRING\f[R]
41
+ \-o \f[I]STRING\f[R], \-\-force\-account \f[I]STRING\f[R]
50
42
  Reuse previously defined account user\[at]hostname
51
43
  .TP
52
- -v, --version
44
+ \-v, \-\-version
53
45
  Print version and exit
54
46
  .TP
55
- -h, --help
47
+ \-h, \-\-help
56
48
  Show help message
57
49
  .SH FILES
58
50
  .TP
59
51
  $HOME/.sup/sources.yaml
60
52
  Configuration file for Sup mail sources
61
53
  .SH SEE ALSO
62
- .PP
63
- sup(1), sup-config(1)
54
+ sup(1), sup\-config(1)
64
55
  .SH REPORTING BUGS
65
- .PP
66
56
  You are welcome to submit bug reports to the Sup issue tracker, located
67
57
  at
68
58
  .PP
69
- <https://github.com/sup-heliotrope/sup/issues>
59
+ \c
60
+ .UR https://github.com/sup-heliotrope/sup/issues
61
+ .UE \c
70
62
  .SH CONTACT INFORMATION
71
63
  .TP
72
64
  The Sup web page:
73
- <https://sup-heliotrope.github.io/>
65
+ \c
66
+ .UR https://sup-heliotrope.github.io/
67
+ .UE \c
74
68
  .TP
75
69
  Code repository:
76
- <https://github.com/sup-heliotrope/sup/>
70
+ \c
71
+ .UR https://github.com/sup-heliotrope/sup/
72
+ .UE \c
77
73
  .TP
78
74
  Sup Wiki:
79
- <https://github.com/sup-heliotrope/sup/wiki/>
80
- .TP
81
- Sup IRC channel:
82
- #sup \[at] freenode.net
75
+ \c
76
+ .UR https://github.com/sup-heliotrope/sup/wiki/
77
+ .UE \c
83
78
  .TP
84
79
  Mailing list:
85
80
  supmua\[at]googlegroups.com
@@ -87,17 +82,22 @@ supmua\[at]googlegroups.com
87
82
  .PP
88
83
  supmua+subscribe\[at]googlegroups.com
89
84
  .PP
90
- Archives: <https://groups.google.com/d/forum/supmua/>
85
+ Archives: \c
86
+ .UR https://groups.google.com/d/forum/supmua/
87
+ .UE \c
91
88
  .RE
92
89
  .SH COPYRIGHT
90
+ Copyright © 2006\-2009 William Morgan \c
91
+ .MT mworgan-sup@masanjin.net
92
+ .ME \c
93
93
  .PP
94
- Copyright \[co] 2006-2009 William Morgan <mworgan-sup@masanjin.net>
95
- .PP
96
- Copyright \[at] 2013-2014 Sup developers
94
+ Copyright \[at] 2013\-2014 Sup developers
97
95
  .PP
98
96
  Permission is granted to copy and distribute this manual under the terms
99
97
  of the GNU General Public License; either version 2 or (at your option)
100
98
  any later version.
101
99
  .SH AUTHORS
102
- Sup was originally written by William Morgan <wmorgan-sup@masanjin.net>
103
- and is now developed and maintained by the Sup developers.
100
+ Sup was originally written by William Morgan \c
101
+ .MT wmorgan-sup@masanjin.net
102
+ .ME \c
103
+ \ and is now developed and maintained by the Sup developers.
data/man/sup-config.1 CHANGED
@@ -1,23 +1,19 @@
1
- .\" Automatically generated by Pandoc 2.9.2.1
1
+ .\" Automatically generated by Pandoc 3.1.11.1
2
2
  .\"
3
- .TH "SUP-CONFIG" "1" "April 9, 2012" "Sup User Manual" ""
4
- .hy
3
+ .TH "SUP\-CONFIG" "1" "April 9, 2012" "Sup User Manual" ""
5
4
  .SH NAME
6
- .PP
7
- sup-config - interactive configuration tool for Sup
5
+ sup\-config \- interactive configuration tool for Sup
8
6
  .SH SYNOPSIS
9
- .PP
10
- sup-config [\f[I]options\f[R]]
7
+ sup\-config [\f[I]options\f[R]]
11
8
  .SH DESCRIPTION
12
- .PP
13
9
  Interactive configuration tool for Sup.
14
10
  Won\[cq]t destroy existing configuration.
15
11
  .SH OPTIONS
16
12
  .TP
17
- -v, --version
13
+ \-v, \-\-version
18
14
  Print versian and exit
19
15
  .TP
20
- -h, --help
16
+ \-h, \-\-help
21
17
  Show help message
22
18
  .SH FILES
23
19
  .TP
@@ -27,27 +23,30 @@ Configuration file for Sup
27
23
  $HOME/.sup/sources.yaml
28
24
  Configuration file for Sup mail sources
29
25
  .SH SEE ALSO
30
- .PP
31
- sup(1), sup-add(1)
26
+ sup(1), sup\-add(1)
32
27
  .SH REPORTING BUGS
33
- .PP
34
28
  You are welcome to submit bug reports to the Sup issue tracker, located
35
29
  at
36
30
  .PP
37
- <https://github.com/sup-heliotrope/sup/issues>
31
+ \c
32
+ .UR https://github.com/sup-heliotrope/sup/issues
33
+ .UE \c
38
34
  .SH CONTACT INFORMATION
39
35
  .TP
40
36
  The Sup web page:
41
- <https://sup-heliotrope.github.io/>
37
+ \c
38
+ .UR https://sup-heliotrope.github.io/
39
+ .UE \c
42
40
  .TP
43
41
  Code repository:
44
- <https://github.com/sup-heliotrope/sup/>
42
+ \c
43
+ .UR https://github.com/sup-heliotrope/sup/
44
+ .UE \c
45
45
  .TP
46
46
  Sup Wiki:
47
- <https://github.com/sup-heliotrope/sup/wiki/>
48
- .TP
49
- Sup IRC channel:
50
- #sup \[at] freenode.net
47
+ \c
48
+ .UR https://github.com/sup-heliotrope/sup/wiki/
49
+ .UE \c
51
50
  .TP
52
51
  Mailing list:
53
52
  supmua\[at]googlegroups.com
@@ -55,17 +54,22 @@ supmua\[at]googlegroups.com
55
54
  .PP
56
55
  supmua+subscribe\[at]googlegroups.com
57
56
  .PP
58
- Archives: <https://groups.google.com/d/forum/supmua/>
57
+ Archives: \c
58
+ .UR https://groups.google.com/d/forum/supmua/
59
+ .UE \c
59
60
  .RE
60
61
  .SH COPYRIGHT
62
+ Copyright © 2006\-2009 William Morgan \c
63
+ .MT mworgan-sup@masanjin.net
64
+ .ME \c
61
65
  .PP
62
- Copyright \[co] 2006-2009 William Morgan <mworgan-sup@masanjin.net>
63
- .PP
64
- Copyright \[at] 2013-2014 Sup developers
66
+ Copyright \[at] 2013\-2014 Sup developers
65
67
  .PP
66
68
  Permission is granted to copy and distribute this manual under the terms
67
69
  of the GNU General Public License; either version 2 or (at your option)
68
70
  any later version.
69
71
  .SH AUTHORS
70
- Sup was originally written by William Morgan <wmorgan-sup@masanjin.net>
71
- and is now developed and maintained by the Sup developers.
72
+ Sup was originally written by William Morgan \c
73
+ .MT wmorgan-sup@masanjin.net
74
+ .ME \c
75
+ \ and is now developed and maintained by the Sup developers.
data/man/sup-dump.1 CHANGED
@@ -1,66 +1,61 @@
1
- .\" Automatically generated by Pandoc 2.9.2.1
1
+ .\" Automatically generated by Pandoc 3.1.11.1
2
2
  .\"
3
- .TH "SUP-DUMP" "1" "April 9, 2012" "Sup User Manual" ""
4
- .hy
3
+ .TH "SUP\-DUMP" "1" "April 9, 2012" "Sup User Manual" ""
5
4
  .SH NAME
6
- .PP
7
- sup-dump - dumps message state from Sup index
5
+ sup\-dump \- dumps message state from Sup index
8
6
  .SH SYNOPSIS
9
- .PP
10
- sup-dump [\f[I]options\f[R]]
7
+ sup\-dump [\f[I]options\f[R]]
11
8
  .SH DESCRIPTION
12
- .PP
13
9
  Dumps all message state from the Sup index to standard out.
14
- You can later use sup-sync --restored --restore to recover the index.
10
+ You can later use sup\-sync \-\-restored \-\-restore to recover the
11
+ index.
15
12
  .PP
16
13
  This tool is primarily useful in the event that a Sup upgrade breaks
17
14
  index format compatibility.
18
15
  .SH OPTIONS
19
16
  .TP
20
- -v, --version
17
+ \-v, \-\-version
21
18
  Print version and exit
22
19
  .TP
23
- -h, --help
20
+ \-h, \-\-help
24
21
  Show help message
25
22
  .SH EXAMPLES
26
- .PP
27
23
  Dump message state and store in file
28
24
  .IP
29
- .nf
30
- \f[C]
31
- sup-dump > filename
32
- \f[R]
33
- .fi
25
+ .EX
26
+ sup\-dump > filename
27
+ .EE
34
28
  .PP
35
29
  Dump message state and compress output to store in file
36
30
  .IP
37
- .nf
38
- \f[C]
39
- sup-dump | bzip2 > filename.bz2
40
- \f[R]
41
- .fi
31
+ .EX
32
+ sup\-dump | bzip2 > filename.bz2
33
+ .EE
42
34
  .SH SEE ALSO
43
- .PP
44
- sup(1), sup-sync(1), sup-import-dump(1)
35
+ sup(1), sup\-sync(1), sup\-import\-dump(1)
45
36
  .SH REPORTING BUGS
46
- .PP
47
37
  You are welcome to submit bug reports to the Sup issue tracker, located
48
38
  at
49
39
  .PP
50
- <https://github.com/sup-heliotrope/sup/issues>
40
+ \c
41
+ .UR https://github.com/sup-heliotrope/sup/issues
42
+ .UE \c
51
43
  .SH CONTACT INFORMATION
52
44
  .TP
53
45
  The Sup web page:
54
- <https://sup-heliotrope.github.io/>
46
+ \c
47
+ .UR https://sup-heliotrope.github.io/
48
+ .UE \c
55
49
  .TP
56
50
  Code repository:
57
- <https://github.com/sup-heliotrope/sup/>
51
+ \c
52
+ .UR https://github.com/sup-heliotrope/sup/
53
+ .UE \c
58
54
  .TP
59
55
  Sup Wiki:
60
- <https://github.com/sup-heliotrope/sup/wiki/>
61
- .TP
62
- Sup IRC channel:
63
- #sup \[at] freenode.net
56
+ \c
57
+ .UR https://github.com/sup-heliotrope/sup/wiki/
58
+ .UE \c
64
59
  .TP
65
60
  Mailing list:
66
61
  supmua\[at]googlegroups.com
@@ -68,17 +63,22 @@ supmua\[at]googlegroups.com
68
63
  .PP
69
64
  supmua+subscribe\[at]googlegroups.com
70
65
  .PP
71
- Archives: <https://groups.google.com/d/forum/supmua/>
66
+ Archives: \c
67
+ .UR https://groups.google.com/d/forum/supmua/
68
+ .UE \c
72
69
  .RE
73
70
  .SH COPYRIGHT
71
+ Copyright © 2006\-2009 William Morgan \c
72
+ .MT mworgan-sup@masanjin.net
73
+ .ME \c
74
74
  .PP
75
- Copyright \[co] 2006-2009 William Morgan <mworgan-sup@masanjin.net>
76
- .PP
77
- Copyright \[at] 2013-2014 Sup developers
75
+ Copyright \[at] 2013\-2014 Sup developers
78
76
  .PP
79
77
  Permission is granted to copy and distribute this manual under the terms
80
78
  of the GNU General Public License; either version 2 or (at your option)
81
79
  any later version.
82
80
  .SH AUTHORS
83
- Sup was originally written by William Morgan <wmorgan-sup@masanjin.net>
84
- and is now developed and maintained by the Sup developers.
81
+ Sup was originally written by William Morgan \c
82
+ .MT wmorgan-sup@masanjin.net
83
+ .ME \c
84
+ \ and is now developed and maintained by the Sup developers.