2010-03-29 10 views

risposta

6

Come su

Dir.glob([".*.template", "*.template"]) 
1

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.

+0

quello che sarebbe il "via alternativa"? –

+0

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

+0

@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

Problemi correlati