Zakładając, że FileList
tutaj jest klasa FileList
z prowizji to problem jest w leżącej Dir
klasy Ruby (który jest używany przez FileList
) nie pasujące pliki zaczynające .
dla *
zamiennika . Odpowiednia porcja rake.rb jest
# Add matching glob patterns.
def add_matching(pattern)
Dir[pattern].each do |fn|
self << fn unless exclude?(fn)
end
end
Poniżej jest brzydki hack, który nadpisuje add_matching
również zawierać pliki zaczynając .
Mam nadzieję, że ktoś inny będzie wzdłuż zaproponować bardziej eleganckie rozwiązanie.
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
Aktualizacja: właśnie przetestowane na Linuksie tutaj i pliki zaczynające się .
nie są włączone albo. na przykład Jeśli mam katalogu /home/mikej/root
z 2 podkatalogów a
i b
gdzie każdy zawiera first.template
i .other.template
następnie
Rake::FileList.new('home/mikej/root/**/*.template')
=> ["/home/mikej/root/a/first.template", "/home/mikej/root/b/first.template"]
tak bym dokładnie sprawdzić zachowanie w systemie Linux i sprawdzić, czy nie jest coś innego co powoduje różnicę w zachowaniu.
co byłoby "alternatywną drogę"? –
Nie znalazłem alternatywnego sposobu, ponieważ inne metody na 'Dir' również zachowują się tak samo. Jednak zobacz zaktualizowaną odpowiedź na obejście. – mikej
@Andrew Bullock zapoznaj się z aktualizacją, której dokonałem, opisując wynik mojego testowania go na Linuksie, ponieważ to też nie obejmuje. pliki - czy może to być różnica w wersji Ruby na 2 platformach? W obu przypadkach mam 1.8.6. – mikej