From 81befcf26782b09b6c5ce95207e018b2e9586896 Mon Sep 17 00:00:00 2001 From: "yuuji.yaginuma" Date: Sun, 1 Sep 2019 15:52:31 +0900 Subject: [PATCH] Correctly classify the files and directories that pass to watcher Currently, autoload paths pass to the watcher as directories. If using evented watcher, this possibly pass as it is to `Listen`. But autoload paths include files and `Listen` raise an error when was passed file. So, it is necessary to classify files and directories correctly. Fixes #37011. --- railties/lib/rails/application.rb | 2 +- railties/test/application/watcher_test.rb | 28 +++++++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 railties/test/application/watcher_test.rb diff --git a/railties/lib/rails/application.rb b/railties/lib/rails/application.rb index cbaab6cc33f1..62456e5ab96f 100644 --- a/railties/lib/rails/application.rb +++ b/railties/lib/rails/application.rb @@ -351,7 +351,7 @@ def watchable_args #:nodoc: files, dirs = config.watchable_files.dup, config.watchable_dirs.dup ActiveSupport::Dependencies.autoload_paths.each do |path| - dirs[path.to_s] = [:rb] + File.file?(path) ? files << path.to_s : dirs[path.to_s] = [:rb] end [files, dirs] diff --git a/railties/test/application/watcher_test.rb b/railties/test/application/watcher_test.rb new file mode 100644 index 000000000000..f2c436b47c1a --- /dev/null +++ b/railties/test/application/watcher_test.rb @@ -0,0 +1,28 @@ +# frozen_string_literal: true + +require "isolation/abstract_unit" + +module ApplicationTests + class WatcherTest < ActiveSupport::TestCase + include ActiveSupport::Testing::Isolation + + setup :build_app + teardown :teardown_app + + def app + @app ||= Rails.application + end + + test "watchable_args classifies files included in autoload path" do + add_to_config <<-RUBY + config.file_watcher = ActiveSupport::EventedFileUpdateChecker + RUBY + app_file "app/README.md", "" + + require "#{rails_root}/config/environment" + + files, _ = Rails.application.watchable_args + assert_includes files, "#{rails_root}/app/README.md" + end + end +end