मैं हमेशा git
का उपयोग किया है निर्धारित करने के लिए जो फ़ाइलों मणि पैकेज में जाना चाहिए के लिए फ़ाइलों की मणि की सूची का निर्धारण:विनिर्देश
gem.files = `git ls-files`.split "\n"
दुर्भाग्य से, this approach has recently proved to be inappropriate। मुझे एक आत्मनिर्भर, शुद्ध-रूबी समाधान की आवश्यकता है।
मेरा पहला विचार बस पूरी निर्देशिका को ग्लोब करना था, लेकिन अकेले ही अवांछित फ़ाइलों को शामिल करने की संभावना है।
# 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 pattern format का पूरी तरह से समर्थन नहीं करता है। यह वर्तमान में काम करता प्रतीत होता है लेकिन मैं बाद में समस्याओं में भाग नहीं लेगा।
क्या मणि की फ़ाइलों की सूची की गणना करने का एक आसान लेकिन मजबूत तरीका है? ज्यादातर रत्न स्पष्ट रूप से git ls-files
का उपयोग करते हैं, और वे जो मेरे जैसे समाधान का उपयोग नहीं करते हैं या फ़ाइलों को मैन्युअल रूप से निर्दिष्ट नहीं करते हैं।
ध्यान दें कि Rubygems पहले से ही आपके लिए निर्देशिकाओं को अनदेखा करता है: https://github.com/rubygems/rubygems/blob/master/lib/rubygems/specification.rb#L306-L307 - बस 'Dir [' **/* '] 'है शायद कई के लिए ठीक है परियोजनाओं। – Nevir