Supponendo che FileList
qui è la classe FileList
dal rake allora il problema è nella sottostante Dir
classe di Ruby (che viene utilizzato da FileList
) non corrispondenti file che iniziano con .
per la *
jolly . La quota di competenza di rake.rb è
# Add matching glob patterns.
def add_matching(pattern)
Dir[pattern].each do |fn|
self << fn unless exclude?(fn)
end
end
seguito è riportato un brutto hack che sostituisce add_matching
per includere anche file che iniziano con .
Speriamo che qualcun altro sarà lungo di suggerire una soluzione più 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
Update: ho appena testato questo su Linux e qui i file che iniziano con .
non sono inclusi sia. per esempio. Se ho una directory /home/mikej/root
con 2 sottodirectory a
e b
in cui ognuno di essi contiene first.template
e .other.template
poi
Rake::FileList.new('home/mikej/root/**/*.template')
=> ["/home/mikej/root/a/first.template", "/home/mikej/root/b/first.template"]
quindi mi sarebbe doppio controllo il comportamento su Linux e verificare che non ci sia qualcosa d'altro che causa la differenza di comportamento.
quello che sarebbe il "via alternativa"? –
Non ho trovato un modo alternativo visto che anche gli altri metodi su 'Dir' si comportano allo stesso modo. Tuttavia, vedere la risposta aggiornata per una soluzione alternativa. – mikej
@Andrew Bullock per favore vedi l'aggiornamento che ho fatto descrivendo il risultato del mio test su Linux in quanto anche questo non sembra includere il. file - potrebbe essere una differenza nella versione di Ruby sulle 2 piattaforme? Sono in 1.8.6 in entrambi i casi. – mikej