için dosyaların GEM listesini belirleme: MaalesefHep dosyalar mücevher paketine gitmek gerektiğini belirlemek için <code>git</code> kullandım şartname
gem.files = `git ls-files`.split "\n"
, this approach has recently proved to be inappropriate. İhtiyacım olan, tam bir Ruby çözümüne ihtiyacım var.
İlk düşüncem sadece dizinin tamamını karıştırmaktı, ancak tek başına istenmeyen dosyaları içerme olasılığı yüksektir. Yani, sorun üzerinde araştırma sonra ben bu geldi: Bir gemspec
için biraz karmaşık görünüyor
# 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
. Ayrıca tam olarak gitignore
's pattern format'u desteklemiyor. Şu anda işe yarıyor gibi görünüyor ama daha sonra problemlerle karşılaşmamayı tercih ediyorum.
Gem'in dosya listesini hesaplamanın daha basit ama sağlam bir yolu var mı? Çoğu mücevher görünüşte git ls-files
kullanıyor ve benimkiyle benzer bir çözüm kullanmayan veya dosyaları elle belirtenler. Sen saf Ruby ile projenin tüm dosyaları listeleyebilirsiniz
Rubygems'in zaten sizin için dizinleri göz ardı ettiğini unutmayın: https://github.com/rubygems/rubygems/blob/master/lib/rubygems/specification.rb#L306-L307 - sadece 'Dir ['**/*']' dir Muhtemelen birçok kişi için iyi projeler. – Nevir