sup 1.1 → 1.2
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/.github/workflows/checks.yml +27 -39
- data/CONTRIBUTORS +3 -1
- data/History.txt +16 -3
- data/Manifest.txt +22 -0
- data/README.md +0 -1
- data/bin/sup-sync-back-maildir +1 -1
- data/contrib/nix/Gemfile +22 -0
- data/contrib/nix/Gemfile.lock +80 -0
- data/contrib/nix/README +7 -0
- data/contrib/nix/gem-install-shell.nix +12 -0
- data/contrib/nix/gemset.nix +339 -0
- data/contrib/nix/ruby2.4-Gemfile.lock +81 -0
- data/contrib/nix/ruby2.4-gemset.nix +309 -0
- data/contrib/nix/ruby2.4-shell.nix +30 -0
- data/contrib/nix/ruby2.5-Gemfile.lock +81 -0
- data/contrib/nix/ruby2.5-gemset.nix +309 -0
- data/contrib/nix/ruby2.5-shell.nix +30 -0
- data/contrib/nix/ruby2.6-Gemfile.lock +83 -0
- data/contrib/nix/ruby2.6-gemset.nix +319 -0
- data/contrib/nix/ruby2.6-shell.nix +30 -0
- data/contrib/nix/ruby2.7-shell.nix +23 -0
- data/contrib/nix/ruby3.0-shell.nix +23 -0
- data/contrib/nix/ruby3.1-shell.nix +23 -0
- data/contrib/nix/ruby3.2-shell.nix +23 -0
- data/contrib/nix/ruby3.3-shell.nix +23 -0
- data/contrib/nix/test-all-rubies.sh +6 -0
- data/doc/Hooks.txt +1 -1
- data/ext/mkrf_conf_xapian.rb +2 -2
- data/lib/sup/crypto.rb +1 -1
- data/lib/sup/index.rb +2 -2
- data/lib/sup/maildir.rb +1 -1
- data/lib/sup/mbox.rb +1 -1
- data/lib/sup/message.rb +2 -2
- data/lib/sup/modes/console_mode.rb +1 -1
- data/lib/sup/thread.rb +20 -20
- data/lib/sup/util.rb +3 -5
- data/lib/sup/version.rb +1 -1
- data/man/sup-add.1 +27 -27
- data/man/sup-config.1 +23 -19
- data/man/sup-dump.1 +28 -29
- data/man/sup-import-dump.1 +24 -20
- data/man/sup-psych-ify-config-files.1 +23 -19
- data/man/sup-recover-sources.1 +23 -19
- data/man/sup-sync-back-maildir.1 +23 -19
- data/man/sup-sync.1 +23 -19
- data/man/sup-tweak-labels.1 +23 -19
- data/man/sup.1 +23 -19
- data/shell.nix +1 -0
- data/test/integration/test_maildir.rb +3 -0
- data/test/integration/test_mbox.rb +3 -0
- data/test/integration/test_sup-sync-back-maildir.rb +40 -0
- data/test/test_header_parsing.rb +2 -2
- metadata +26 -3
|
@@ -0,0 +1,319 @@
|
|
|
1
|
+
{
|
|
2
|
+
ast = {
|
|
3
|
+
groups = ["default"];
|
|
4
|
+
platforms = [];
|
|
5
|
+
source = {
|
|
6
|
+
remotes = ["https://rubygems.org"];
|
|
7
|
+
sha256 = "04nc8x27hlzlrr5c2gn7mar4vdr0apw5xg22wp6m8dx3wqr04a0y";
|
|
8
|
+
type = "gem";
|
|
9
|
+
};
|
|
10
|
+
version = "2.4.2";
|
|
11
|
+
};
|
|
12
|
+
chronic = {
|
|
13
|
+
groups = ["default"];
|
|
14
|
+
platforms = [];
|
|
15
|
+
source = {
|
|
16
|
+
remotes = ["https://rubygems.org"];
|
|
17
|
+
sha256 = "1hrdkn4g8x7dlzxwb1rfgr8kw3bp4ywg5l4y4i9c2g5cwv62yvvn";
|
|
18
|
+
type = "gem";
|
|
19
|
+
};
|
|
20
|
+
version = "0.10.2";
|
|
21
|
+
};
|
|
22
|
+
coderay = {
|
|
23
|
+
groups = ["default"];
|
|
24
|
+
platforms = [];
|
|
25
|
+
source = {
|
|
26
|
+
remotes = ["https://rubygems.org"];
|
|
27
|
+
sha256 = "0jvxqxzply1lwp7ysn94zjhh57vc14mcshw1ygw14ib8lhc00lyw";
|
|
28
|
+
type = "gem";
|
|
29
|
+
};
|
|
30
|
+
version = "1.1.3";
|
|
31
|
+
};
|
|
32
|
+
gpgme = {
|
|
33
|
+
dependencies = ["mini_portile2"];
|
|
34
|
+
groups = ["default"];
|
|
35
|
+
platforms = [];
|
|
36
|
+
source = {
|
|
37
|
+
remotes = ["https://rubygems.org"];
|
|
38
|
+
sha256 = "010wr6nnifi952bx4v5c49q25yx1g8lhib5wiv2sg7bip3yvlyy8";
|
|
39
|
+
type = "gem";
|
|
40
|
+
};
|
|
41
|
+
version = "2.0.23";
|
|
42
|
+
};
|
|
43
|
+
highline = {
|
|
44
|
+
groups = ["default"];
|
|
45
|
+
platforms = [];
|
|
46
|
+
source = {
|
|
47
|
+
remotes = ["https://rubygems.org"];
|
|
48
|
+
sha256 = "0yclf57n2j3cw8144ania99h1zinf8q3f5zrhqa754j6gl95rp9d";
|
|
49
|
+
type = "gem";
|
|
50
|
+
};
|
|
51
|
+
version = "2.0.3";
|
|
52
|
+
};
|
|
53
|
+
json = {
|
|
54
|
+
groups = ["default"];
|
|
55
|
+
platforms = [];
|
|
56
|
+
source = {
|
|
57
|
+
remotes = ["https://rubygems.org"];
|
|
58
|
+
sha256 = "0yk5d10yvspkc5jyvx9gc1a9pn1z8v4k2hvjk1l88zixwf3wf3cl";
|
|
59
|
+
type = "gem";
|
|
60
|
+
};
|
|
61
|
+
version = "2.6.2";
|
|
62
|
+
};
|
|
63
|
+
locale = {
|
|
64
|
+
groups = ["default"];
|
|
65
|
+
platforms = [];
|
|
66
|
+
source = {
|
|
67
|
+
remotes = ["https://rubygems.org"];
|
|
68
|
+
sha256 = "0997465kxvpxm92fiwc2b16l49mngk7b68g5k35ify0m3q0yxpdn";
|
|
69
|
+
type = "gem";
|
|
70
|
+
};
|
|
71
|
+
version = "2.1.3";
|
|
72
|
+
};
|
|
73
|
+
lockfile = {
|
|
74
|
+
groups = ["default"];
|
|
75
|
+
platforms = [];
|
|
76
|
+
source = {
|
|
77
|
+
remotes = ["https://rubygems.org"];
|
|
78
|
+
sha256 = "0dij3ijywylvfgrpi2i0k17f6w0wjhnjjw0k9030f54z56cz7jrr";
|
|
79
|
+
type = "gem";
|
|
80
|
+
};
|
|
81
|
+
version = "2.1.3";
|
|
82
|
+
};
|
|
83
|
+
method_source = {
|
|
84
|
+
groups = ["default"];
|
|
85
|
+
platforms = [];
|
|
86
|
+
source = {
|
|
87
|
+
remotes = ["https://rubygems.org"];
|
|
88
|
+
sha256 = "1pnyh44qycnf9mzi1j6fywd5fkskv3x7nmsqrrws0rjn5dd4ayfp";
|
|
89
|
+
type = "gem";
|
|
90
|
+
};
|
|
91
|
+
version = "1.0.0";
|
|
92
|
+
};
|
|
93
|
+
mime-types = {
|
|
94
|
+
dependencies = ["mime-types-data"];
|
|
95
|
+
groups = ["default"];
|
|
96
|
+
platforms = [];
|
|
97
|
+
source = {
|
|
98
|
+
remotes = ["https://rubygems.org"];
|
|
99
|
+
sha256 = "0ipw892jbksbxxcrlx9g5ljq60qx47pm24ywgfbyjskbcl78pkvb";
|
|
100
|
+
type = "gem";
|
|
101
|
+
};
|
|
102
|
+
version = "3.4.1";
|
|
103
|
+
};
|
|
104
|
+
mime-types-data = {
|
|
105
|
+
groups = ["default"];
|
|
106
|
+
platforms = [];
|
|
107
|
+
source = {
|
|
108
|
+
remotes = ["https://rubygems.org"];
|
|
109
|
+
sha256 = "003gd7mcay800k2q4pb2zn8lwwgci4bhi42v2jvlidm8ksx03i6q";
|
|
110
|
+
type = "gem";
|
|
111
|
+
};
|
|
112
|
+
version = "3.2022.0105";
|
|
113
|
+
};
|
|
114
|
+
mini_portile2 = {
|
|
115
|
+
groups = ["default"];
|
|
116
|
+
platforms = [];
|
|
117
|
+
source = {
|
|
118
|
+
remotes = ["https://rubygems.org"];
|
|
119
|
+
sha256 = "1kl9c3kdchjabrihdqfmcplk3lq4cw1rr9f378y6q22qwy5dndvs";
|
|
120
|
+
type = "gem";
|
|
121
|
+
};
|
|
122
|
+
version = "2.8.5";
|
|
123
|
+
};
|
|
124
|
+
minitest = {
|
|
125
|
+
groups = ["default"];
|
|
126
|
+
platforms = [];
|
|
127
|
+
source = {
|
|
128
|
+
remotes = ["https://rubygems.org"];
|
|
129
|
+
sha256 = "14a9ign0hj3z3j4cpfplj2djaskx3skzyx4fl3x53d7saxmhrgn1";
|
|
130
|
+
type = "gem";
|
|
131
|
+
};
|
|
132
|
+
version = "5.16.2";
|
|
133
|
+
};
|
|
134
|
+
ncursesw = {
|
|
135
|
+
groups = ["default"];
|
|
136
|
+
platforms = [];
|
|
137
|
+
source = {
|
|
138
|
+
remotes = ["https://rubygems.org"];
|
|
139
|
+
sha256 = "0qlfhp9b445g0qp9kkdiylfjlpfzrv6nqvry4ar6y0yacn0zr5y8";
|
|
140
|
+
type = "gem";
|
|
141
|
+
};
|
|
142
|
+
version = "1.4.11";
|
|
143
|
+
};
|
|
144
|
+
optimist = {
|
|
145
|
+
groups = ["default"];
|
|
146
|
+
platforms = [];
|
|
147
|
+
source = {
|
|
148
|
+
remotes = ["https://rubygems.org"];
|
|
149
|
+
sha256 = "1vg2chy1cfmdj6c1gryl8zvjhhmb3plwgyh1jfnpq4fnfqv7asrk";
|
|
150
|
+
type = "gem";
|
|
151
|
+
};
|
|
152
|
+
version = "3.0.1";
|
|
153
|
+
};
|
|
154
|
+
parallel = {
|
|
155
|
+
groups = ["default"];
|
|
156
|
+
platforms = [];
|
|
157
|
+
source = {
|
|
158
|
+
remotes = ["https://rubygems.org"];
|
|
159
|
+
sha256 = "07vnk6bb54k4yc06xnwck7php50l09vvlw1ga8wdz0pia461zpzb";
|
|
160
|
+
type = "gem";
|
|
161
|
+
};
|
|
162
|
+
version = "1.22.1";
|
|
163
|
+
};
|
|
164
|
+
parser = {
|
|
165
|
+
dependencies = ["ast"];
|
|
166
|
+
groups = ["default"];
|
|
167
|
+
platforms = [];
|
|
168
|
+
source = {
|
|
169
|
+
remotes = ["https://rubygems.org"];
|
|
170
|
+
sha256 = "0xhfghgidj8cbdnqp01f7kvnrv1f60izpkd9dhxsvpdzkfsdg97d";
|
|
171
|
+
type = "gem";
|
|
172
|
+
};
|
|
173
|
+
version = "3.1.2.0";
|
|
174
|
+
};
|
|
175
|
+
pry = {
|
|
176
|
+
dependencies = ["coderay" "method_source"];
|
|
177
|
+
groups = ["default"];
|
|
178
|
+
platforms = [];
|
|
179
|
+
source = {
|
|
180
|
+
remotes = ["https://rubygems.org"];
|
|
181
|
+
sha256 = "0m445x8fwcjdyv2bc0glzss2nbm1ll51bq45knixapc7cl3dzdlr";
|
|
182
|
+
type = "gem";
|
|
183
|
+
};
|
|
184
|
+
version = "0.14.1";
|
|
185
|
+
};
|
|
186
|
+
rainbow = {
|
|
187
|
+
groups = ["default"];
|
|
188
|
+
platforms = [];
|
|
189
|
+
source = {
|
|
190
|
+
remotes = ["https://rubygems.org"];
|
|
191
|
+
sha256 = "0smwg4mii0fm38pyb5fddbmrdpifwv22zv3d3px2xx497am93503";
|
|
192
|
+
type = "gem";
|
|
193
|
+
};
|
|
194
|
+
version = "3.1.1";
|
|
195
|
+
};
|
|
196
|
+
rake = {
|
|
197
|
+
groups = ["default"];
|
|
198
|
+
platforms = [];
|
|
199
|
+
source = {
|
|
200
|
+
remotes = ["https://rubygems.org"];
|
|
201
|
+
sha256 = "15whn7p9nrkxangbs9hh75q585yfn66lv0v2mhj6q6dl6x8bzr2w";
|
|
202
|
+
type = "gem";
|
|
203
|
+
};
|
|
204
|
+
version = "13.0.6";
|
|
205
|
+
};
|
|
206
|
+
regexp_parser = {
|
|
207
|
+
groups = ["default"];
|
|
208
|
+
platforms = [];
|
|
209
|
+
source = {
|
|
210
|
+
remotes = ["https://rubygems.org"];
|
|
211
|
+
sha256 = "1rfd3q17p7q7pa67844q8b16ipy6ksh8mkzynpm1zldqbb9x4xm0";
|
|
212
|
+
type = "gem";
|
|
213
|
+
};
|
|
214
|
+
version = "2.5.0";
|
|
215
|
+
};
|
|
216
|
+
rexml = {
|
|
217
|
+
groups = ["default"];
|
|
218
|
+
platforms = [];
|
|
219
|
+
source = {
|
|
220
|
+
remotes = ["https://rubygems.org"];
|
|
221
|
+
sha256 = "08ximcyfjy94pm1rhcx04ny1vx2sk0x4y185gzn86yfsbzwkng53";
|
|
222
|
+
type = "gem";
|
|
223
|
+
};
|
|
224
|
+
version = "3.2.5";
|
|
225
|
+
};
|
|
226
|
+
rmail = {
|
|
227
|
+
groups = ["default"];
|
|
228
|
+
platforms = [];
|
|
229
|
+
source = {
|
|
230
|
+
remotes = ["https://rubygems.org"];
|
|
231
|
+
sha256 = "0m5npkmv764m725wzjzasgf3k8q5anf3vfr6k2cac1xj6jc8lcqi";
|
|
232
|
+
type = "gem";
|
|
233
|
+
};
|
|
234
|
+
version = "1.1.4";
|
|
235
|
+
};
|
|
236
|
+
rr = {
|
|
237
|
+
groups = ["default"];
|
|
238
|
+
platforms = [];
|
|
239
|
+
source = {
|
|
240
|
+
remotes = ["https://rubygems.org"];
|
|
241
|
+
sha256 = "1n9g78ba4c2zzmz8cdb97c38h1xm0clircag00vbcxwqs4dq0ymp";
|
|
242
|
+
type = "gem";
|
|
243
|
+
};
|
|
244
|
+
version = "1.2.1";
|
|
245
|
+
};
|
|
246
|
+
rubocop = {
|
|
247
|
+
dependencies = ["json" "parallel" "parser" "rainbow" "regexp_parser" "rexml" "rubocop-ast" "ruby-progressbar" "unicode-display_width"];
|
|
248
|
+
groups = ["default"];
|
|
249
|
+
platforms = [];
|
|
250
|
+
source = {
|
|
251
|
+
remotes = ["https://rubygems.org"];
|
|
252
|
+
sha256 = "09k371m1l177ca8w70hfbjb1w0hasfb46pxp4w6yw92kk71akll2";
|
|
253
|
+
type = "gem";
|
|
254
|
+
};
|
|
255
|
+
version = "1.32.0";
|
|
256
|
+
};
|
|
257
|
+
rubocop-ast = {
|
|
258
|
+
dependencies = ["parser"];
|
|
259
|
+
groups = ["default"];
|
|
260
|
+
platforms = [];
|
|
261
|
+
source = {
|
|
262
|
+
remotes = ["https://rubygems.org"];
|
|
263
|
+
sha256 = "0h8q3gwqs8afshjd2l52ywf48md9rskr3q2y4fydgm536vvahjgm";
|
|
264
|
+
type = "gem";
|
|
265
|
+
};
|
|
266
|
+
version = "1.19.1";
|
|
267
|
+
};
|
|
268
|
+
rubocop-packaging = {
|
|
269
|
+
dependencies = ["rubocop"];
|
|
270
|
+
groups = ["default"];
|
|
271
|
+
platforms = [];
|
|
272
|
+
source = {
|
|
273
|
+
remotes = ["https://rubygems.org"];
|
|
274
|
+
sha256 = "0bzjd1077v96pyp62jg7s8ndxqbdhfnrdpdnmgi7h88xw22fp5xf";
|
|
275
|
+
type = "gem";
|
|
276
|
+
};
|
|
277
|
+
version = "0.5.1";
|
|
278
|
+
};
|
|
279
|
+
ruby-progressbar = {
|
|
280
|
+
groups = ["default"];
|
|
281
|
+
platforms = [];
|
|
282
|
+
source = {
|
|
283
|
+
remotes = ["https://rubygems.org"];
|
|
284
|
+
sha256 = "02nmaw7yx9kl7rbaan5pl8x5nn0y4j5954mzrkzi9i3dhsrps4nc";
|
|
285
|
+
type = "gem";
|
|
286
|
+
};
|
|
287
|
+
version = "1.11.0";
|
|
288
|
+
};
|
|
289
|
+
unicode = {
|
|
290
|
+
groups = ["default"];
|
|
291
|
+
platforms = [];
|
|
292
|
+
source = {
|
|
293
|
+
remotes = ["https://rubygems.org"];
|
|
294
|
+
sha256 = "1v8kxmq9i85agjpl7pnl72688901xhs8wxhmj6lpy16a8xz3nzxk";
|
|
295
|
+
type = "gem";
|
|
296
|
+
};
|
|
297
|
+
version = "0.4.4.4";
|
|
298
|
+
};
|
|
299
|
+
unicode-display_width = {
|
|
300
|
+
groups = ["default"];
|
|
301
|
+
platforms = [];
|
|
302
|
+
source = {
|
|
303
|
+
remotes = ["https://rubygems.org"];
|
|
304
|
+
sha256 = "1nlfck6z986fngp0r74maswmyb1rcksc8xc3mfpw9cj23c3s8zwn";
|
|
305
|
+
type = "gem";
|
|
306
|
+
};
|
|
307
|
+
version = "2.2.0";
|
|
308
|
+
};
|
|
309
|
+
xapian-ruby = {
|
|
310
|
+
groups = ["default"];
|
|
311
|
+
platforms = [];
|
|
312
|
+
source = {
|
|
313
|
+
remotes = ["https://rubygems.org"];
|
|
314
|
+
sha256 = "1z8arjkd0nlj6zv9in2sihmbwpbd17a10lsv7nwii7z0jjscyxpp";
|
|
315
|
+
type = "gem";
|
|
316
|
+
};
|
|
317
|
+
version = "1.4.18";
|
|
318
|
+
};
|
|
319
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
let
|
|
2
|
+
pkgs = import (builtins.fetchGit {
|
|
3
|
+
url = "https://github.com/NixOS/nixpkgs";
|
|
4
|
+
ref = "refs/heads/master";
|
|
5
|
+
rev = "3ef1d2a9602c18f8742e1fb63d5ae9867092e3d6";
|
|
6
|
+
}) {};
|
|
7
|
+
gems = pkgs.bundlerEnv {
|
|
8
|
+
name = "ruby2.6-gems-for-sup";
|
|
9
|
+
ruby = pkgs.ruby_2_6;
|
|
10
|
+
gemfile = ./Gemfile;
|
|
11
|
+
lockfile = ./ruby2.6-Gemfile.lock;
|
|
12
|
+
gemset = ./ruby2.6-gemset.nix;
|
|
13
|
+
gemConfig = pkgs.defaultGemConfig // {
|
|
14
|
+
# Workaround for a new error in clang 16 (MacOS):
|
|
15
|
+
# https://github.com/blackwinter/unicode/pull/11
|
|
16
|
+
unicode = attrs: {
|
|
17
|
+
buildFlags = [
|
|
18
|
+
"--with-cflags=-Wno-incompatible-function-pointer-types"
|
|
19
|
+
];
|
|
20
|
+
};
|
|
21
|
+
# Workaround: remove rake from nativeBuildInputs, otherwise it causes
|
|
22
|
+
# xapian-bindings to build against the default Ruby version
|
|
23
|
+
# instead of our chosen version.
|
|
24
|
+
xapian-ruby = attrs: pkgs.defaultGemConfig.xapian-ruby attrs // {
|
|
25
|
+
dependencies = [ "rake" ];
|
|
26
|
+
nativeBuildInputs = [ pkgs.pkg-config ];
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
in pkgs.mkShell { packages = [ gems gems.wrappedRuby pkgs.pandoc ]; }
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
let
|
|
2
|
+
pkgs = import (builtins.fetchGit {
|
|
3
|
+
url = "https://github.com/NixOS/nixpkgs";
|
|
4
|
+
ref = "refs/heads/master";
|
|
5
|
+
rev = "402cc3633cc60dfc50378197305c984518b30773";
|
|
6
|
+
}) {};
|
|
7
|
+
gems = pkgs.bundlerEnv {
|
|
8
|
+
name = "ruby2.7-gems-for-sup";
|
|
9
|
+
ruby = pkgs.ruby_2_7;
|
|
10
|
+
gemfile = ./Gemfile;
|
|
11
|
+
lockfile = ./Gemfile.lock;
|
|
12
|
+
gemset = ./gemset.nix;
|
|
13
|
+
gemConfig = pkgs.defaultGemConfig // {
|
|
14
|
+
# Workaround for a new error in clang 16 (MacOS):
|
|
15
|
+
# https://github.com/blackwinter/unicode/pull/11
|
|
16
|
+
unicode = attrs: {
|
|
17
|
+
buildFlags = [
|
|
18
|
+
"--with-cflags=-Wno-incompatible-function-pointer-types"
|
|
19
|
+
];
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
in pkgs.mkShell { packages = [ gems gems.wrappedRuby pkgs.pandoc ]; }
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
let
|
|
2
|
+
pkgs = import (builtins.fetchGit {
|
|
3
|
+
url = "https://github.com/NixOS/nixpkgs";
|
|
4
|
+
ref = "refs/heads/master";
|
|
5
|
+
rev = "402cc3633cc60dfc50378197305c984518b30773";
|
|
6
|
+
}) {};
|
|
7
|
+
gems = pkgs.bundlerEnv {
|
|
8
|
+
name = "ruby3.0-gems-for-sup";
|
|
9
|
+
ruby = pkgs.ruby_3_0;
|
|
10
|
+
gemfile = ./Gemfile;
|
|
11
|
+
lockfile = ./Gemfile.lock;
|
|
12
|
+
gemset = ./gemset.nix;
|
|
13
|
+
gemConfig = pkgs.defaultGemConfig // {
|
|
14
|
+
# Workaround for a new error in clang 16 (MacOS):
|
|
15
|
+
# https://github.com/blackwinter/unicode/pull/11
|
|
16
|
+
unicode = attrs: {
|
|
17
|
+
buildFlags = [
|
|
18
|
+
"--with-cflags=-Wno-incompatible-function-pointer-types"
|
|
19
|
+
];
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
in pkgs.mkShell { packages = [ gems gems.wrappedRuby pkgs.pandoc ]; }
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
let
|
|
2
|
+
pkgs = import (builtins.fetchGit {
|
|
3
|
+
url = "https://github.com/NixOS/nixpkgs";
|
|
4
|
+
ref = "refs/heads/master";
|
|
5
|
+
rev = "0e2ba0d131331e318eba20fcb03db0372dc2a926";
|
|
6
|
+
}) {};
|
|
7
|
+
gems = pkgs.bundlerEnv {
|
|
8
|
+
name = "ruby3.1-gems-for-sup";
|
|
9
|
+
ruby = pkgs.ruby_3_1;
|
|
10
|
+
gemfile = ./Gemfile;
|
|
11
|
+
lockfile = ./Gemfile.lock;
|
|
12
|
+
gemset = ./gemset.nix;
|
|
13
|
+
gemConfig = pkgs.defaultGemConfig // {
|
|
14
|
+
# Workaround for a new error in clang 16 (MacOS):
|
|
15
|
+
# https://github.com/blackwinter/unicode/pull/11
|
|
16
|
+
unicode = attrs: {
|
|
17
|
+
buildFlags = [
|
|
18
|
+
"--with-cflags=-Wno-incompatible-function-pointer-types"
|
|
19
|
+
];
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
in pkgs.mkShell { packages = [ gems gems.wrappedRuby pkgs.pandoc ]; }
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
let
|
|
2
|
+
pkgs = import (builtins.fetchGit {
|
|
3
|
+
url = "https://github.com/NixOS/nixpkgs";
|
|
4
|
+
ref = "refs/heads/master";
|
|
5
|
+
rev = "0e2ba0d131331e318eba20fcb03db0372dc2a926";
|
|
6
|
+
}) {};
|
|
7
|
+
gems = pkgs.bundlerEnv {
|
|
8
|
+
name = "ruby3.2-gems-for-sup";
|
|
9
|
+
ruby = pkgs.ruby_3_2;
|
|
10
|
+
gemfile = ./Gemfile;
|
|
11
|
+
lockfile = ./Gemfile.lock;
|
|
12
|
+
gemset = ./gemset.nix;
|
|
13
|
+
gemConfig = pkgs.defaultGemConfig // {
|
|
14
|
+
# Workaround for a new error in clang 16 (MacOS):
|
|
15
|
+
# https://github.com/blackwinter/unicode/pull/11
|
|
16
|
+
unicode = attrs: {
|
|
17
|
+
buildFlags = [
|
|
18
|
+
"--with-cflags=-Wno-incompatible-function-pointer-types"
|
|
19
|
+
];
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
in pkgs.mkShell { packages = [ gems gems.wrappedRuby pkgs.pandoc ]; }
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
let
|
|
2
|
+
pkgs = import (builtins.fetchGit {
|
|
3
|
+
url = "https://github.com/NixOS/nixpkgs";
|
|
4
|
+
ref = "refs/heads/master";
|
|
5
|
+
rev = "0e2ba0d131331e318eba20fcb03db0372dc2a926";
|
|
6
|
+
}) {};
|
|
7
|
+
gems = pkgs.bundlerEnv {
|
|
8
|
+
name = "ruby3.3-gems-for-sup";
|
|
9
|
+
ruby = pkgs.ruby_3_3;
|
|
10
|
+
gemfile = ./Gemfile;
|
|
11
|
+
lockfile = ./Gemfile.lock;
|
|
12
|
+
gemset = ./gemset.nix;
|
|
13
|
+
gemConfig = pkgs.defaultGemConfig // {
|
|
14
|
+
# Workaround for a new error in clang 16 (MacOS):
|
|
15
|
+
# https://github.com/blackwinter/unicode/pull/11
|
|
16
|
+
unicode = attrs: {
|
|
17
|
+
buildFlags = [
|
|
18
|
+
"--with-cflags=-Wno-incompatible-function-pointer-types"
|
|
19
|
+
];
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
in pkgs.mkShell { packages = [ gems gems.wrappedRuby pkgs.pandoc ]; }
|
data/doc/Hooks.txt
CHANGED
|
@@ -69,7 +69,7 @@ startup:
|
|
|
69
69
|
set 'bgtask_pid' @bgtask_pid
|
|
70
70
|
Process.detach(@bgtask_pid) # so we don't have to wait on it when we go to kill it
|
|
71
71
|
else
|
|
72
|
-
exec "background-task args 2
|
|
72
|
+
exec "background-task args 2>&1 >> /tmp/logfile"
|
|
73
73
|
end
|
|
74
74
|
|
|
75
75
|
after-poll:
|
data/ext/mkrf_conf_xapian.rb
CHANGED
|
@@ -14,7 +14,7 @@ destination = File.writable?(Gem.dir) ? Gem.dir : Gem.user_dir
|
|
|
14
14
|
inst = Gem::DependencyInstaller.new(:install_dir => destination)
|
|
15
15
|
begin
|
|
16
16
|
|
|
17
|
-
if
|
|
17
|
+
if not ENV.include? "SUP_SKIP_XAPIAN_GEM_INSTALL"
|
|
18
18
|
# update version in Gemfile as well
|
|
19
19
|
name = "xapian-ruby"
|
|
20
20
|
version =
|
|
@@ -37,7 +37,7 @@ begin
|
|
|
37
37
|
|
|
38
38
|
end
|
|
39
39
|
else
|
|
40
|
-
STDERR.puts "xapian:
|
|
40
|
+
STDERR.puts "xapian: you have to install xapian-core and xapian-bindings manually"
|
|
41
41
|
end
|
|
42
42
|
|
|
43
43
|
rescue StandardError => e
|
data/lib/sup/crypto.rb
CHANGED
|
@@ -369,7 +369,7 @@ EOS
|
|
|
369
369
|
def retrieve fingerprint
|
|
370
370
|
require 'net/http'
|
|
371
371
|
uri = URI($config[:keyserver_url] || KEYSERVER_URL)
|
|
372
|
-
unless uri.scheme == "http" and not uri.host.nil?
|
|
372
|
+
unless uri.scheme == "http" and not uri.host.nil? and not uri.host.empty?
|
|
373
373
|
return "Invalid url: #{uri}"
|
|
374
374
|
end
|
|
375
375
|
|
data/lib/sup/index.rb
CHANGED
|
@@ -99,14 +99,14 @@ EOS
|
|
|
99
99
|
end
|
|
100
100
|
|
|
101
101
|
def load failsafe=false
|
|
102
|
-
SourceManager.load_sources
|
|
102
|
+
SourceManager.load_sources File.join(@dir, "sources.yaml")
|
|
103
103
|
load_index failsafe
|
|
104
104
|
end
|
|
105
105
|
|
|
106
106
|
def save
|
|
107
107
|
debug "saving index and sources..."
|
|
108
108
|
FileUtils.mkdir_p @dir unless File.exist? @dir
|
|
109
|
-
SourceManager.save_sources
|
|
109
|
+
SourceManager.save_sources File.join(@dir, "sources.yaml")
|
|
110
110
|
save_index
|
|
111
111
|
end
|
|
112
112
|
|
data/lib/sup/maildir.rb
CHANGED
|
@@ -23,7 +23,7 @@ class Maildir < Source
|
|
|
23
23
|
end
|
|
24
24
|
|
|
25
25
|
raise ArgumentError, "not a maildir URI" unless uri.scheme == "maildir"
|
|
26
|
-
raise ArgumentError, "maildir URI cannot have a host: #{uri.host}"
|
|
26
|
+
raise ArgumentError, "maildir URI cannot have a host: #{uri.host}" unless uri.host.nil? || uri.host.empty?
|
|
27
27
|
raise ArgumentError, "maildir URI must have a path component" unless uri.path
|
|
28
28
|
|
|
29
29
|
@sync_back = sync_back
|
data/lib/sup/mbox.rb
CHANGED
|
@@ -30,7 +30,7 @@ class MBox < Source
|
|
|
30
30
|
end
|
|
31
31
|
|
|
32
32
|
raise ArgumentError, "not an mbox uri" unless uri.scheme == "mbox"
|
|
33
|
-
raise ArgumentError, "mbox URI ('#{uri}') cannot have a host: #{uri.host}"
|
|
33
|
+
raise ArgumentError, "mbox URI ('#{uri}') cannot have a host: #{uri.host}" unless uri.host.nil? || uri.host.empty?
|
|
34
34
|
raise ArgumentError, "mbox URI must have a path component" unless uri.path
|
|
35
35
|
@f = nil
|
|
36
36
|
else
|
data/lib/sup/message.rb
CHANGED
|
@@ -271,7 +271,7 @@ class Message
|
|
|
271
271
|
message_to_chunks rmsg
|
|
272
272
|
rescue SourceError, SocketError, RMail::EncodingUnsupportedError => e
|
|
273
273
|
warn_with_location "problem reading message #{id}"
|
|
274
|
-
debug "could not load message
|
|
274
|
+
debug "could not load message, exception: #{e.inspect}"
|
|
275
275
|
|
|
276
276
|
[Chunk::Text.new(error_message.split("\n"))]
|
|
277
277
|
|
|
@@ -760,7 +760,7 @@ private
|
|
|
760
760
|
|
|
761
761
|
def warn_with_location msg
|
|
762
762
|
warn msg
|
|
763
|
-
warn "Message is in #{
|
|
763
|
+
warn "Message is in #{@locations}"
|
|
764
764
|
end
|
|
765
765
|
end
|
|
766
766
|
|
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,
|
|
90
|
-
def has_message?; any? { |m,
|
|
91
|
-
def dirty?; any? { |m,
|
|
92
|
-
def date; map { |m,
|
|
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,
|
|
95
|
-
first_unread, * = with_snippets.select { |m,
|
|
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,
|
|
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,
|
|
101
|
+
def authors; map { |m, *| m.from if m }.compact.uniq; end
|
|
102
102
|
|
|
103
|
-
def apply_label t; each { |m,
|
|
104
|
-
def remove_label t; each { |m,
|
|
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,
|
|
117
|
-
def has_label? t; any? { |m,
|
|
118
|
-
def each_dirty_message; each { |m,
|
|
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,
|
|
121
|
+
map { |m, *| [m.from] + m.to if m }.flatten.compact.uniq
|
|
122
122
|
end
|
|
123
123
|
|
|
124
124
|
def participants
|
|
125
|
-
map { |m,
|
|
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,
|
|
129
|
-
def subj; argfind { |m,
|
|
130
|
-
def labels; inject(Set.new) { |s, (m, *
|
|
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,
|
|
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,
|
|
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
|
|
@@ -315,11 +316,8 @@ class String
|
|
|
315
316
|
# first try to encode to utf-8 from whatever current encoding
|
|
316
317
|
encode!('UTF-8', :invalid => :replace, :undef => :replace)
|
|
317
318
|
|
|
318
|
-
#
|
|
319
|
-
|
|
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)
|
|
319
|
+
# ensure invalid chars are replaced
|
|
320
|
+
scrub!
|
|
323
321
|
|
|
324
322
|
fail "Could not create valid UTF-8 string out of: '#{self.to_s}'." unless valid_encoding?
|
|
325
323
|
|