num_added = num_updated = num_scanned = num_restored = 0
last_info_time = start_time = Time.now
- Redwood::PollManager.add_messages_from source do |m, offset, entry|
+ Redwood::PollManager.add_messages_from source, :force_overwrite => true do |m, offset, entry|
num_scanned += 1
seen[m.id] = true
next if target == :changed && entry && entry[:source_id].to_i == source.id && entry[:source_info].to_i == offset
## get the state currently in the index
- index_state =
- if entry
- entry[:label].split(/\s+/).map { |x| x.intern }
- else
- nil
- end
+ index_state = entry[:label].split(/\s+/).map { |x| x.intern } if entry
## skip if we're operating on restored messages, and this one
## ain't.
## assign message labels based on the operation we're performing
case op
when :asis
- m.labels = index_state if index_state
+ m.labels = (m.labels + index_state).uniq if index_state
when :restore
## if the entry exists on disk
if restored_state[m.id]
$stderr.puts "Deleted #{num_del} / #{num_scanned} messages"
end
+ index.save
+
if opts[:optimize]
$stderr.puts "Optimizing index..."
optt = time { index.index.optimize unless opts[:dry_run] }
File.open("sup-exception-log.txt", "w") { |f| f.puts e.backtrace }
raise
ensure
- index.save
Redwood::finish
index.unlock
end