]> git.cworth.org Git - sup/blobdiff - bin/sup-sync
Merge branch 'default-colors' into next
[sup] / bin / sup-sync
index 0acb8eddca342bacad9b1a96ece53150fa1b6d8b..5437f9caa23bf41ce8989a249eabeda68f0b8b4b 100644 (file)
@@ -133,7 +133,7 @@ begin
     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
 
@@ -143,12 +143,7 @@ begin
       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.
@@ -163,7 +158,7 @@ begin
       ## 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]
@@ -227,6 +222,8 @@ begin
     $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] }
@@ -238,7 +235,6 @@ rescue Exception => e
   File.open("sup-exception-log.txt", "w") { |f| f.puts e.backtrace }
   raise
 ensure
-  index.save
   Redwood::finish
   index.unlock
 end