mirror of
https://github.com/discourse/discourse.git
synced 2025-03-21 12:05:33 +08:00
FIX: discourse_merger: copied topic_link records had wrong url, and update all internal links to use new topic URLs in copied posts
This commit is contained in:
parent
24da2940a7
commit
def2653fc8
@ -69,6 +69,7 @@ class BulkImport::DiscourseMerger < BulkImport::Base
|
||||
|
||||
def execute
|
||||
@first_new_user_id = @last_user_id + 1
|
||||
@first_new_topic_id = @last_topic_id + 1
|
||||
|
||||
copy_users
|
||||
copy_user_stuff
|
||||
@ -82,6 +83,7 @@ class BulkImport::DiscourseMerger < BulkImport::Base
|
||||
copy_badges
|
||||
|
||||
fix_category_descriptions
|
||||
fix_topic_links
|
||||
end
|
||||
|
||||
def source_raw_connection
|
||||
@ -483,9 +485,16 @@ class BulkImport::DiscourseMerger < BulkImport::Base
|
||||
end
|
||||
|
||||
def process_topic_link(topic_link)
|
||||
old_topic_id = topic_link['link_topic_id']
|
||||
topic_link['link_topic_id'] = topic_id_from_imported_id(topic_link['link_topic_id']) if topic_link['link_topic_id']
|
||||
topic_link['link_post_id'] = post_id_from_imported_id(topic_link['link_post_id']) if topic_link['link_post_id']
|
||||
return nil if topic_link['link_topic_id'].nil? || topic_link['link_post_id'].nil?
|
||||
return nil if topic_link['link_topic_id'].nil?
|
||||
|
||||
r = Regexp.new("^#{@source_base_url}/t/([^\/]+)/#{old_topic_id}(.*)")
|
||||
if m = r.match(topic_link['url'])
|
||||
topic_link['url'] = "#{@source_base_url}/t/#{m[1]}/#{topic_link['link_topic_id']}#{m[2]}"
|
||||
end
|
||||
|
||||
topic_link
|
||||
end
|
||||
|
||||
@ -663,6 +672,50 @@ class BulkImport::DiscourseMerger < BulkImport::Base
|
||||
end
|
||||
end
|
||||
|
||||
def fix_topic_links
|
||||
puts "updating topic links in posts..."
|
||||
|
||||
update_count = 0
|
||||
total = @topics.size
|
||||
current = 0
|
||||
|
||||
@topics.each do |old_topic_id, new_topic_id|
|
||||
current += 1
|
||||
puts "#{current} completed. #{update_count} rows updated." if current % 200 == 0
|
||||
|
||||
if topic = Topic.find_by_id(new_topic_id)
|
||||
replace_arg = [
|
||||
"#{@source_base_url}/t/#{topic.slug}/#{old_topic_id}",
|
||||
"#{@source_base_url}/t/#{topic.slug}/#{new_topic_id}"
|
||||
]
|
||||
|
||||
r = @raw_connection.async_exec(
|
||||
"UPDATE posts
|
||||
SET raw = replace(raw, $1, $2)
|
||||
WHERE NOT raw IS NULL
|
||||
AND topic_id >= #{@first_new_topic_id}
|
||||
AND raw <> replace(raw, $1, $2)",
|
||||
replace_arg
|
||||
)
|
||||
|
||||
update_count += r.cmd_tuples
|
||||
|
||||
r = @raw_connection.async_exec(
|
||||
"UPDATE posts
|
||||
SET cooked = replace(cooked, $1, $2)
|
||||
WHERE NOT cooked IS NULL
|
||||
AND topic_id >= #{@first_new_topic_id}
|
||||
AND cooked <> replace(cooked, $1, $2)",
|
||||
replace_arg
|
||||
)
|
||||
|
||||
update_count += r.cmd_tuples
|
||||
end
|
||||
end
|
||||
|
||||
puts "updated #{update_count} rows"
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
BulkImport::DiscourseMerger.new.start
|
||||
|
Loading…
x
Reference in New Issue
Block a user