From 89865a79cf23ca63736404068d195f68f897fd57 Mon Sep 17 00:00:00 2001 From: Doug's Shack Date: Thu, 30 Jan 2025 17:08:38 -0500 Subject: [PATCH 1/2] Add .feedignore support to filter site change files --- models/site.rb | 21 +++++++++++++++++++++ models/site_change.rb | 6 +++++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/models/site.rb b/models/site.rb index e5845721..e5e520e5 100644 --- a/models/site.rb +++ b/models/site.rb @@ -1903,6 +1903,27 @@ class Site < Sequel::Model true end + def feedignore_patterns + return @feedignore_patterns if defined?(@feedignore_patterns) + + feedignore_path = current_files_path('.feedignore') + if File.exist?(feedignore_path) + @feedignore_patterns = File.readlines(feedignore_path).map(&:strip).reject { |line| line.empty? || line.start_with?('#') } + else + @feedignore_patterns = [] + end + @feedignore_patterns + end + + def should_ignore_from_feed?(path) + return false if feedignore_patterns.empty? + feedignore_patterns.any? do |pattern| + # Convert glob pattern to regex + regex = Regexp.new("^#{pattern.gsub('*', '.*').gsub('?', '.')}$") + path.match?(regex) + end + end + private def store_file(path, uploaded, opts={}) diff --git a/models/site_change.rb b/models/site_change.rb index 3043007d..7b70e608 100644 --- a/models/site_change.rb +++ b/models/site_change.rb @@ -7,10 +7,14 @@ class SiteChange < Sequel::Model one_to_many :site_change_files def site_change_filenames(limit=6) - site_change_files_dataset.select(:filename).limit(limit).order(:created_at.desc).all.collect {|f| f.filename}.sort_by {|f| f.match('html') ? 0 : 1} + filenames = site_change_files_dataset.select(:filename).limit(limit).order(:created_at.desc).all.collect {|f| f.filename} + filenames = filenames.reject { |f| site.should_ignore_from_feed?(f) } + filenames.sort_by {|f| f.match('html') ? 0 : 1} end def self.record(site, filename) + return if site.should_ignore_from_feed?(filename) + site_change = filter(site_id: site.id).order(:created_at.desc).first if site_change.nil? || site_change.created_at+NEW_CHANGE_TIMEOUT < Time.now From 0702f0984db58f909a304e0c1ac21685e4f599cd Mon Sep 17 00:00:00 2001 From: Doug's Shack Date: Thu, 30 Jan 2025 17:27:30 -0500 Subject: [PATCH 2/2] Add default .feedignore template during site creation --- models/site.rb | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/models/site.rb b/models/site.rb index e5e520e5..79e0bf36 100644 --- a/models/site.rb +++ b/models/site.rb @@ -499,6 +499,14 @@ class Site < Sequel::Model FileUtils.cp template_file_path('robots.txt'), tmpfile.path files << {filename: 'robots.txt', tempfile: tmpfile} + tmpfile = Tempfile.new '.feedignore' + tmpfile.write "# Use .feedignore to prevent certain files from showing up in the update feed.\n" + tmpfile.write "# You can name specific files, or use the * wildcard.\n\n# Ignore this file\n.feedignore\n\n" + tmpfile.write "# Ignore all files in the test/ directory\ntest/*" + tmpfile.write "\n\n" + tmpfile.close + files << {filename: '.feedignore', tempfile: tmpfile} + store_files files, new_install: true end