diff options
Diffstat (limited to 'support/vendor-gem.rb')
-rwxr-xr-x | support/vendor-gem.rb | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/support/vendor-gem.rb b/support/vendor-gem.rb new file mode 100755 index 0000000..4115a56 --- /dev/null +++ b/support/vendor-gem.rb @@ -0,0 +1,38 @@ +#!/usr/bin/env ruby +require 'fileutils' +require 'open3' + +VENDOR_PREFIX = 'lib/vendor' + +def main(gem, version, vendor_dir) + if !vendor_dir.start_with?(VENDOR_PREFIX) + abort "Invalid vendor_dir: must start with #{VENDOR_PREFIX}: #{vendor_dir.inspect}" + end + + FileUtils.rm_rf(vendor_dir) + + # Use clear-sources to force https://rubygems.org as the source + if !system(*%W[gem fetch #{gem} -v #{version} --clear-sources -s https://rubygems.org]) + abort "Failed to fetch gem" + end + + FileUtils.mkdir_p(vendor_dir) + + # A .gem file is a tar file containing a data.tar.gz file. + statuses = Open3.pipeline( + %W[tar -xOf - data.tar.gz], + %W[tar -zxf -], + in: "#{gem}-#{version}.gem", + chdir: vendor_dir + ) + + if !statuses.all?(&:success?) + abort "Failed to extract gem" + end +end + +if ARGV.count != 3 + abort "Usage: #{$PROGNAME} GEM VERSION VENDOR_DIR" +end + +main(*ARGV) |