开发者

how do i get Ruby FileList to pick up files without a name, like .htaccess on windows

I want to search my filesystem for any files with the extension .template.

The below works fine for everything except .htaccess.template

FileList.new(File.join(root, '**', '*.template')).each do |file|
    # 开发者_高级运维do stuff with file
end 

because windows doesn't like nameless files, grrrr

How do I make this work on Windows? This code works fine on Linux....


How about

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


Assuming that FileList here is the FileList class from rake then the problem is in Ruby's underlying Dir class (which is used by FileList) not matching files starting with . for the * wildcard. The relevant portion of rake.rb is

# Add matching glob patterns.
def add_matching(pattern)
  Dir[pattern].each do |fn|
    self << fn unless exclude?(fn)
  end
end

Below is an ugly hack that overrides add_matching to also include files starting with . Hopefully someone else will be along to suggest a more elegant solution.

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: I have just tested this on Linux here and the files starting with . are not included either. e.g. If I have a directory /home/mikej/root with 2 subdirectories a and b where each contains first.template and .other.template then

Rake::FileList.new('home/mikej/root/**/*.template')
=> ["/home/mikej/root/a/first.template", "/home/mikej/root/b/first.template"]

so I would double check the behaviour on Linux and verify that there isn't something else causing the difference in behaviour.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜