Я всегда использовал git
, чтобы определить, какие файлы должны войти в пакет gem :
gem.files = `git ls-files`.split "\n"
. К сожалению, этот подход недавно оказался неприемлемым . Мне нужно самодостаточное -чистое -решение Ruby.
Моя первая идея заключалась в том, чтобы просто замаскировать весь каталог, но это само по себе может включать нежелательные файлы. Итак, изучив проблему, я пришел к следующему:
# 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
Это кажется немного сложным для gemspec
. Он также не полностью поддерживаетgitignore
формат шаблона 's . В настоящее время кажется, что это работает, но я бы предпочел не сталкиваться с проблемами позже.
Есть ли более простой, но надежный способ вычислить список файлов драгоценного камня? Большинство драгоценных камней, по-видимому, используют git ls-files
, а те, которые либо не используют решение, подобное моему, либо не указывают файлы вручную.