에 대한 파일의 보석의 목록을 결정 : 불행하게도난 항상 파일이 보석 패키지로 가야를 결정하는 <code>git</code>을 사용했습니다 사양
gem.files = `git ls-files`.split "\n"
, this approach has recently proved to be inappropriate을. 나는 독립적 인 Ruby 솔루션이 필요합니다.
내 첫 번째 아이디어는 전체 디렉토리를 단순히 글로브하는 것이었지만 불필요한 파일을 포함시킬 가능성이 높습니다. 그래서이 문제를 연구 한 후에, 나는이 함께했다하십시오 gemspec
에 대한 조금 복잡한 것 같습니다
# example.gemspec
directory = File.dirname File.expand_path __FILE__
dotfiles = %w(.gitignore .rvmrc)
ignore_file = '.gitignore'
file_list = []
Dir.chdir directory do
ignored = File.readlines(ignore_file).map(&:chomp).reject { |glob| glob =~ /\A(#|\s*\z)/ }
file_list.replace Dir['**/**'] + dotfiles
file_list.delete_if do |file|
File.directory?(file) or ignored.any? { |glob| File.fnmatch? glob, file }
end
end
# Later...
gem.files = file_list
합니다. 또한 gitignore
's pattern format을 완전히 지원하지 않습니다. 현재 작동하는 것 같지만 차후에 문제가 발생하지는 않을 것입니다.
보석의 파일 목록을 계산하는 더 간단하지만 강력한 방법이 있습니까? 대부분의 보석은 분명히 git ls-files
을 사용하고, 비슷한 해결책을 사용하지 않거나 파일을 수동으로 지정하지 않습니다. 당신은 순수 루비와 프로젝트의 모든 파일을 나열 할 수 있습니다
Rubygems는 이미 디렉토리를 무시합니다. https://github.com/rubygems/rubygems/blob/master/lib/rubygems/specification.rb#L306-L307 - 단지'Dir [ '**/*']'는 아마 많은 사람들에게 좋을 것이다. 프로젝트. – Nevir