sup 0.14.1.1 → 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CONTRIBUTORS +14 -11
- data/History.txt +44 -0
- data/README.md +9 -4
- data/ReleaseNotes +8 -0
- data/bin/sup +1 -0
- data/bin/sup-add +2 -1
- data/bin/sup-config +3 -0
- data/bin/sup-sync-back-maildir +127 -0
- data/bin/{sup-sync-back → sup-sync-back-mbox} +3 -3
- data/lib/sup.rb +75 -3
- data/lib/sup/index.rb +54 -16
- data/lib/sup/label.rb +2 -2
- data/lib/sup/maildir.rb +120 -47
- data/lib/sup/mbox.rb +1 -1
- data/lib/sup/message.rb +65 -2
- data/lib/sup/modes/edit_message_mode.rb +16 -8
- data/lib/sup/modes/forward_mode.rb +13 -4
- data/lib/sup/modes/reply_mode.rb +6 -0
- data/lib/sup/modes/search_list_mode.rb +12 -0
- data/lib/sup/modes/thread_index_mode.rb +30 -0
- data/lib/sup/modes/thread_view_mode.rb +15 -5
- data/lib/sup/poll.rb +62 -17
- data/lib/sup/search.rb +18 -0
- data/lib/sup/sent.rb +1 -1
- data/lib/sup/source.rb +32 -4
- data/lib/sup/thread.rb +6 -0
- data/lib/sup/util.rb +12 -2
- data/lib/sup/util/query.rb +5 -2
- data/lib/sup/version.rb +1 -1
- metadata +17 -16
data/CONTRIBUTORS
CHANGED
@@ -3,7 +3,9 @@ Rich Lane <rlane at the club.cc.cmu dot edus>
|
|
3
3
|
Gaute Hope <eg at the gaute.vetsj dot coms>
|
4
4
|
Whyme Lyu <callme5long at the gmail dot coms>
|
5
5
|
Hamish Downer <dmishd at the gmail dot coms>
|
6
|
+
Damien Leone <damien.leone at the fensalir dot frs>
|
6
7
|
Sascha Silbe <sascha-pgp at the silbe dot orgs>
|
8
|
+
Eric Weikl <eric.weikl at the gmx dot nets>
|
7
9
|
Ismo Puustinen <ismo at the iki dot fis>
|
8
10
|
Nicolas Pouillard <nicolas.pouillard at the gmail dot coms>
|
9
11
|
Michael Stapelberg <michael at the stapelberg dot des>
|
@@ -15,28 +17,27 @@ Clint Byrum <clint at the ubuntu dot coms>
|
|
15
17
|
Marcus Williams <marcus-sup at the bar-coded dot nets>
|
16
18
|
Lionel Ott <white.magic at the gmx dot des>
|
17
19
|
Gaudenz Steinlin <gaudenz at the soziologie dot chs>
|
18
|
-
Damien Leone <damien.leone at the fensalir dot frs>
|
19
20
|
Ingmar Vanhassel <ingmar at the exherbo dot orgs>
|
20
21
|
Mark Alexander <marka at the pobox dot coms>
|
21
|
-
|
22
|
+
Edward Z. Yang <ezyang at the mit dot edus>
|
23
|
+
Matthieu Rakotojaona <matthieu.rakotojaona at the gmail dot coms>
|
22
24
|
Christopher Warrington <chrisw at the rice dot edus>
|
23
25
|
W. Trevor King <wking at the drexel dot edus>
|
24
26
|
Richard Brown <rbrown at the exherbo dot orgs>
|
25
27
|
Anthony Martinez <pi+sup at the pihost dot uss>
|
26
28
|
Marc Hartstein <marc.hartstein at the alum.vassar dot edus>
|
27
29
|
Israel Herraiz <israel.herraiz at the gmail dot coms>
|
28
|
-
Matthieu Rakotojaona <matthieu.rakotojaona at the gmail dot coms>
|
29
30
|
Bo Borgerson <gigabo at the gmail dot coms>
|
30
31
|
Michael Hamann <michael at the content-space dot des>
|
31
|
-
Jonathan Lassoff <jof at the thejof dot coms>
|
32
32
|
William Erik Baxter <web at the superscript dot coms>
|
33
|
+
Jonathan Lassoff <jof at the thejof dot coms>
|
33
34
|
Grant Hollingworth <grant at the antiflux dot orgs>
|
35
|
+
Adeodato Simó <dato at the net.com.org dot ess>
|
34
36
|
Ico Doornekamp <ico at the pruts dot nls>
|
35
37
|
Markus Klinik <markus.klinik at the gmx dot des>
|
36
|
-
Adeodato Simó <dato at the net.com.org dot ess>
|
37
38
|
Daniel Schoepe <daniel.schoepe at the googlemail dot coms>
|
39
|
+
James Taylor <james at the jamestaylor dot orgs>
|
38
40
|
Jason Petsod <jason at the petsod dot orgs>
|
39
|
-
Edward Z. Yang <edwardzyang at the thewritingpot dot coms>
|
40
41
|
Steve Goldman <sgoldman at the tower-research dot coms>
|
41
42
|
Robin Burchell <viroteck at the viroteck dot nets>
|
42
43
|
Peter Harkins <ph at the malaprop dot orgs>
|
@@ -44,25 +45,27 @@ Decklin Foster <decklin at the red-bean dot coms>
|
|
44
45
|
Cameron Matheson <cam+sup at the cammunism dot orgs>
|
45
46
|
Carl Worth <cworth at the cworth dot orgs>
|
46
47
|
Alex Vandiver <alex at the chmrr dot nets>
|
47
|
-
Jeff Balogh <its.jeff.balogh at the gmail dot coms>
|
48
48
|
Andrew Pimlott <andrew at the pimlott dot nets>
|
49
|
+
Jeff Balogh <its.jeff.balogh at the gmail dot coms>
|
49
50
|
Matías Aguirre <matiasaguirre at the gmail dot coms>
|
50
51
|
Kornilios Kourtis <kkourt at the cslab.ece.ntua dot grs>
|
51
|
-
Kevin Riggle <kevinr at the free-dissociation dot coms>
|
52
52
|
Giorgio Lando <patroclo7 at the gmail dot coms>
|
53
|
+
Kevin Riggle <kevinr at the free-dissociation dot coms>
|
53
54
|
Benoît PIERRE <benoit.pierre at the gmail dot coms>
|
54
55
|
Alvaro Herrera <alvherre at the alvh.no-ip dot orgs>
|
55
56
|
Steven Lawrance <stl at the koffein dot nets>
|
56
57
|
Jonah <Jonah at the GoodCoffee dot cas>
|
57
58
|
ian <itaylor at the uark dot edus>
|
58
59
|
Adam Lloyd <adam at the alloy-d dot nets>
|
59
|
-
Todd Eisenberger <teisenbe at the andrew.cmu dot edus>
|
60
60
|
Gregor Hoffleit <gregor at the sam.mediasupervision dot des>
|
61
|
-
|
61
|
+
0xACE <0xACE at the users.noreply.github dot coms>
|
62
62
|
Per Andersson <avtobiff at the gmail dot coms>
|
63
|
+
MichaelRevell <mikearevell at the gmail dot coms>
|
64
|
+
Todd Eisenberger <teisenbe at the andrew.cmu dot edus>
|
63
65
|
Steven Walter <swalter at the monarch.(none)>
|
64
66
|
Matthias Vallentin <vallentin at the icir dot orgs>
|
67
|
+
akojo <atte.kojo at the gmail dot coms>
|
65
68
|
Jon M. Dugan <jdugan at the es dot nets>
|
66
|
-
Stefan Lundström <lundst at the snabb.(none)>
|
67
69
|
Horacio Sanson <horacio at the skillupjapan.co dot jps>
|
70
|
+
Stefan Lundström <lundst at the snabb.(none)>
|
68
71
|
Kirill Smelkov <kirr at the landau.phys.spbu dot rus>
|
data/History.txt
CHANGED
@@ -1,3 +1,47 @@
|
|
1
|
+
== 0.15.0 / 2013-11-07
|
2
|
+
|
3
|
+
* Maildir Syncback has now been merged into main sup! This is a
|
4
|
+
long-time waiting feature initially developed by Damien Leone,
|
5
|
+
then picked up by Edward Z. Yang who continued development. Additionally
|
6
|
+
several others have been contributing.
|
7
|
+
|
8
|
+
Eventually, recently, Eric Weikl has picked up this branch, modernized
|
9
|
+
it to current sup, maintained it and gotten it ready for release.
|
10
|
+
|
11
|
+
Main authors:
|
12
|
+
|
13
|
+
Damien Leone
|
14
|
+
Edward Z. Yang
|
15
|
+
Eric Weikl
|
16
|
+
|
17
|
+
Not all of the features initially proposed have been included. This is
|
18
|
+
to maintain compatibility with more operating systems and wait with
|
19
|
+
the more daring features to make sure sup is stable-ish.
|
20
|
+
|
21
|
+
This is a big change since sup now can modify your mail (!), please
|
22
|
+
back up your mail and your configuration before using the maildir
|
23
|
+
syncback feature. For instructions on how to migrate an existing
|
24
|
+
maildir source or how to set up a new one, refer to the wiki:
|
25
|
+
|
26
|
+
https://github.com/sup-heliotrope/sup/wiki/Using-sup-with-other-clients
|
27
|
+
|
28
|
+
It is possible to both disable maildir syncback globally (default:
|
29
|
+
disabled) and per-source (default: enabled).
|
30
|
+
|
31
|
+
* Sup on Ruby 2.0.0 now works - but beware, this has not been very throughly
|
32
|
+
tested. Patches are welcome.
|
33
|
+
|
34
|
+
* We are now using our own rmail-sup gem with fixes for Ruby 2.0.0 and
|
35
|
+
various warnings fixed.
|
36
|
+
|
37
|
+
* sup-sync-back has been renamed to sup-sync-back-mbox to conform with
|
38
|
+
the other sync-back scripts.
|
39
|
+
|
40
|
+
* You can now save attachments to directories without specifying the full
|
41
|
+
filename (default filename is used).
|
42
|
+
|
43
|
+
* Various encoding fixes and minor bug fixes
|
44
|
+
|
1
45
|
== 0.14.1.1 / 2013-10-29
|
2
46
|
|
3
47
|
* SBU1: security release
|
data/README.md
CHANGED
@@ -18,12 +18,16 @@ Features:
|
|
18
18
|
* [Ruby-programmable hooks][hooks]
|
19
19
|
* Automatically tracking recent contacts
|
20
20
|
|
21
|
-
Current limitations
|
21
|
+
Current limitations:
|
22
22
|
|
23
|
-
* [
|
23
|
+
* [Ruby 2.0 support][ruby20] is very fresh, consider it experimental. Patches
|
24
|
+
are welcome
|
24
25
|
|
25
|
-
* Sup
|
26
|
-
synced back to mail source.
|
26
|
+
* Sup does in general not play nicely with other mail clients, not all
|
27
|
+
changes can be synced back to the mail source. Refer to [Maildir Syncback][maildir-syncback]
|
28
|
+
in the wiki for this recently included feature. Maildir Syncback
|
29
|
+
allows you to sync back flag changes in messages and to write messages
|
30
|
+
to maildir sources.
|
27
31
|
|
28
32
|
* Unix-centrism in MIME attachment handling and in sendmail invocation.
|
29
33
|
|
@@ -68,3 +72,4 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
68
72
|
[ruby20]: https://github.com/sup-heliotrope/sup/wiki/Development#sup-014
|
69
73
|
[sup-talk]: http://rubyforge.org/mailman/listinfo/sup-talk
|
70
74
|
[sup-devel]: http://rubyforge.org/mailman/listinfo/sup-devel
|
75
|
+
[maildir-syncback]: https://github.com/sup-heliotrope/sup/wiki/Using-sup-with-other-clients
|
data/ReleaseNotes
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
Release 0.15.0:
|
2
|
+
|
3
|
+
Maildir Syncback has been included. Refer to the wiki for more information on
|
4
|
+
how to set it up.
|
5
|
+
|
6
|
+
sup-sync-back has been moved to sup-sync-back-mbox, please make sure
|
7
|
+
you make any needed changes.
|
8
|
+
|
1
9
|
Release 0.14.1.1:
|
2
10
|
|
3
11
|
See 0.13.2.1.
|
data/bin/sup
CHANGED
data/bin/sup-add
CHANGED
@@ -30,6 +30,7 @@ Options are:
|
|
30
30
|
EOS
|
31
31
|
opt :archive, "Automatically archive all new messages from these sources."
|
32
32
|
opt :unusual, "Do not automatically poll these sources for new messages."
|
33
|
+
opt :sync_back, "Synchronize status flags back into messages, defaults to true (Maildir sources only).", :default => true
|
33
34
|
opt :labels, "A comma-separated set of labels to apply to all messages from this source", :type => String
|
34
35
|
opt :force_new, "Create a new account for this source, even if one already exists."
|
35
36
|
opt :force_account, "Reuse previously defined account user@hostname.", :type => String
|
@@ -99,7 +100,7 @@ begin
|
|
99
100
|
source =
|
100
101
|
case parsed_uri.scheme
|
101
102
|
when "maildir"
|
102
|
-
Redwood::Maildir.new uri, !$opts[:unusual], $opts[:archive], nil, labels
|
103
|
+
Redwood::Maildir.new uri, !$opts[:unusual], $opts[:archive], $opts[:sync_back], nil, labels
|
103
104
|
when "mbox"
|
104
105
|
Redwood::MBox.new uri, !$opts[:unusual], $opts[:archive], nil, labels
|
105
106
|
when nil
|
data/bin/sup-config
CHANGED
@@ -88,6 +88,8 @@ def add_source
|
|
88
88
|
usual = axe_yes "Does this source ever receive new messages?", "y"
|
89
89
|
archive = usual ? axe_yes("Should new messages be automatically archived? (I.e. not appear in your inbox, though still be accessible via search.)") : false
|
90
90
|
|
91
|
+
sync_back = (type == :maildir) ? axe_yes("Should the original Maildir messages be modified to reflect changes like read status, starred messages, etc.?", "y") : false
|
92
|
+
|
91
93
|
labels_str = axe("Enter any labels to be automatically added to all messages from this source, separated by spaces (or 'none')", default_labels.join(","))
|
92
94
|
|
93
95
|
labels = if labels_str =~ /^\s*none\s*$/i
|
@@ -99,6 +101,7 @@ def add_source
|
|
99
101
|
cmd = build_cmd "sup-add"
|
100
102
|
cmd += " --unusual" unless usual
|
101
103
|
cmd += " --archive" if archive
|
104
|
+
cmd += " --no-sync-back" unless sync_back
|
102
105
|
cmd += " --labels=#{labels.join(',')}" if labels && !labels.empty?
|
103
106
|
cmd += " #{uri}"
|
104
107
|
|
@@ -0,0 +1,127 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# encoding: utf-8
|
3
|
+
|
4
|
+
$:.unshift File.join(File.dirname(__FILE__), *%w[.. lib])
|
5
|
+
|
6
|
+
require 'rubygems'
|
7
|
+
require 'trollop'
|
8
|
+
require "sup"
|
9
|
+
|
10
|
+
opts = Trollop::options do
|
11
|
+
version "sup-sync-back-maildir (sup #{Redwood::VERSION})"
|
12
|
+
banner <<EOS
|
13
|
+
Export Xapian entries to Maildir sources on disk.
|
14
|
+
|
15
|
+
This script parses the Xapian entries for a given Maildir source and renames
|
16
|
+
(changes maildir flags) e-mail files on disk according to the labels stored in
|
17
|
+
the index. It will export all the changes you made in Sup to your
|
18
|
+
Maildirs so that they can be propagated to your IMAP server with e.g. offlineimap.
|
19
|
+
|
20
|
+
The script also merges some Maildir flags into Sup such
|
21
|
+
as R (replied) and P (passed, forwarded), for instance suppose you
|
22
|
+
have an e-mail file like this: foo_bar:2,FRS (flags are favorite,
|
23
|
+
replied, seen) and its Xapian entry has labels 'starred', the merge
|
24
|
+
operation will add the 'replied' label to the Xapian entry.
|
25
|
+
|
26
|
+
If you choose not to merge (-m) you will lose information ('replied'), and in
|
27
|
+
the previous example the file will be renamed to foo_bar:2,FS.
|
28
|
+
|
29
|
+
Running this script is *strongly* recommended when setting the
|
30
|
+
"sync_back_to_maildir" option from false to true in config.yaml or changing the
|
31
|
+
"sync_back" flag to true for a source in sources.yaml.
|
32
|
+
|
33
|
+
Usage:
|
34
|
+
sup-sync-back-maildir [options] <source>*
|
35
|
+
|
36
|
+
where <source>* is source URIs. If no source is given, the default behavior is
|
37
|
+
to sync back all Maildir sources marked as usual and that have not disabled
|
38
|
+
sync back using the configuration parameter sync_back = false in sources.yaml.
|
39
|
+
|
40
|
+
Options include:
|
41
|
+
EOS
|
42
|
+
opt :no_confirm, "Don't ask for confirmation before synchronizing", :default => false, :short => "n"
|
43
|
+
opt :no_merge, "Don't merge new supported Maildir flags (R and P)", :default => false, :short => "m"
|
44
|
+
opt :list_sources, "List your Maildir sources and exit", :default => false, :short => "l"
|
45
|
+
opt :unusual_sources_too, "Sync unusual sources too if no specific source information is given", :default => false, :short => "u"
|
46
|
+
end
|
47
|
+
|
48
|
+
def die msg
|
49
|
+
$stderr.puts "Error: #{msg}"
|
50
|
+
exit(-1)
|
51
|
+
end
|
52
|
+
|
53
|
+
Redwood::start true
|
54
|
+
index = Redwood::Index.init
|
55
|
+
index.lock_interactively or exit
|
56
|
+
index.load
|
57
|
+
|
58
|
+
## Force sync_back_to_maildir option otherwise nothing will happen
|
59
|
+
$config[:sync_back_to_maildir] = true
|
60
|
+
|
61
|
+
begin
|
62
|
+
sync_performed = []
|
63
|
+
sync_performed = File.readlines(Redwood::SYNC_OK_FN).collect { |e| e.strip }.find_all { |e| not e.empty? } if File.exists? Redwood::SYNC_OK_FN
|
64
|
+
sources = []
|
65
|
+
|
66
|
+
## Try to find out sources given in parameters
|
67
|
+
sources = ARGV.map do |uri|
|
68
|
+
s = Redwood::SourceManager.source_for(uri) or die "unknown source: #{uri}. Did you add it with sup-add first?"
|
69
|
+
s.is_a?(Redwood::Maildir) or die "#{uri} is not a Maildir source."
|
70
|
+
s.sync_back_enabled? or die "#{uri} has disabled sync back - check your configuration."
|
71
|
+
s
|
72
|
+
end unless opts[:list_sources]
|
73
|
+
|
74
|
+
## Otherwise, check all sources in sources.yaml
|
75
|
+
if sources.empty? or opts[:list_sources] == true
|
76
|
+
if opts[:unusual_sources_too]
|
77
|
+
sources = Redwood::SourceManager.sources.select do |s|
|
78
|
+
s.is_a? Redwood::Maildir and s.sync_back_enabled?
|
79
|
+
end
|
80
|
+
else
|
81
|
+
sources = Redwood::SourceManager.usual_sources.select do |s|
|
82
|
+
s.is_a? Redwood::Maildir and s.sync_back_enabled?
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
if opts[:list_sources] == true
|
88
|
+
sources.each do |s|
|
89
|
+
puts "id: #{s.id}, uri: #{s.uri}"
|
90
|
+
end
|
91
|
+
else
|
92
|
+
sources.each do |s|
|
93
|
+
if opts[:no_confirm] == false
|
94
|
+
print "Are you sure you want to synchronize '#{s.uri}'? (Y/n) "
|
95
|
+
next if STDIN.gets.chomp.downcase == 'n'
|
96
|
+
end
|
97
|
+
|
98
|
+
infos = Enumerator.new(index, :each_source_info, s.id).to_a
|
99
|
+
counter = 0
|
100
|
+
infos.each do |info|
|
101
|
+
print "\rSynchronizing '#{s.uri}'... #{((counter += 1)/infos.size.to_f*100).to_i}%"
|
102
|
+
index.each_message({:location => [s.id, info]}, false) do |m|
|
103
|
+
if opts[:no_merge] == false
|
104
|
+
m.merge_labels_from_locations [:replied, :forwarded]
|
105
|
+
end
|
106
|
+
|
107
|
+
if Redwood::Index.message_joining_killed? m
|
108
|
+
m.labels += [:killed]
|
109
|
+
end
|
110
|
+
|
111
|
+
index.save_message m
|
112
|
+
end
|
113
|
+
end
|
114
|
+
print "\n"
|
115
|
+
sync_performed << s.uri
|
116
|
+
end
|
117
|
+
## Write a flag file to tell sup that the synchronization has been performed
|
118
|
+
File.open(Redwood::SYNC_OK_FN, 'w') {|f| f.write(sync_performed.join("\n")) }
|
119
|
+
end
|
120
|
+
rescue Exception => e
|
121
|
+
File.open("sup-exception-log.txt", "w") { |f| f.puts e.backtrace }
|
122
|
+
raise
|
123
|
+
ensure
|
124
|
+
index.save_index
|
125
|
+
Redwood::finish
|
126
|
+
index.unlock
|
127
|
+
end
|
@@ -24,7 +24,7 @@ def has_any_from_source_with_label? index, source, label
|
|
24
24
|
end
|
25
25
|
|
26
26
|
opts = Trollop::options do
|
27
|
-
version "sup-sync-back (sup #{Redwood::VERSION})"
|
27
|
+
version "sup-sync-back-mbox (sup #{Redwood::VERSION})"
|
28
28
|
banner <<EOS
|
29
29
|
Drop or move messages from Sup sources that are marked as deleted or
|
30
30
|
spam in the Sup index.
|
@@ -32,7 +32,7 @@ spam in the Sup index.
|
|
32
32
|
Currently only works with mbox sources.
|
33
33
|
|
34
34
|
Usage:
|
35
|
-
sup-sync-back [options] <source>*
|
35
|
+
sup-sync-back-mbox [options] <source>*
|
36
36
|
|
37
37
|
where <source>* is zero or more source URIs. If no sources are given,
|
38
38
|
sync back all usual sources.
|
@@ -112,7 +112,7 @@ EOS
|
|
112
112
|
source.reset!
|
113
113
|
num_dropped = num_moved = num_scanned = 0
|
114
114
|
|
115
|
-
out_fp = Tempfile.new "sup-sync-back-#{source.id}"
|
115
|
+
out_fp = Tempfile.new "sup-sync-back-mbox-#{source.id}"
|
116
116
|
Redwood::PollManager.each_message_from source do |m|
|
117
117
|
num_scanned += 1
|
118
118
|
|
data/lib/sup.rb
CHANGED
@@ -59,10 +59,12 @@ module Redwood
|
|
59
59
|
HOOK_DIR = File.join(BASE_DIR, "hooks")
|
60
60
|
SEARCH_FN = File.join(BASE_DIR, "searches.txt")
|
61
61
|
LOG_FN = File.join(BASE_DIR, "log")
|
62
|
+
SYNC_OK_FN = File.join(BASE_DIR, "sync-back-ok")
|
62
63
|
|
63
64
|
YAML_DOMAIN = "supmua.org"
|
64
65
|
LEGACY_YAML_DOMAIN = "masanjin.net"
|
65
66
|
YAML_DATE = "2006-10-01"
|
67
|
+
MAILDIR_SYNC_CHECK_SKIPPED = 'SKIPPED'
|
66
68
|
|
67
69
|
## record exceptions thrown in threads nicely
|
68
70
|
@exceptions = []
|
@@ -157,7 +159,7 @@ module Redwood
|
|
157
159
|
SourceManager SearchManager IdleManager).map { |x| Redwood.const_get x.to_sym }
|
158
160
|
end
|
159
161
|
|
160
|
-
def start
|
162
|
+
def start bypass_sync_check = false
|
161
163
|
managers.each { |x| fail "#{x} already instantiated" if x.instantiated? }
|
162
164
|
|
163
165
|
FileUtils.mkdir_p Redwood::BASE_DIR
|
@@ -173,6 +175,74 @@ module Redwood
|
|
173
175
|
Redwood::SearchManager.init Redwood::SEARCH_FN
|
174
176
|
|
175
177
|
managers.each { |x| x.init unless x.instantiated? }
|
178
|
+
|
179
|
+
return if bypass_sync_check
|
180
|
+
|
181
|
+
if $config[:sync_back_to_maildir]
|
182
|
+
if not File.exists? Redwood::SYNC_OK_FN
|
183
|
+
Redwood.warn_syncback <<EOS
|
184
|
+
It appears that the "sync_back_to_maildir" option has been changed
|
185
|
+
from false to true since the last execution of sup.
|
186
|
+
EOS
|
187
|
+
$stderr.puts <<EOS
|
188
|
+
|
189
|
+
Should I complain about this again? (Y/n)
|
190
|
+
EOS
|
191
|
+
File.open(Redwood::SYNC_OK_FN, 'w') {|f| f.write(Redwood::MAILDIR_SYNC_CHECK_SKIPPED) } if STDIN.gets.chomp.downcase == 'n'
|
192
|
+
end
|
193
|
+
elsif not $config[:sync_back_to_maildir] and File.exists? Redwood::SYNC_OK_FN
|
194
|
+
File.delete(Redwood::SYNC_OK_FN)
|
195
|
+
end
|
196
|
+
end
|
197
|
+
|
198
|
+
def check_syncback_settings
|
199
|
+
# don't check if syncback was never performed
|
200
|
+
return unless File.exists? Redwood::SYNC_OK_FN
|
201
|
+
active_sync_sources = File.readlines(Redwood::SYNC_OK_FN).collect { |e| e.strip }.find_all { |e| not e.empty? }
|
202
|
+
return if active_sync_sources.length == 1 and active_sync_sources[0] == Redwood::MAILDIR_SYNC_CHECK_SKIPPED
|
203
|
+
sources = SourceManager.sources
|
204
|
+
newly_synced = sources.select { |s| s.is_a? Maildir and s.sync_back_enabled? and not active_sync_sources.include? s.uri }
|
205
|
+
unless newly_synced.empty?
|
206
|
+
|
207
|
+
details =<<EOS
|
208
|
+
It appears that the option "sync_back" of the following source(s)
|
209
|
+
has been changed from false to true since the last execution of
|
210
|
+
sup:
|
211
|
+
|
212
|
+
EOS
|
213
|
+
newly_synced.each do |s|
|
214
|
+
details += "#{s} (usual: #{s.usual})\n"
|
215
|
+
end
|
216
|
+
|
217
|
+
Redwood.warn_syncback details
|
218
|
+
end
|
219
|
+
end
|
220
|
+
|
221
|
+
def self.warn_syncback details
|
222
|
+
$stderr.puts <<EOS
|
223
|
+
WARNING
|
224
|
+
-------
|
225
|
+
|
226
|
+
#{details}
|
227
|
+
|
228
|
+
It is *strongly* recommended that you run "sup-sync-back-maildir"
|
229
|
+
before continuing, otherwise you might lose changes you have made in sup
|
230
|
+
to your Xapian index.
|
231
|
+
|
232
|
+
This script should be run each time you change the
|
233
|
+
"sync_back_to_maildir" flag in config.yaml from false to true or
|
234
|
+
the "sync_back" flag is changed to true for a source in sources.yaml.
|
235
|
+
|
236
|
+
Please run "sup-sync-back-maildir -h" for more information and why this
|
237
|
+
is needed.
|
238
|
+
|
239
|
+
Note that if you have any sources that are not marked as 'ususal' in
|
240
|
+
sources.yaml you need to manually specify them when running the
|
241
|
+
sup-sync-back-maildir script.
|
242
|
+
|
243
|
+
Are you really sure you want to continue? (y/N)
|
244
|
+
EOS
|
245
|
+
abort "Aborted" unless STDIN.gets.chomp.downcase == 'y'
|
176
246
|
end
|
177
247
|
|
178
248
|
def finish
|
@@ -262,7 +332,8 @@ EOM
|
|
262
332
|
:wrap_width => 0,
|
263
333
|
:slip_rows => 0,
|
264
334
|
:col_jump => 2,
|
265
|
-
:stem_language => "english"
|
335
|
+
:stem_language => "english",
|
336
|
+
:sync_back_to_maildir => false
|
266
337
|
}
|
267
338
|
if File.exists? filename
|
268
339
|
config = Redwood::load_yaml_obj filename
|
@@ -303,7 +374,8 @@ EOM
|
|
303
374
|
end
|
304
375
|
|
305
376
|
module_function :save_yaml_obj, :load_yaml_obj, :start, :finish,
|
306
|
-
:report_broken_sources, :load_config, :managers
|
377
|
+
:report_broken_sources, :load_config, :managers,
|
378
|
+
:check_syncback_settings
|
307
379
|
end
|
308
380
|
|
309
381
|
require 'sup/version'
|