aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAaron Patterson <aaron.patterson@gmail.com>2012-03-23 11:46:57 -0700
committerAaron Patterson <aaron.patterson@gmail.com>2012-03-23 11:47:42 -0700
commit7422f44364f9cade4002fae2df4bb40da945202d (patch)
treeb204c9754382551a9b679c6a341d9a49d2017656
parente944b296a90825c8aaee23a324db6e34521c7e74 (diff)
downloadrails-7422f44364f9cade4002fae2df4bb40da945202d.tar.gz
rails-7422f44364f9cade4002fae2df4bb40da945202d.tar.bz2
rails-7422f44364f9cade4002fae2df4bb40da945202d.zip
chdir before globbing so that we don't need to escape directory names.
fixes #5521
-rw-r--r--railties/lib/rails/paths.rb31
1 files changed, 30 insertions, 1 deletions
diff --git a/railties/lib/rails/paths.rb b/railties/lib/rails/paths.rb
index b37421c09c..4ac3d88dc2 100644
--- a/railties/lib/rails/paths.rb
+++ b/railties/lib/rails/paths.rb
@@ -157,7 +157,25 @@ module Rails
path = File.expand_path(p, @root.path)
if @glob
- result.concat Dir[File.join(path, @glob)].sort
+ if File.directory? path
+ result.concat expand_dir(path, @glob)
+ else
+ # FIXME: I think we can remove this branch, but I'm not sure.
+ # Say the filesystem has this file:
+ #
+ # /tmp/foobar
+ #
+ # and someone adds this path:
+ #
+ # /tmp/foo
+ #
+ # with a glob of "*", then this function will return
+ #
+ # /tmp/foobar
+ #
+ # We need to figure out if that is desired behavior.
+ result.concat expand_file(path, @glob)
+ end
else
result << path
end
@@ -177,6 +195,17 @@ module Rails
end
alias to_a expanded
+
+ private
+ def expand_file(path, glob)
+ Dir[File.join(path, glob)].sort
+ end
+
+ def expand_dir(path, glob)
+ Dir.chdir(path) do
+ Dir.glob(@glob).map { |file| File.join path, file }.sort
+ end
+ end
end
end
end