diff options
Diffstat (limited to 'lib/tasks')
-rw-r--r-- | lib/tasks/temp.rake | 49 | ||||
-rw-r--r-- | lib/tasks/themes.rake | 87 |
2 files changed, 126 insertions, 10 deletions
diff --git a/lib/tasks/temp.rake b/lib/tasks/temp.rake index ce04c7ddd..9decc13db 100644 --- a/lib/tasks/temp.rake +++ b/lib/tasks/temp.rake @@ -1,15 +1,44 @@ namespace :temp do - desc "Remove plaintext passwords from post_redirect params" - task :remove_post_redirect_passwords => :environment do - PostRedirect.find_each(:conditions => ['post_params_yaml is not null']) do |post_redirect| - if post_redirect.post_params && post_redirect.post_params[:signchangeemail] && post_redirect.post_params[:signchangeemail][:password] - params = post_redirect.post_params - params[:signchangeemail].delete(:password) - post_redirect.post_params = params - post_redirect.save! - end + desc "Remove plaintext passwords from post_redirect params" + task :remove_post_redirect_passwords => :environment do + PostRedirect.find_each(:conditions => ['post_params_yaml is not null']) do |post_redirect| + if post_redirect.post_params && post_redirect.post_params[:signchangeemail] && post_redirect.post_params[:signchangeemail][:password] + params = post_redirect.post_params + params[:signchangeemail].delete(:password) + post_redirect.post_params = params + post_redirect.save! + end + end + end + + desc 'Remove file caches for requests that are not publicly visible or have been destroyed' + task :remove_obsolete_info_request_caches => :environment do + dryrun = ENV['DRYRUN'] == '0' ? false : true + verbose = ENV['VERBOSE'] == '0' ? false : true + if dryrun + puts "Running in dryrun mode" + end + request_cache_path = File.join(Rails.root, 'cache', 'views', 'request', '*', '*') + Dir.glob(request_cache_path) do |request_subdir| + info_request_id = File.basename(request_subdir) + puts "Looking for InfoRequest with id #{info_request_id}" if verbose + begin + info_request = InfoRequest.find(info_request_id) + puts "Got InfoRequest #{info_request_id}" if verbose + if ! info_request.all_can_view? + puts "Deleting cache at #{request_subdir} for hidden/requester_only InfoRequest #{info_request_id}" + if ! dryrun + FileUtils.rm_rf(request_subdir) + end + end + rescue ActiveRecord::RecordNotFound + puts "Deleting cache at #{request_subdir} for deleted InfoRequest #{info_request_id}" + if ! dryrun + FileUtils.rm_rf(request_subdir) + end + end + end end - end end diff --git a/lib/tasks/themes.rake b/lib/tasks/themes.rake new file mode 100644 index 000000000..2b1dbb3a9 --- /dev/null +++ b/lib/tasks/themes.rake @@ -0,0 +1,87 @@ + +namespace :themes do + + def plugin_dir + File.join(Rails.root,"vendor","plugins") + end + + def theme_dir(theme_name) + File.join(plugin_dir, theme_name) + end + + def install_theme_using_git(name, uri, verbose=false, options={}) + mkdir_p(install_path = theme_dir(name)) + Dir.chdir install_path do + init_cmd = "git init" + init_cmd += " -q" if options[:quiet] and not verbose + puts init_cmd if verbose + system(init_cmd) + base_cmd = "git pull --depth 1 #{uri}" + # Is there a tag for this version of Alaveteli? + usage_tag = "use-with-alaveteli-#{ALAVETELI_VERSION}" + # Query the remote repository passing flags for tags + version_tag = `git ls-remote --tags #{uri} #{usage_tag}` + if /^[a-z0-9]+\s+refs\/tags\/#{Regexp.escape(usage_tag)}$/.match(version_tag) + # If we got a tag, pull that instead of HEAD + puts "Using tag #{usage_tag}" if verbose + base_cmd += " refs/tags/#{usage_tag}" + else + puts "No specific tag for this version: using HEAD" if verbose + end + base_cmd += " -q" if options[:quiet] and not verbose + puts base_cmd if verbose + if system(base_cmd) + puts "removing: .git .gitignore" if verbose + rm_rf %w(.git .gitignore) + else + rm_rf install_path + raise "#{base_cmd} failed! Stopping." + end + end + end + + def uninstall(theme_name, verbose=false) + dir = theme_dir(theme_name) + if File.directory?(dir) + run_hook(theme_name, 'uninstall', verbose) + puts "Removing '#{dir}'" if verbose + rm_r dir + else + puts "Plugin doesn't exist: #{dir}" + end + end + + def run_hook(theme_name, hook_name, verbose=false) + hook_file = File.join(theme_dir(theme_name), "#{hook_name}.rb") + if File.exist? hook_file + puts "Running #{hook_name} hook for #{theme_name}" if verbose + load hook_file + end + end + + def installed?(theme_name) + File.directory?(theme_dir(theme_name)) + end + + def install_theme(theme_url, verbose, deprecated=false) + deprecation_string = deprecated ? " using deprecated THEME_URL" : "" + theme_name = File.basename(theme_url, '.git') + puts "Installing theme #{theme_name}#{deprecation_string} from #{theme_url}" + uninstall(theme_name, verbose) if installed?(theme_name) + install_theme_using_git(theme_name, theme_url, verbose) + run_hook(theme_name, 'install', verbose) + run_hook(theme_name, 'post_install', verbose) + end + + desc "Install themes specified in the config file's THEME_URLS" + task :install => :environment do + verbose = true + theme_urls = MySociety::Config.get("THEME_URLS", []) + theme_urls.each{ |theme_url| install_theme(theme_url, verbose) } + theme_url = MySociety::Config.get("THEME_URL", "") + if ! theme_url.blank? + # Old version of the above, for backwards compatibility + install_theme(theme_url, verbose, deprecated=true) + end + end +end
\ No newline at end of file |