Определение списка файлов гема для спецификации

Я всегда использовал 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, а те, которые либо не используют решение, подобное моему, либо не указывают файлы вручную.

7
задан Matheus Moreira 9 August 2012 в 13:01
поделиться