Use with_index iterator in backup service (#38264)
This commit is contained in:
parent
36400681cf
commit
e839a94b93
@ -25,13 +25,11 @@ class BackupService < BaseService
|
|||||||
skeleton[:orderedItems] = ['!PLACEHOLDER!']
|
skeleton[:orderedItems] = ['!PLACEHOLDER!']
|
||||||
skeleton = JSON.generate(skeleton)
|
skeleton = JSON.generate(skeleton)
|
||||||
prepend, append = skeleton.split('"!PLACEHOLDER!"')
|
prepend, append = skeleton.split('"!PLACEHOLDER!"')
|
||||||
add_comma = false
|
|
||||||
|
|
||||||
file.write(prepend)
|
file.write(prepend)
|
||||||
|
|
||||||
account.statuses.with_includes.reorder(nil).find_in_batches do |statuses|
|
account.statuses.with_includes.reorder(nil).find_in_batches.with_index do |statuses, batch|
|
||||||
file.write(',') if add_comma
|
file.write(',') unless batch.zero?
|
||||||
add_comma = true
|
|
||||||
|
|
||||||
file.write(statuses.map do |status|
|
file.write(statuses.map do |status|
|
||||||
serializer = status.reblog? ? ActivityPub::AnnounceNoteSerializer : ActivityPub::CreateNoteSerializer
|
serializer = status.reblog? ? ActivityPub::AnnounceNoteSerializer : ActivityPub::CreateNoteSerializer
|
||||||
@ -124,11 +122,8 @@ class BackupService < BaseService
|
|||||||
zipfile.get_output_stream('likes.json') do |io|
|
zipfile.get_output_stream('likes.json') do |io|
|
||||||
io.write(prepend)
|
io.write(prepend)
|
||||||
|
|
||||||
add_comma = false
|
Status.reorder(nil).joins(:favourites).includes(:account).merge(account.favourites).find_in_batches.with_index do |statuses, batch|
|
||||||
|
io.write(',') unless batch.zero?
|
||||||
Status.reorder(nil).joins(:favourites).includes(:account).merge(account.favourites).find_in_batches do |statuses|
|
|
||||||
io.write(',') if add_comma
|
|
||||||
add_comma = true
|
|
||||||
|
|
||||||
io.write(statuses.map do |status|
|
io.write(statuses.map do |status|
|
||||||
JSON.generate(ActivityPub::TagManager.instance.uri_for(status))
|
JSON.generate(ActivityPub::TagManager.instance.uri_for(status))
|
||||||
@ -151,10 +146,8 @@ class BackupService < BaseService
|
|||||||
zipfile.get_output_stream('bookmarks.json') do |io|
|
zipfile.get_output_stream('bookmarks.json') do |io|
|
||||||
io.write(prepend)
|
io.write(prepend)
|
||||||
|
|
||||||
add_comma = false
|
Status.reorder(nil).joins(:bookmarks).includes(:account).merge(account.bookmarks).find_in_batches.with_index do |statuses, batch|
|
||||||
Status.reorder(nil).joins(:bookmarks).includes(:account).merge(account.bookmarks).find_in_batches do |statuses|
|
io.write(',') unless batch.zero?
|
||||||
io.write(',') if add_comma
|
|
||||||
add_comma = true
|
|
||||||
|
|
||||||
io.write(statuses.map do |status|
|
io.write(statuses.map do |status|
|
||||||
JSON.generate(ActivityPub::TagManager.instance.uri_for(status))
|
JSON.generate(ActivityPub::TagManager.instance.uri_for(status))
|
||||||
|
|||||||
@ -10,7 +10,9 @@ RSpec.describe BackupService do
|
|||||||
let!(:status) { Fabricate(:status, account: user.account, text: 'Hello', visibility: :public, media_attachments: [attachment]) }
|
let!(:status) { Fabricate(:status, account: user.account, text: 'Hello', visibility: :public, media_attachments: [attachment]) }
|
||||||
let!(:private_status) { Fabricate(:status, account: user.account, text: 'secret', visibility: :private) }
|
let!(:private_status) { Fabricate(:status, account: user.account, text: 'secret', visibility: :private) }
|
||||||
let!(:favourite) { Fabricate(:favourite, account: user.account) }
|
let!(:favourite) { Fabricate(:favourite, account: user.account) }
|
||||||
|
let!(:more_favourite) { Fabricate(:favourite, account: user.account) }
|
||||||
let!(:bookmark) { Fabricate(:bookmark, account: user.account) }
|
let!(:bookmark) { Fabricate(:bookmark, account: user.account) }
|
||||||
|
let!(:more_bookmark) { Fabricate(:bookmark, account: user.account) }
|
||||||
let!(:backup) { Fabricate(:backup, user: user) }
|
let!(:backup) { Fabricate(:backup, user: user) }
|
||||||
|
|
||||||
def read_zip_file(backup, filename)
|
def read_zip_file(backup, filename)
|
||||||
@ -71,21 +73,27 @@ RSpec.describe BackupService do
|
|||||||
end
|
end
|
||||||
|
|
||||||
def expect_likes_export
|
def expect_likes_export
|
||||||
json = export_json(:likes)
|
expect(export_json(:likes).deep_symbolize_keys)
|
||||||
|
.to include(
|
||||||
aggregate_failures do
|
id: 'likes.json',
|
||||||
expect(json['type']).to eq 'OrderedCollection'
|
type: 'OrderedCollection',
|
||||||
expect(json['orderedItems']).to eq [ActivityPub::TagManager.instance.uri_for(favourite.status)]
|
orderedItems: contain_exactly(
|
||||||
end
|
ActivityPub::TagManager.instance.uri_for(favourite.status),
|
||||||
|
ActivityPub::TagManager.instance.uri_for(more_favourite.status)
|
||||||
|
)
|
||||||
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
def expect_bookmarks_export
|
def expect_bookmarks_export
|
||||||
json = export_json(:bookmarks)
|
expect(export_json(:bookmarks).deep_symbolize_keys)
|
||||||
|
.to include(
|
||||||
aggregate_failures do
|
id: 'bookmarks.json',
|
||||||
expect(json['type']).to eq 'OrderedCollection'
|
type: 'OrderedCollection',
|
||||||
expect(json['orderedItems']).to eq [ActivityPub::TagManager.instance.uri_for(bookmark.status)]
|
orderedItems: contain_exactly(
|
||||||
end
|
ActivityPub::TagManager.instance.uri_for(bookmark.status),
|
||||||
|
ActivityPub::TagManager.instance.uri_for(more_bookmark.status)
|
||||||
|
)
|
||||||
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
def export_json_raw(type)
|
def export_json_raw(type)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user