diff --git a/app/controllers/admin/themes_controller.rb b/app/controllers/admin/themes_controller.rb index 4def5bd2149..b9b34aff74d 100644 --- a/app/controllers/admin/themes_controller.rb +++ b/app/controllers/admin/themes_controller.rb @@ -186,22 +186,16 @@ class Admin::ThemesController < Admin::AdminController update_translations handle_switch - save_remote = false if params[:theme][:remote_check] @theme.remote_theme.update_remote_version - save_remote = true end if params[:theme][:remote_update] @theme.remote_theme.update_from_remote - save_remote = true end respond_to do |format| if @theme.save - - @theme.remote_theme.save! if save_remote - update_default_theme @theme.reload diff --git a/app/models/remote_theme.rb b/app/models/remote_theme.rb index 38da1d054f9..16b58579ca0 100644 --- a/app/models/remote_theme.rb +++ b/app/models/remote_theme.rb @@ -106,6 +106,8 @@ class RemoteTheme < ActiveRecord::Base self.updated_at = Time.zone.now self.remote_version, self.commits_behind = importer.commits_since(local_version) self.last_error_text = nil + ensure + self.save! end end @@ -119,6 +121,7 @@ class RemoteTheme < ActiveRecord::Base importer.import! rescue RemoteTheme::ImportError => err self.last_error_text = err.message + self.save! return self else self.last_error_text = nil @@ -163,6 +166,7 @@ class RemoteTheme < ActiveRecord::Base update_theme_color_schemes(theme, theme_info["color_schemes"]) unless theme.component + self.save! self ensure begin diff --git a/spec/requests/admin/themes_controller_spec.rb b/spec/requests/admin/themes_controller_spec.rb index 36fd5f68db5..b3d5acd7291 100644 --- a/spec/requests/admin/themes_controller_spec.rb +++ b/spec/requests/admin/themes_controller_spec.rb @@ -330,6 +330,22 @@ describe Admin::ThemesController do expect(theme.theme_translation_overrides.count).to eq(0) end + it 'checking for updates saves the remote_theme record' do + theme.remote_theme = RemoteTheme.create!(remote_url: "http://discourse.org", remote_version: "a", local_version: "a", commits_behind: 0) + theme.save! + ThemeStore::GitImporter.any_instance.stubs(:import!) + ThemeStore::GitImporter.any_instance.stubs(:commits_since).returns(["b", 1]) + + put "/admin/themes/#{theme.id}.json", params: { + theme: { + remote_check: true + } + } + theme.reload + expect(theme.remote_theme.remote_version).to eq("b") + expect(theme.remote_theme.commits_behind).to eq(1) + end + it 'can disable component' do child = Fabricate(:theme, component: true)