sup 0.14.1.1 → 0.15.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -27,7 +27,7 @@ class SentManager
27
27
  def write_sent_message date, from_email, &block
28
28
  ::Thread.new do
29
29
  debug "store the sent message (locking sent source..)"
30
- @source.poll_lock.synchronize do
30
+ @source.synchronize do
31
31
  @source.store_message date, from_email, &block
32
32
  end
33
33
  PollManager.poll_from @source
@@ -1,4 +1,5 @@
1
1
  require "sup/rfc2047"
2
+ require "monitor"
2
3
 
3
4
  module Redwood
4
5
 
@@ -53,8 +54,8 @@ class Source
53
54
  ## Examples for you to look at: mbox.rb and maildir.rb.
54
55
 
55
56
  bool_accessor :usual, :archived
56
- attr_reader :uri
57
- attr_accessor :id, :poll_lock
57
+ attr_reader :uri, :usual
58
+ attr_accessor :id
58
59
 
59
60
  def initialize uri, usual=true, archived=false, id=nil
60
61
  raise ArgumentError, "id must be an integer: #{id.inspect}" unless id.is_a? Fixnum if id
@@ -64,10 +65,10 @@ class Source
64
65
  @archived = archived
65
66
  @id = id
66
67
 
67
- @poll_lock = Mutex.new
68
+ @poll_lock = Monitor.new
68
69
  end
69
70
 
70
- ## overwrite me if you have a disk incarnation (currently used only for sup-sync-back)
71
+ ## overwrite me if you have a disk incarnation (currently used only for sup-sync-back-mbox)
71
72
  def file_path; nil end
72
73
 
73
74
  def to_s; @uri.to_s; end
@@ -81,6 +82,14 @@ class Source
81
82
  ## leaks (esp. file descriptors).
82
83
  def go_idle; end
83
84
 
85
+ ## Returns an array containing all the labels that are natively
86
+ ## supported by this source
87
+ def supported_labels?; [] end
88
+
89
+ ## Returns an array containing all the labels that are currently in
90
+ ## the location filename
91
+ def labels? info; [] end
92
+
84
93
  ## Yields values of the form [Symbol, Hash]
85
94
  ## add: info, labels, progress
86
95
  ## delete: info, progress
@@ -92,6 +101,25 @@ class Source
92
101
  true
93
102
  end
94
103
 
104
+ def synchronize &block
105
+ @poll_lock.synchronize &block
106
+ end
107
+
108
+ def try_lock
109
+ acquired = @poll_lock.try_enter
110
+ if acquired
111
+ debug "lock acquired for: #{self}"
112
+ else
113
+ debug "could not acquire lock for: #{self}"
114
+ end
115
+ acquired
116
+ end
117
+
118
+ def unlock
119
+ @poll_lock.exit
120
+ debug "lock released for: #{self}"
121
+ end
122
+
95
123
  ## utility method to read a raw email header from an IO stream and turn it
96
124
  ## into a hash of key-value pairs. minor special semantics for certain headers.
97
125
  ##
@@ -387,6 +387,12 @@ class ThreadSet
387
387
  m.refs.any? { |ref_id| @messages.member? ref_id }
388
388
  end
389
389
 
390
+ def delete_message message
391
+ el = @messages[message.id]
392
+ return unless el.message
393
+ el.message = nil
394
+ end
395
+
390
396
  ## the heart of the threading code
391
397
  def add_message message
392
398
  el = @messages[message.id]
@@ -8,6 +8,7 @@ require 'set'
8
8
  require 'enumerator'
9
9
  require 'benchmark'
10
10
  require 'unicode'
11
+ require 'fileutils'
11
12
 
12
13
  ## time for some monkeypatching!
13
14
  class Symbol
@@ -45,6 +46,17 @@ class Lockfile
45
46
  def touch_yourself; touch path end
46
47
  end
47
48
 
49
+ class File
50
+ # platform safe file.link which attempts a copy if hard-linking fails
51
+ def self.safe_link src, dest
52
+ begin
53
+ File.link src, dest
54
+ rescue
55
+ FileUtils.copy src, dest
56
+ end
57
+ end
58
+ end
59
+
48
60
  class Pathname
49
61
  def human_size
50
62
  s =
@@ -120,8 +132,6 @@ module RMail
120
132
  # Convert to ASCII before trying to match with regexp
121
133
  class Field
122
134
 
123
- EXTRACT_FIELD_NAME_RE = /\A([^\x00-\x1f\x7f-\xff :]+):\s*/no
124
-
125
135
  class << self
126
136
  def parse(field)
127
137
  field = field.dup.to_s
@@ -3,10 +3,13 @@ module Redwood
3
3
  module Query
4
4
  class QueryDescriptionError < ArgumentError; end
5
5
 
6
- def self.describe query
6
+ def self.describe(query, fallback = nil)
7
7
  d = query.description.force_encoding("UTF-8")
8
8
 
9
- raise QueryDescriptionError.new(d) unless d.valid_encoding?
9
+ unless d.valid_encoding?
10
+ raise QueryDescriptionError.new(d) unless fallback
11
+ d = fallback
12
+ end
10
13
  return d
11
14
  end
12
15
  end
@@ -1,3 +1,3 @@
1
1
  module Redwood
2
- VERSION = "0.14.1.1"
2
+ VERSION = "0.15.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sup
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.14.1.1
4
+ version: 0.15.0
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 14
9
- - 1
10
- - 1
11
- hash: -295629968094096073
8
+ - 15
9
+ - 0
10
+ hash: 3778501713049268347
12
11
  platform: ruby
13
12
  authors:
14
13
  - William Morgan
@@ -18,7 +17,7 @@ authors:
18
17
  autorequire:
19
18
  bindir: bin
20
19
  cert_chain: []
21
- date: 2013-10-29 00:00:00.000000000 Z
20
+ date: 2013-11-07 00:00:00.000000000 Z
22
21
  dependencies:
23
22
  - !ruby/object:Gem::Dependency
24
23
  name: xapian-ruby
@@ -53,21 +52,21 @@ dependencies:
53
52
  - !ruby/object:Gem::Version
54
53
  version: 1.3.1
55
54
  - !ruby/object:Gem::Dependency
56
- name: rmail
55
+ name: rmail-sup
57
56
  requirement: !ruby/object:Gem::Requirement
58
57
  none: false
59
58
  requirements:
60
- - - ! '>='
59
+ - - ~>
61
60
  - !ruby/object:Gem::Version
62
- version: '0.17'
61
+ version: 1.0.1
63
62
  type: :runtime
64
63
  prerelease: false
65
64
  version_requirements: !ruby/object:Gem::Requirement
66
65
  none: false
67
66
  requirements:
68
- - - ! '>='
67
+ - - ~>
69
68
  - !ruby/object:Gem::Version
70
- version: '0.17'
69
+ version: 1.0.1
71
70
  - !ruby/object:Gem::Dependency
72
71
  name: highline
73
72
  requirement: !ruby/object:Gem::Requirement
@@ -275,7 +274,8 @@ executables:
275
274
  - sup-import-dump
276
275
  - sup-recover-sources
277
276
  - sup-sync
278
- - sup-sync-back
277
+ - sup-sync-back-maildir
278
+ - sup-sync-back-mbox
279
279
  - sup-tweak-labels
280
280
  - sup-psych-ify-config-files
281
281
  extensions: []
@@ -293,7 +293,8 @@ files:
293
293
  - bin/sup-import-dump
294
294
  - bin/sup-recover-sources
295
295
  - bin/sup-sync
296
- - bin/sup-sync-back
296
+ - bin/sup-sync-back-maildir
297
+ - bin/sup-sync-back-mbox
297
298
  - bin/sup-tweak-labels
298
299
  - bin/sup-psych-ify-config-files
299
300
  - lib/sup/hook.rb
@@ -364,9 +365,9 @@ homepage: http://supmua.org
364
365
  licenses:
365
366
  - GPL-2
366
367
  post_install_message: ! "SUP: If you are upgrading Sup from before version 0.14.0:
367
- Please\n run `sup-psych-ify-config-files` to migrate from 0.13 to 0.14.\n\n
368
- \ Check https://github.com/sup-heliotrope/sup/wiki/Migration-0.13-to-0.14\n for
369
- more detailed and up-to-date instructions.\n"
368
+ Please\n run `sup-psych-ify-config-files` to migrate from 0.13.\n\n Check
369
+ https://github.com/sup-heliotrope/sup/wiki/Migration-0.13-to-0.14\n for more
370
+ detailed and up-to-date instructions.\n"
370
371
  rdoc_options: []
371
372
  require_paths:
372
373
  - lib