DEV: In themes:update, only update themes which are out-of-date (#15676)
Running `update_from_remote` and `save!` cause a number of side-effects, including instructing all clients to reload CSS files. If there are no changes, then this is wasteful, and can even cause a 'flicker' effect on clients as they reload CSS. This commit checks if any updates are available before triggering `update_from_remote` / `save!`. This should be much faster, and stop the 'flickering' UX from happening on every themes:update run. It also improves the output of the command to include the from/to commit hashes, which may be useful for debugging issues. For example: ``` Checking 'Alien Night | A Dark Discourse Theme' for 'default'... already up to date Checking 'Star Wars' for 'default'... updating from d8a170dd to 66b9756f Checking 'Media Overlay' for 'default'... already up to date ```
This commit is contained in:
parent
3bb1cd5c4d
commit
6c3df84a93
|
@ -112,6 +112,10 @@ class RemoteTheme < ActiveRecord::Base
|
||||||
self.joined_remotes.where("last_error_text IS NOT NULL").pluck("themes.name", "themes.id")
|
self.joined_remotes.where("last_error_text IS NOT NULL").pluck("themes.name", "themes.id")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def out_of_date?
|
||||||
|
commits_behind > 0 || remote_version != local_version
|
||||||
|
end
|
||||||
|
|
||||||
def update_remote_version
|
def update_remote_version
|
||||||
return unless is_git?
|
return unless is_git?
|
||||||
importer = ThemeStore::GitImporter.new(remote_url, private_key: private_key, branch: branch)
|
importer = ThemeStore::GitImporter.new(remote_url, private_key: private_key, branch: branch)
|
||||||
|
|
|
@ -58,9 +58,15 @@ def update_themes
|
||||||
remote_theme = theme.remote_theme
|
remote_theme = theme.remote_theme
|
||||||
next if remote_theme.blank? || remote_theme.remote_url.blank?
|
next if remote_theme.blank? || remote_theme.remote_url.blank?
|
||||||
|
|
||||||
puts "Updating '#{theme.name}' for '#{RailsMultisite::ConnectionManagement.current_db}'..."
|
print "Checking '#{theme.name}' for '#{RailsMultisite::ConnectionManagement.current_db}'... "
|
||||||
remote_theme.update_from_remote
|
remote_theme.update_remote_version
|
||||||
theme.save!
|
if remote_theme.out_of_date?
|
||||||
|
puts "updating from #{remote_theme.local_version[0..7]} to #{remote_theme.remote_version[0..7]}"
|
||||||
|
remote_theme.update_from_remote
|
||||||
|
theme.save!
|
||||||
|
else
|
||||||
|
puts "up to date"
|
||||||
|
end
|
||||||
|
|
||||||
raise RemoteTheme::ImportError.new(remote_theme.last_error_text) if remote_theme.last_error_text.present?
|
raise RemoteTheme::ImportError.new(remote_theme.last_error_text) if remote_theme.last_error_text.present?
|
||||||
rescue => e
|
rescue => e
|
||||||
|
|
Loading…
Reference in New Issue