gitignoreするmiddleman

middleman 4ではファイル名、ファイル名のパターン(glob)、正規表現、ブロックでsourceディレクトリ以下のファイルを無視することができる。

で、エディタの一時ファイルを無視させるとか、ドットファイルを無視させるとか、ちまちまやっていたある時、.gitignoreをmiddlemanが見てくれたらいいんじゃないかと思いいたった。

最初はgitignore-parser.gemあたりはないのかなと探してみたりしたのだけど、少し調べたらcheck-ignoreで十分なことが分かった。

if build?
  git_ignored =
    `find #{config[:source].shellescape} -print | git check-ignore --stdin`
      .gsub(%r{^#{Regexp.quote(config[:source])}/}, '').split(/\n/)
  ignore { |path| git_ignored.include?(path) }
end

ちなみに最初はこんなの書いてた:

ignore { |path| system 'git', 'check-ignore', '-q', path }