Если предположить, что FileList
здесь является классом FileList
от rake, то проблема в базовом классе Dir
Ruby (который используется FileList
) не соответствует файлам, начинающимся с .
для *
подстановочные. Соответствующая часть rake.rb составляет
# Add matching glob patterns.
def add_matching(pattern)
Dir[pattern].each do |fn|
self << fn unless exclude?(fn)
end
end
Ниже приведен некрасивый хак, который переопределяет add_matching
и включает в себя также файлы, начинающиеся с .
Надеемся, что кто-нибудь другой предложит более элегантное решение.
class Rake::FileList
def add_matching(pattern)
files = Dir[pattern]
# ugly hack to include files starting with . on Windows
if RUBY_PLATFORM =~ /mswin/
parts = File.split(pattern)
# if filename portion of the pattern starts with * also
# include the files matching '.' + the same pattern
if parts.last[0] == ?*
files += Dir[File.join(parts[0...-1] << '.' + parts.last)]
end
end
files.each do |fn|
self << fn unless exclude?(fn)
end
end
end
Обновление: Я только что проверил это на Linux здесь, и файлы, начинающиеся с .
, также не включены. например Если у меня есть каталог /home/mikej/root
с 2 подкаталогами a
и b
, где каждый содержит first.template
и .other.template
, тогда
Rake::FileList.new('home/mikej/root/**/*.template')
=> ["/home/mikej/root/a/first.template", "/home/mikej/root/b/first.template"]
поэтому я бы дважды проверил поведение в Linux и убедился, что нет ничего другого, вызывающего разницу в поведении.