diff options
author | José Valim <jose.valim@gmail.com> | 2012-03-15 05:44:46 -0700 |
---|---|---|
committer | José Valim <jose.valim@gmail.com> | 2012-03-15 05:44:46 -0700 |
commit | ee8e567d50f75c91d422c697845bc1a84f9114be (patch) | |
tree | 847447d1262067ee8392d96bdbfe9ed8b9baa50f | |
parent | fbc9d0f44f090a9873834f4966760c3e80682559 (diff) | |
parent | 4073505065a0937d67c45860988fbe634a700c37 (diff) | |
download | rails-ee8e567d50f75c91d422c697845bc1a84f9114be.tar.gz rails-ee8e567d50f75c91d422c697845bc1a84f9114be.tar.bz2 rails-ee8e567d50f75c91d422c697845bc1a84f9114be.zip |
Merge pull request #5448 from JonRowe/patch_file_update_on_master
Commas in directory names causes hang in ActiveSupport::FileUpdateChecker
-rw-r--r-- | activesupport/lib/active_support/file_update_checker.rb | 6 | ||||
-rw-r--r-- | activesupport/test/file_update_checker_test.rb | 15 |
2 files changed, 20 insertions, 1 deletions
diff --git a/activesupport/lib/active_support/file_update_checker.rb b/activesupport/lib/active_support/file_update_checker.rb index 2ede084e95..3ff249536e 100644 --- a/activesupport/lib/active_support/file_update_checker.rb +++ b/activesupport/lib/active_support/file_update_checker.rb @@ -106,11 +106,15 @@ module ActiveSupport globs = [] hash.each do |key, value| - globs << "#{key}/**/*#{compile_ext(value)}" + globs << "#{escape(key)}/**/*#{compile_ext(value)}" end "{#{globs.join(",")}}" end + def escape(key) + key.gsub(',','\,') + end + def compile_ext(array) #:nodoc: array = Array(array) return if array.empty? diff --git a/activesupport/test/file_update_checker_test.rb b/activesupport/test/file_update_checker_test.rb index dd2483287b..c884068c59 100644 --- a/activesupport/test/file_update_checker_test.rb +++ b/activesupport/test/file_update_checker_test.rb @@ -1,5 +1,6 @@ require 'abstract_unit' require 'fileutils' +require 'thread' MTIME_FIXTURES_PATH = File.expand_path("../fixtures", __FILE__) @@ -79,4 +80,18 @@ class FileUpdateCheckerWithEnumerableTest < ActiveSupport::TestCase assert !checker.execute_if_updated assert_equal 0, i end + + def test_should_not_block_if_a_strange_filename_used + FileUtils.mkdir_p("tmp_watcher/valid,yetstrange,path,") + FileUtils.touch(FILES.map { |file_name| "tmp_watcher/valid,yetstrange,path,/#{file_name}" } ) + + test = Thread.new do + checker = ActiveSupport::FileUpdateChecker.new([],"tmp_watcher/valid,yetstrange,path," => :txt){ i += 1 } + Thread.exit + end + test.priority = -1 + test.join(5) + + assert !test.alive? + end end |