mirror of
https://github.com/discourse/discourse.git
synced 2024-12-28 13:43:56 +08:00
5d438f805c
* DEV: Add rake command to help detect dead settings Some Site Settings may still exist but are no longer being used in the core discourse code or in related plugins. This rake task will help identify any unused (aka: dead) settings by using the `rg` command to search for them. You can execute the rake task by using this command: `LOAD_PLUGINS=1 bin/rails "site_settings:find_dead"` * Add env variable, apply feedback
79 lines
2.2 KiB
Ruby
79 lines
2.2 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
class SiteSettingsTask
|
|
def self.export_to_hash(include_defaults: false, include_hidden: false)
|
|
site_settings = SiteSetting.all_settings(include_hidden: include_hidden)
|
|
h = {}
|
|
site_settings.each do |site_setting|
|
|
next if site_setting[:default] == site_setting[:value] if !include_defaults
|
|
h.store(site_setting[:setting].to_s, site_setting[:value])
|
|
end
|
|
h
|
|
end
|
|
|
|
def self.import(yml)
|
|
h = SiteSettingsTask.export_to_hash(include_defaults: true, include_hidden: true)
|
|
counts = { updated: 0, not_found: 0, errors: 0 }
|
|
log = []
|
|
|
|
site_settings = YAML.safe_load(yml)
|
|
site_settings.each do |site_setting|
|
|
key = site_setting[0]
|
|
val = site_setting[1]
|
|
if h.has_key?(key)
|
|
if val != h[key] #only update if different
|
|
begin
|
|
result = SiteSetting.set_and_log(key, val)
|
|
log << "Changed #{key} FROM: #{result.previous_value} TO: #{result.new_value}"
|
|
counts[:updated] += 1
|
|
rescue => e
|
|
log << "ERROR: #{e.message}"
|
|
counts[:errors] += 1
|
|
end
|
|
end
|
|
else
|
|
log << "NOT FOUND: existing site setting not found for #{key}"
|
|
counts[:not_found] += 1
|
|
end
|
|
end
|
|
[log, counts]
|
|
end
|
|
|
|
def self.names
|
|
SiteSetting
|
|
.all_settings(include_hidden: true)
|
|
.map { |site_setting| site_setting[:setting].to_s }
|
|
end
|
|
|
|
def self.rg_installed?
|
|
!`which rg`.strip.empty?
|
|
end
|
|
|
|
def self.directory_path(directory_name)
|
|
all_the_parent_dir = ENV["ALL_THE_PARENT_DIR"]
|
|
if all_the_parent_dir
|
|
File.expand_path(File.join(all_the_parent_dir, directory_name))
|
|
else
|
|
File.expand_path(File.join(Dir.pwd, "..", directory_name))
|
|
end
|
|
end
|
|
|
|
def self.directories_to_check
|
|
%w[all-the-themes all-the-custom-themes all-the-plugins all-the-custom-plugins]
|
|
end
|
|
|
|
def self.directories
|
|
directories = [Dir.pwd]
|
|
SiteSettingsTask.directories_to_check.each do |d|
|
|
if Dir.exist? SiteSettingsTask.directory_path(d)
|
|
directories << SiteSettingsTask.directory_path(d)
|
|
end
|
|
end
|
|
directories
|
|
end
|
|
|
|
def self.rg_search_count(term, directory)
|
|
`rg -l --no-ignore "#{term}" "#{directory}" -g '!config' -g '!db/migrate' | wc -l`.strip.to_i
|
|
end
|
|
end
|