80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
|
# File 'lib/couchdiff.rb', line 80
def patch src_db, dst_db, copier = Copier.new(src_db, dst_db)
p_bar = ProgressBar.new('Adding docs', @added.size)
until @added.empty?
doc_ids = (@added.shift(20)).map {|src| src['id'] }
src_docs = src_db.get_bulk(doc_ids)['rows']
src_docs.each do |src_doc|
puts "[Adding #{src_doc['doc']['_id']}]"
copier.copy src_doc['doc'], nil
p_bar.inc
end
end
p_bar.finish
p_bar = ProgressBar.new('Updating docs', @updated.size)
until @updated.empty?
doc_ids = (@updated.shift(25)).map {|src, dst| src['id'] }
src_docs = src_db.get_bulk(doc_ids)['rows']
dst_docs = dst_db.get_bulk(doc_ids)['rows']
src_docs.each_with_index do |src_doc, index|
dst_doc = dst_docs[index]
copier.copy src_doc['doc'], dst_doc['doc']
p_bar.inc
end
end
dst_db.bulk_save p_bar.finish
p_bar = ProgressBar.new('Deleting docs', @deleted.size)
dst_db.bulk_save @deleted.map { |doc| {"_id" => doc["id"], "_rev" => doc['doc']['_rev'], "_deleted" => true } } unless @deleted.empty?
p_bar.finish
end
|