Add `tootctl accounts merge` (#15201)
* Add `tootctl accounts merge` * Update lib/mastodon/accounts_cli.rb Co-authored-by: Yamagishi Kazutoshi <ykzts@desire.sh> Co-authored-by: Yamagishi Kazutoshi <ykzts@desire.sh>master
parent
a2da02626e
commit
f844386809
@ -0,0 +1,43 @@ |
|||||||
|
# frozen_string_literal: true |
||||||
|
|
||||||
|
module AccountMerging |
||||||
|
extend ActiveSupport::Concern |
||||||
|
|
||||||
|
def merge_with!(other_account) |
||||||
|
# Since it's the same remote resource, the remote resource likely |
||||||
|
# already believes we are following/blocking, so it's safe to |
||||||
|
# re-attribute the relationships too. However, during the presence |
||||||
|
# of the index bug users could have *also* followed the reference |
||||||
|
# account already, therefore mass update will not work and we need |
||||||
|
# to check for (and skip past) uniqueness errors |
||||||
|
|
||||||
|
owned_classes = [ |
||||||
|
Status, StatusPin, MediaAttachment, Poll, Report, Tombstone, Favourite, |
||||||
|
Follow, FollowRequest, Block, Mute, AccountIdentityProof, |
||||||
|
AccountModerationNote, AccountPin, AccountStat, ListAccount, |
||||||
|
PollVote, Mention |
||||||
|
] |
||||||
|
|
||||||
|
owned_classes.each do |klass| |
||||||
|
klass.where(account_id: other_account.id).find_each do |record| |
||||||
|
begin |
||||||
|
record.update_attribute(:account_id, id) |
||||||
|
rescue ActiveRecord::RecordNotUnique |
||||||
|
next |
||||||
|
end |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
target_classes = [Follow, FollowRequest, Block, Mute, AccountModerationNote, AccountPin] |
||||||
|
|
||||||
|
target_classes.each do |klass| |
||||||
|
klass.where(target_account_id: other_account.id).find_each do |record| |
||||||
|
begin |
||||||
|
record.update_attribute(:target_account_id, id) |
||||||
|
rescue ActiveRecord::RecordNotUnique |
||||||
|
next |
||||||
|
end |
||||||
|
end |
||||||
|
end |
||||||
|
end |
||||||
|
end |
Loading…
Reference in new issue