Suponiendo que FileList
aquí es la clase de FileList
rastrillo entonces el problema está en Dir
clase subyacente de Ruby (que es utilizado por FileList
) que no coincida con los archivos que comienzan con .
para la *
comodín . La parte pertinente de rake.rb es
# Add matching glob patterns.
def add_matching(pattern)
Dir[pattern].each do |fn|
self << fn unless exclude?(fn)
end
end
a continuación es un truco feo que anula add_matching
para incluir también los archivos que comienzan con .
Con suerte alguien más va a ser a lo largo de sugerir una solución más elegante.
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
Actualización: acabo de probado esto en Linux aquí y los archivos que comienzan con .
no se incluyen tampoco. p.ej. Si tengo un directorio /home/mikej/root
con 2 subdirectorios a
y b
, donde cada uno contiene first.template
y luego .other.template
Rake::FileList.new('home/mikej/root/**/*.template')
=> ["/home/mikej/root/a/first.template", "/home/mikej/root/b/first.template"]
así que habría vuelva a comprobar el comportamiento en Linux y verificar que no hay algo más que está haciendo la diferencia en el comportamiento.
lo que sería el "camino alternativo"? –
No he encontrado una manera alternativa ya que los otros métodos en 'Dir' también se comportan igual. Sin embargo, vea la respuesta actualizada para una solución alternativa. – mikej
@ Andrew Bullock, por favor vea la actualización que he hecho describiendo el resultado de mi prueba en Linux, ya que tampoco parece incluir el. archivos: ¿podría ser una diferencia en la versión de Ruby en las 2 plataformas? Estoy en 1.8.6 en ambos casos. – mikej