From ee253e465b8e2f5acdb53daf572311e87055e082 Mon Sep 17 00:00:00 2001 From: Mike McQuaid Date: Sun, 7 May 2017 13:52:57 +0100 Subject: [PATCH] Vendor all Homebrew's gems. Homebrew's actually ended up using a fair few gems. While we want to avoid Bundler at runtime (and this PR still does that, in fact uses Bundler even less at runtime than it did before) writing our own version to use at build-time seems redundant. --- .bundle/config | 5 ++ .gitignore | 29 +++++-- .travis.yml | 9 +- Gemfile | 36 ++++++++ Gemfile.lock | 84 +++++++++++++++++++ Library/Homebrew/brew.rb | 19 ++++- Library/Homebrew/cask/lib/hbc/artifact/pkg.rb | 2 +- Library/Homebrew/cask/lib/hbc/cli/style.rb | 2 +- .../cask/lib/hbc/container/executable.rb | 2 +- .../Homebrew/cask/lib/hbc/system_command.rb | 2 +- Library/Homebrew/cmd/style.rb | 2 +- Library/Homebrew/config.rb | 2 - Library/Homebrew/constants.rb | 3 - Library/Homebrew/dev-cmd/audit.rb | 3 + Library/Homebrew/dev-cmd/man.rb | 2 +- Library/Homebrew/dev-cmd/tests.rb | 20 ++--- Library/Homebrew/os/mac/mach.rb | 2 +- Library/Homebrew/test/Gemfile | 12 --- Library/Homebrew/test/Gemfile.lock | 65 -------------- Library/Homebrew/test/cask/cask_spec.rb | 6 +- Library/Homebrew/test/cask/cli/style_spec.rb | 4 +- .../spec/shared_context/integration_test.rb | 10 +-- Library/Homebrew/test/support/lib/config.rb | 2 - Library/Homebrew/utils.rb | 32 +++++++ Library/Homebrew/vendor/README.md | 54 ------------ Library/Homebrew/vendor/bundler/setup.rb | 42 ++++++++++ .../ruby/2.0.0/gems/plist-3.3.0/LICENSE.txt | 20 +++++ .../2.0.0/gems/plist-3.3.0/lib}/plist.rb | 6 +- .../gems/plist-3.3.0/lib}/plist/generator.rb | 0 .../gems/plist-3.3.0/lib}/plist/parser.rb | 0 .../gems/plist-3.3.0/lib}/plist/version.rb | 0 .../ruby/2.0.0/gems/ruby-macho-1.1.0/LICENSE | 21 +++++ .../2.0.0/gems/ruby-macho-1.1.0/lib}/macho.rb | 0 .../ruby-macho-1.1.0/lib}/macho/exceptions.rb | 0 .../ruby-macho-1.1.0/lib}/macho/fat_file.rb | 0 .../ruby-macho-1.1.0/lib}/macho/headers.rb | 0 .../lib}/macho/load_commands.rb | 0 .../ruby-macho-1.1.0/lib}/macho/macho_file.rb | 0 .../ruby-macho-1.1.0/lib}/macho/sections.rb | 0 .../ruby-macho-1.1.0/lib}/macho/structure.rb | 0 .../gems/ruby-macho-1.1.0/lib}/macho/tools.rb | 0 .../gems/ruby-macho-1.1.0/lib}/macho/utils.rb | 0 .../gems/ruby-macho-1.1.0/lib}/macho/view.rb | 0 43 files changed, 315 insertions(+), 183 deletions(-) create mode 100644 .bundle/config create mode 100644 Gemfile create mode 100644 Gemfile.lock delete mode 100644 Library/Homebrew/constants.rb delete mode 100644 Library/Homebrew/test/Gemfile delete mode 100644 Library/Homebrew/test/Gemfile.lock delete mode 100644 Library/Homebrew/vendor/README.md create mode 100644 Library/Homebrew/vendor/bundler/setup.rb create mode 100644 Library/Homebrew/vendor/ruby/2.0.0/gems/plist-3.3.0/LICENSE.txt rename Library/Homebrew/vendor/{plist => ruby/2.0.0/gems/plist-3.3.0/lib}/plist.rb (74%) mode change 100755 => 100644 rename Library/Homebrew/vendor/{plist => ruby/2.0.0/gems/plist-3.3.0/lib}/plist/generator.rb (100%) mode change 100755 => 100644 rename Library/Homebrew/vendor/{plist => ruby/2.0.0/gems/plist-3.3.0/lib}/plist/parser.rb (100%) rename Library/Homebrew/vendor/{plist => ruby/2.0.0/gems/plist-3.3.0/lib}/plist/version.rb (100%) mode change 100755 => 100644 create mode 100644 Library/Homebrew/vendor/ruby/2.0.0/gems/ruby-macho-1.1.0/LICENSE rename Library/Homebrew/vendor/{macho => ruby/2.0.0/gems/ruby-macho-1.1.0/lib}/macho.rb (100%) rename Library/Homebrew/vendor/{macho => ruby/2.0.0/gems/ruby-macho-1.1.0/lib}/macho/exceptions.rb (100%) rename Library/Homebrew/vendor/{macho => ruby/2.0.0/gems/ruby-macho-1.1.0/lib}/macho/fat_file.rb (100%) rename Library/Homebrew/vendor/{macho => ruby/2.0.0/gems/ruby-macho-1.1.0/lib}/macho/headers.rb (100%) rename Library/Homebrew/vendor/{macho => ruby/2.0.0/gems/ruby-macho-1.1.0/lib}/macho/load_commands.rb (100%) rename Library/Homebrew/vendor/{macho => ruby/2.0.0/gems/ruby-macho-1.1.0/lib}/macho/macho_file.rb (100%) rename Library/Homebrew/vendor/{macho => ruby/2.0.0/gems/ruby-macho-1.1.0/lib}/macho/sections.rb (100%) rename Library/Homebrew/vendor/{macho => ruby/2.0.0/gems/ruby-macho-1.1.0/lib}/macho/structure.rb (100%) rename Library/Homebrew/vendor/{macho => ruby/2.0.0/gems/ruby-macho-1.1.0/lib}/macho/tools.rb (100%) rename Library/Homebrew/vendor/{macho => ruby/2.0.0/gems/ruby-macho-1.1.0/lib}/macho/utils.rb (100%) rename Library/Homebrew/vendor/{macho => ruby/2.0.0/gems/ruby-macho-1.1.0/lib}/macho/view.rb (100%) diff --git a/.bundle/config b/.bundle/config new file mode 100644 index 0000000000..0007666fd0 --- /dev/null +++ b/.bundle/config @@ -0,0 +1,5 @@ +--- +BUNDLE_CLEAN: "true" +BUNDLE_DISABLE_SHARED_GEMS: "true" +BUNDLE_PATH: "Library/Homebrew/vendor" +BUNDLE_JOBS: "3" diff --git a/.gitignore b/.gitignore index f7770612ed..5708a50f5a 100644 --- a/.gitignore +++ b/.gitignore @@ -8,15 +8,10 @@ !/Library/ # Ignore generated files within `Library` (again). -/Library/Homebrew/**/.bundle -/Library/Homebrew/**/vendor/bundle /Library/Homebrew/doc /Library/Homebrew/cask/bin /Library/Homebrew/cask/coverage /Library/Homebrew/cask/tmp -/Library/Homebrew/test/bin -/Library/Homebrew/test/coverage -/Library/Homebrew/test/fs_leak_log /Library/Homebrew/tmp /Library/LinkedKegs /Library/Locks @@ -24,8 +19,24 @@ /Library/PinnedTaps /Library/Taps -# Ignore vendored files within `Library`. +# Ignore some vendored files within `Library`. /Library/Homebrew/vendor/portable-ruby +/Library/Homebrew/vendor/ruby/2.0.0/bin +/Library/Homebrew/vendor/ruby/2.0.0/cache +/Library/Homebrew/vendor/ruby/2.0.0/extensions +/Library/Homebrew/vendor/ruby/2.0.0/gems/* +/Library/Homebrew/vendor/ruby/2.0.0/gems/ruby-macho-*/* +/Library/Homebrew/vendor/ruby/2.0.0/gems/plist-*/* +/Library/Homebrew/vendor/ruby/2.0.0/specifications +/Library/Homebrew/vendor/ruby/2.0.0/tmp + +# Unignore our vendored gems +!/Library/Homebrew/vendor/ruby/2.0.0/gems/ruby-macho-* +!/Library/Homebrew/vendor/ruby/2.0.0/gems/ruby-macho-*/LICENSE* +!/Library/Homebrew/vendor/ruby/2.0.0/gems/ruby-macho-*/lib +!/Library/Homebrew/vendor/ruby/2.0.0/gems/plist-* +!/Library/Homebrew/vendor/ruby/2.0.0/gems/plist-*/LICENSE* +!/Library/Homebrew/vendor/ruby/2.0.0/gems/plist-*/lib # Ignore `bin` contents (again). /bin @@ -50,13 +61,13 @@ !/completions # Unignore our root-level metadata files. +!/.bundle !/.gitignore !/.travis.yml !/.yardopts !/CODEOFCONDUCT.md !/CONTRIBUTING.md +!/Gemfile +!/Gemfile.lock !/LICENSE.txt !/README.md - -# Unignore tests' bundle config -!/Library/Homebrew/test/.bundle diff --git a/.travis.yml b/.travis.yml index 5e1906a5c7..f268e40ec6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,8 +1,6 @@ language: ruby -cache: - directories: - - $HOME/.gem/ruby - - Library/Homebrew/vendor/bundle +bundler_args: --path Library/Homebrew/vendor --standalone --jobs 3 +cache: bundler matrix: include: @@ -13,6 +11,9 @@ matrix: rvm: 2.0.0 before_install: + - export GEM_HOME="$PWD/Library/Homebrew/vendor/ruby/2.0.0" + - gem list --installed bundler || gem install bundler + - export PATH="$GEM_HOME/bin:$PATH" - export HOMEBREW_DEVELOPER=1 - if [ "${TRAVIS_OS_NAME}" = "osx" ]; then HOMEBREW_REPOSITORY="$(brew --repo)"; diff --git a/Gemfile b/Gemfile new file mode 100644 index 0000000000..d39abd77a0 --- /dev/null +++ b/Gemfile @@ -0,0 +1,36 @@ +source "https://rubygems.org" + +# brew * +gem "ruby-macho" + +# brew cask +gem "plist" + +# brew cask style +group :cask_style do + gem "rubocop-cask", "~> 0.12.0" +end + +# brew man +group :man do + gem "ronn" +end + +# brew style +group :style do + gem "rubocop", "~> 0.47.1" +end + +# brew tests +group :tests do + gem "parallel_tests" + gem "rspec" + gem "rspec-its", require: false + gem "rspec-wait", require: false +end + +# brew tests --coverage +group :coverage do + gem "codecov", require: false + gem "simplecov", require: false +end diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 0000000000..be4521e0e8 --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,84 @@ +GEM + remote: https://rubygems.org/ + specs: + ast (2.3.0) + codecov (0.1.10) + json + simplecov + url + diff-lcs (1.3) + docile (1.1.5) + hpricot (0.8.6) + json (2.1.0) + mustache (1.0.5) + parallel (1.11.1) + parallel_tests (2.14.1) + parallel + parser (2.4.0.0) + ast (~> 2.2) + plist (3.3.0) + powerpack (0.1.1) + public_suffix (2.0.5) + rainbow (2.2.2) + rake + rake (12.0.0) + rdiscount (2.2.0.1) + ronn (0.7.3) + hpricot (>= 0.8.2) + mustache (>= 0.7.0) + rdiscount (>= 1.5.8) + rspec (3.6.0) + rspec-core (~> 3.6.0) + rspec-expectations (~> 3.6.0) + rspec-mocks (~> 3.6.0) + rspec-core (3.6.0) + rspec-support (~> 3.6.0) + rspec-expectations (3.6.0) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.6.0) + rspec-its (1.2.0) + rspec-core (>= 3.0.0) + rspec-expectations (>= 3.0.0) + rspec-mocks (3.6.0) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.6.0) + rspec-support (3.6.0) + rspec-wait (0.0.9) + rspec (>= 3, < 4) + rubocop (0.47.1) + parser (>= 2.3.3.1, < 3.0) + powerpack (~> 0.1) + rainbow (>= 1.99.1, < 3.0) + ruby-progressbar (~> 1.7) + unicode-display_width (~> 1.0, >= 1.0.1) + rubocop-cask (0.12.0) + public_suffix (~> 2.0) + rubocop (~> 0.47.1) + ruby-macho (1.1.0) + ruby-progressbar (1.8.1) + simplecov (0.14.1) + docile (~> 1.1.0) + json (>= 1.8, < 3) + simplecov-html (~> 0.10.0) + simplecov-html (0.10.0) + unicode-display_width (1.2.1) + url (0.3.2) + +PLATFORMS + ruby + +DEPENDENCIES + codecov + parallel_tests + plist + ronn + rspec + rspec-its + rspec-wait + rubocop (~> 0.47.1) + rubocop-cask (~> 0.12.0) + ruby-macho + simplecov + +BUNDLED WITH + 1.14.6 diff --git a/Library/Homebrew/brew.rb b/Library/Homebrew/brew.rb index e07599ac6e..6dab50f294 100644 --- a/Library/Homebrew/brew.rb +++ b/Library/Homebrew/brew.rb @@ -8,9 +8,14 @@ std_trap = trap("INT") { exit! 130 } # no backtrace thanks RUBY_TWO = RUBY_VERSION.split(".").first.to_i >= 2 raise "Homebrew must be run under Ruby 2!" unless RUBY_TWO +homebrew_library_path = File.dirname(File.realpath(__FILE__)) +$:.unshift(homebrew_library_path) + +require_relative "#{homebrew_library_path}/vendor/bundler/setup" + require "pathname" -HOMEBREW_LIBRARY_PATH = Pathname.new(__FILE__).realpath.parent -$:.unshift(HOMEBREW_LIBRARY_PATH.to_s) +HOMEBREW_LIBRARY_PATH = Pathname.new(homebrew_library_path) + require "global" require "tap" @@ -20,6 +25,8 @@ if ARGV == %w[--version] || ARGV == %w[-v] exit 0 end +HOMEBREW_GEM_HOME = HOMEBREW_LIBRARY_PATH/"vendor/#{RUBY_ENGINE}/#{RUBY_VERSION}" + def require?(path) require path rescue LoadError => e @@ -52,6 +59,14 @@ begin # Add contributed commands to PATH before checking. path.append(Pathname.glob(Tap::TAP_DIRECTORY/"*/*/cmd")) + # Add RubyGems. + ENV["GEM_HOME"] = ENV["GEM_PATH"] = HOMEBREW_GEM_HOME + path.append(HOMEBREW_GEM_HOME/"bin") + + # Make RubyGems notice environment changes. + Gem.clear_paths + Gem::Specification.reset + # Add SCM wrappers. path.append(HOMEBREW_SHIMS_PATH/"scm") diff --git a/Library/Homebrew/cask/lib/hbc/artifact/pkg.rb b/Library/Homebrew/cask/lib/hbc/artifact/pkg.rb index c43481c82b..1ba2b4b97b 100644 --- a/Library/Homebrew/cask/lib/hbc/artifact/pkg.rb +++ b/Library/Homebrew/cask/lib/hbc/artifact/pkg.rb @@ -2,7 +2,7 @@ require "hbc/artifact/base" require "hbc/utils/hash_validator" -require "vendor/plist/plist" +require "plist" module Hbc module Artifact diff --git a/Library/Homebrew/cask/lib/hbc/cli/style.rb b/Library/Homebrew/cask/lib/hbc/cli/style.rb index 191aefd3c6..930742ed79 100644 --- a/Library/Homebrew/cask/lib/hbc/cli/style.rb +++ b/Library/Homebrew/cask/lib/hbc/cli/style.rb @@ -26,7 +26,7 @@ module Hbc def install_rubocop capture_stderr do begin - Homebrew.install_gem_setup_path! "rubocop-cask", HOMEBREW_RUBOCOP_CASK_VERSION, "rubocop" + Homebrew.run_bundler_if_needed! rescue SystemExit raise CaskError, Tty.strip_ansi($stderr.string).chomp.sub(/\AError: /, "") end diff --git a/Library/Homebrew/cask/lib/hbc/container/executable.rb b/Library/Homebrew/cask/lib/hbc/container/executable.rb index 848f6d4be2..61bd4ef9bb 100644 --- a/Library/Homebrew/cask/lib/hbc/container/executable.rb +++ b/Library/Homebrew/cask/lib/hbc/container/executable.rb @@ -1,5 +1,5 @@ require "hbc/container/naked" -require "vendor/macho/macho" +require "macho" module Hbc class Container diff --git a/Library/Homebrew/cask/lib/hbc/system_command.rb b/Library/Homebrew/cask/lib/hbc/system_command.rb index c14079bc8b..d610f0fde8 100644 --- a/Library/Homebrew/cask/lib/hbc/system_command.rb +++ b/Library/Homebrew/cask/lib/hbc/system_command.rb @@ -1,6 +1,6 @@ require "open3" require "shellwords" -require "vendor/plist/plist" +require "plist" require "extend/io" diff --git a/Library/Homebrew/cmd/style.rb b/Library/Homebrew/cmd/style.rb index cf41d91eeb..48ec3ee2e5 100644 --- a/Library/Homebrew/cmd/style.rb +++ b/Library/Homebrew/cmd/style.rb @@ -65,7 +65,7 @@ module Homebrew def check_style_impl(files, output_type, options = {}) fix = options[:fix] - Homebrew.install_gem_setup_path! "rubocop", HOMEBREW_RUBOCOP_VERSION + Homebrew.run_bundler_if_needed! require "rubocop" require_relative "../rubocops" diff --git a/Library/Homebrew/config.rb b/Library/Homebrew/config.rb index 30b7bc6c9c..38d7c80438 100644 --- a/Library/Homebrew/config.rb +++ b/Library/Homebrew/config.rb @@ -2,8 +2,6 @@ unless ENV["HOMEBREW_BREW_FILE"] raise "HOMEBREW_BREW_FILE was not exported! Please call bin/brew directly!" end -require "constants" - # Path to `bin/brew` main executable in HOMEBREW_PREFIX HOMEBREW_BREW_FILE = Pathname.new(ENV["HOMEBREW_BREW_FILE"]) diff --git a/Library/Homebrew/constants.rb b/Library/Homebrew/constants.rb deleted file mode 100644 index 827d5827f2..0000000000 --- a/Library/Homebrew/constants.rb +++ /dev/null @@ -1,3 +0,0 @@ -# RuboCop version used for `brew style` and `brew cask style` -HOMEBREW_RUBOCOP_VERSION = "0.47.1".freeze -HOMEBREW_RUBOCOP_CASK_VERSION = "~> 0.12.0".freeze # has to be updated when RuboCop version changes diff --git a/Library/Homebrew/dev-cmd/audit.rb b/Library/Homebrew/dev-cmd/audit.rb index cb25ca7943..9ea3faf11c 100644 --- a/Library/Homebrew/dev-cmd/audit.rb +++ b/Library/Homebrew/dev-cmd/audit.rb @@ -65,6 +65,9 @@ module Homebrew ENV.activate_extensions! ENV.setup_build_environment + # Add RubyGems (for RuboCop). + ENV["PATH"] = PATH.new(ENV["PATH"]).append(HOMEBREW_GEM_HOME/"bin") + if ARGV.named.empty? ff = Formula files = Tap.map(&:formula_dir) diff --git a/Library/Homebrew/dev-cmd/man.rb b/Library/Homebrew/dev-cmd/man.rb index 4e51039108..6e71c248b8 100644 --- a/Library/Homebrew/dev-cmd/man.rb +++ b/Library/Homebrew/dev-cmd/man.rb @@ -35,7 +35,7 @@ module Homebrew end def regenerate_man_pages - Homebrew.install_gem_setup_path! "ronn" + Homebrew.run_bundler_if_needed! markup = build_man_page convert_man_page(markup, TARGET_DOC_PATH/"Manpage.md") diff --git a/Library/Homebrew/dev-cmd/tests.rb b/Library/Homebrew/dev-cmd/tests.rb index 72d6143fcf..da1f5365cf 100644 --- a/Library/Homebrew/dev-cmd/tests.rb +++ b/Library/Homebrew/dev-cmd/tests.rb @@ -49,8 +49,6 @@ module Homebrew FileUtils.rm_f "test/coverage/.resultset.json" end - ENV["BUNDLE_GEMFILE"] = "#{HOMEBREW_LIBRARY_PATH}/test/Gemfile" - # Override author/committer as global settings might be invalid and thus # will cause silent failure during the setup of dummy Git repositories. %w[AUTHOR COMMITTER].each do |role| @@ -59,10 +57,7 @@ module Homebrew ENV["GIT_#{role}_DATE"] = "Sun Jan 22 19:59:13 2017 +0000" end - Homebrew.install_gem_setup_path! "bundler" - unless quiet_system("bundle", "check") - system "bundle", "install" - end + Homebrew.run_bundler_if_needed! parallel = true @@ -106,10 +101,15 @@ module Homebrew files = files.reject { |p| p =~ %r{^test/os/linux(/.*|_spec\.rb)$} } end - if parallel - system "bundle", "exec", "parallel_rspec", *opts, "--", *args, "--", *files - else - system "bundle", "exec", "rspec", *args, "--", *files + files.map! { |p| HOMEBREW_LIBRARY_PATH/p } + + (HOMEBREW_LIBRARY_PATH/"vendor/#{RUBY_ENGINE}/#{RUBY_VERSION}").cd do + if parallel + system "parallel_rspec", *opts, "--", *args, "--", *files + else + system "rspec", *args, "--", *files + end + FileUtils.rm_rf "tmp" end return if $?.success? diff --git a/Library/Homebrew/os/mac/mach.rb b/Library/Homebrew/os/mac/mach.rb index 9b53c49797..71f501fe95 100644 --- a/Library/Homebrew/os/mac/mach.rb +++ b/Library/Homebrew/os/mac/mach.rb @@ -1,4 +1,4 @@ -require "vendor/macho/macho" +require "macho" require "os/mac/architecture_list" module MachOShim diff --git a/Library/Homebrew/test/Gemfile b/Library/Homebrew/test/Gemfile deleted file mode 100644 index f3c16c710b..0000000000 --- a/Library/Homebrew/test/Gemfile +++ /dev/null @@ -1,12 +0,0 @@ -source "https://rubygems.org" - -gem "parallel_tests" -gem "rspec" -gem "rubocop" -gem "rspec-its", require: false -gem "rspec-wait", require: false - -group :coverage do - gem "simplecov", require: false - gem "codecov", require: false -end diff --git a/Library/Homebrew/test/Gemfile.lock b/Library/Homebrew/test/Gemfile.lock deleted file mode 100644 index 4d4eefd7d7..0000000000 --- a/Library/Homebrew/test/Gemfile.lock +++ /dev/null @@ -1,65 +0,0 @@ -GEM - remote: https://rubygems.org/ - specs: - ast (2.3.0) - codecov (0.1.9) - json - simplecov - url - diff-lcs (1.3) - docile (1.1.5) - json (2.0.3) - parallel (1.10.0) - parallel_tests (2.13.0) - parallel - parser (2.4.0.0) - ast (~> 2.2) - powerpack (0.1.1) - rainbow (2.2.1) - rspec (3.5.0) - rspec-core (~> 3.5.0) - rspec-expectations (~> 3.5.0) - rspec-mocks (~> 3.5.0) - rspec-core (3.5.4) - rspec-support (~> 3.5.0) - rspec-expectations (3.5.0) - diff-lcs (>= 1.2.0, < 2.0) - rspec-support (~> 3.5.0) - rspec-its (1.2.0) - rspec-core (>= 3.0.0) - rspec-expectations (>= 3.0.0) - rspec-mocks (3.5.0) - diff-lcs (>= 1.2.0, < 2.0) - rspec-support (~> 3.5.0) - rspec-support (3.5.0) - rspec-wait (0.0.9) - rspec (>= 3, < 4) - rubocop (0.47.1) - parser (>= 2.3.3.1, < 3.0) - powerpack (~> 0.1) - rainbow (>= 1.99.1, < 3.0) - ruby-progressbar (~> 1.7) - unicode-display_width (~> 1.0, >= 1.0.1) - ruby-progressbar (1.8.1) - simplecov (0.13.0) - docile (~> 1.1.0) - json (>= 1.8, < 3) - simplecov-html (~> 0.10.0) - simplecov-html (0.10.0) - unicode-display_width (1.1.3) - url (0.3.2) - -PLATFORMS - ruby - -DEPENDENCIES - codecov - parallel_tests - rspec - rspec-its - rspec-wait - rubocop - simplecov - -BUNDLED WITH - 1.14.5 diff --git a/Library/Homebrew/test/cask/cask_spec.rb b/Library/Homebrew/test/cask/cask_spec.rb index 3736f3c015..a8c4ecf5f6 100644 --- a/Library/Homebrew/test/cask/cask_spec.rb +++ b/Library/Homebrew/test/cask/cask_spec.rb @@ -24,7 +24,7 @@ describe Hbc::Cask, :cask do describe "load" do let(:tap_path) { Hbc.default_tap.path } let(:file_dirname) { Pathname.new(__FILE__).dirname } - let(:relative_tap_path) { tap_path.relative_path_from(file_dirname) } + let(:relative_tap_path) { tap_path.realpath.relative_path_from(file_dirname) } it "returns an instance of the Cask for the given token" do c = Hbc::CaskLoader.load("local-caffeine") @@ -56,7 +56,9 @@ describe Hbc::Cask, :cask do end it "returns an instance of the Cask from a relative file location" do - c = Hbc::CaskLoader.load(relative_tap_path/"Casks/local-caffeine.rb") + c = file_dirname.cd do + Hbc::CaskLoader.load(relative_tap_path/"Casks/local-caffeine.rb") + end expect(c).to be_kind_of(Hbc::Cask) expect(c.token).to eq("local-caffeine") end diff --git a/Library/Homebrew/test/cask/cli/style_spec.rb b/Library/Homebrew/test/cask/cli/style_spec.rb index d41636beb4..d021d8000a 100644 --- a/Library/Homebrew/test/cask/cli/style_spec.rb +++ b/Library/Homebrew/test/cask/cli/style_spec.rb @@ -62,7 +62,7 @@ describe Hbc::CLI::Style, :cask do context "when installation succeeds" do before do - allow(Homebrew).to receive(:install_gem_setup_path!) + allow(Homebrew).to receive(:run_bundler_if_needed!) end it "exits successfully" do @@ -72,7 +72,7 @@ describe Hbc::CLI::Style, :cask do context "when installation fails" do before do - allow(Homebrew).to receive(:install_gem_setup_path!).and_raise(SystemExit) + allow(Homebrew).to receive(:run_bundler_if_needed!).and_raise(SystemExit) end it "raises an error" do diff --git a/Library/Homebrew/test/support/helper/spec/shared_context/integration_test.rb b/Library/Homebrew/test/support/helper/spec/shared_context/integration_test.rb index ae1854f589..3a36f18534 100644 --- a/Library/Homebrew/test/support/helper/spec/shared_context/integration_test.rb +++ b/Library/Homebrew/test/support/helper/spec/shared_context/integration_test.rb @@ -89,12 +89,10 @@ RSpec.shared_context "integration test" do ruby_args << "-rtest/support/helper/integration_mocks" ruby_args << (HOMEBREW_LIBRARY_PATH/"brew.rb").resolved_path.to_s - Bundler.with_original_env do - stdout, stderr, status = Open3.capture3(env, RUBY_PATH, *ruby_args, *args) - $stdout.print stdout - $stderr.print stderr - status - end + stdout, stderr, status = Open3.capture3(env, RUBY_PATH, *ruby_args, *args) + $stdout.print stdout + $stderr.print stderr + status end def setup_test_formula(name, content = nil) diff --git a/Library/Homebrew/test/support/lib/config.rb b/Library/Homebrew/test/support/lib/config.rb index 3a0a767222..fb5c210fee 100644 --- a/Library/Homebrew/test/support/lib/config.rb +++ b/Library/Homebrew/test/support/lib/config.rb @@ -2,8 +2,6 @@ unless ENV["HOMEBREW_BREW_FILE"] raise "HOMEBREW_BREW_FILE was not exported! Please call bin/brew directly!" end -require "constants" - require "tmpdir" require "pathname" diff --git a/Library/Homebrew/utils.rb b/Library/Homebrew/utils.rb index c37633e41c..60af39d930 100644 --- a/Library/Homebrew/utils.rb +++ b/Library/Homebrew/utils.rb @@ -221,6 +221,38 @@ module Homebrew EOS end + def run_bundler_if_needed! + return unless Pathname.glob("#{HOMEBREW_GEM_HOME}/bin/*").empty? + + if Gem::Specification.find_all_by_name("bundler").empty? + ohai "Installing Bundler..." + + # Do `gem install [...]` without having to spawn a separate process or + # having to find the right `gem` binary for the running Ruby interpreter. + require "rubygems/commands/install_command" + install_cmd = Gem::Commands::InstallCommand.new + install_cmd.handle_options(%w[--no-ri --no-rdoc bundler]) + exit_code = 1 # Should not matter as `install_cmd.execute` always throws. + begin + install_cmd.execute + rescue Gem::SystemExitException => e + exit_code = e.exit_code + end + odie "Failed to install Bundler!" if exit_code.nonzero? + end + + HOMEBREW_REPOSITORY.cd do + unless quiet_system("bundle", "check") + ohai "Installing RubyGems..." + success = system "bundle", "install", + "--path", "Library/Homebrew/vendor", + "--standalone", + "--jobs", "3" + odie "Failed to install RubyGems!" unless success + end + end + end + # Hash of Module => Set(method_names) @injected_dump_stat_modules = {} diff --git a/Library/Homebrew/vendor/README.md b/Library/Homebrew/vendor/README.md deleted file mode 100644 index b408631c7a..0000000000 --- a/Library/Homebrew/vendor/README.md +++ /dev/null @@ -1,54 +0,0 @@ -Vendored Dependencies -===================== - -* [plist](https://github.com/patsplat/plist), version 3.3.0 - -* [ruby-macho](https://github.com/Homebrew/ruby-macho), version 1.1.0 - -## Licenses: - -### plist - -> Copyright (c) 2006-2010, Ben Bleything and Patrick May -> -> Permission is hereby granted, free of charge, to any person obtaining -> a copy of this software and associated documentation files (the -> "Software"), to deal in the Software without restriction, including -> without limitation the rights to use, copy, modify, merge, publish, -> distribute, sublicense, and/or sell copies of the Software, and to -> permit persons to whom the Software is furnished to do so, subject to -> the following conditions: -> -> The above copyright notice and this permission notice shall be included -> in all copies or substantial portions of the Software. -> -> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -> KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -> WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -> NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -> LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -> OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -> WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -### ruby-macho - -> The MIT License -> Copyright (c) 2015, 2016, 2017 William Woodruff -> -> Permission is hereby granted, free of charge, to any person obtaining a copy -> of this software and associated documentation files (the "Software"), to deal -> in the Software without restriction, including without limitation the rights -> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -> copies of the Software, and to permit persons to whom the Software is -> furnished to do so, subject to the following conditions: -> -> The above copyright notice and this permission notice shall be included in -> all copies or substantial portions of the Software. -> -> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -> THE SOFTWARE. diff --git a/Library/Homebrew/vendor/bundler/setup.rb b/Library/Homebrew/vendor/bundler/setup.rb new file mode 100644 index 0000000000..1fdc2512fd --- /dev/null +++ b/Library/Homebrew/vendor/bundler/setup.rb @@ -0,0 +1,42 @@ +require 'rbconfig' +# ruby 1.8.7 doesn't define RUBY_ENGINE +ruby_engine = defined?(RUBY_ENGINE) ? RUBY_ENGINE : 'ruby' +ruby_version = RbConfig::CONFIG["ruby_version"] +path = File.expand_path('..', __FILE__) +$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/rake-12.0.0/lib" +$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/ast-2.3.0/lib" +$:.unshift "#{path}/" +$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/extensions/universal-darwin-16/2.0.0/json-2.1.0" +$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/json-2.1.0/lib" +$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/docile-1.1.5/lib" +$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/simplecov-html-0.10.0/lib" +$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/simplecov-0.14.1/lib" +$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/url-0.3.2/lib" +$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/codecov-0.1.10/lib" +$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/diff-lcs-1.3/lib" +$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/extensions/universal-darwin-16/2.0.0/hpricot-0.8.6" +$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/hpricot-0.8.6/lib" +$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/mustache-1.0.5/lib" +$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/parallel-1.11.1/lib" +$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/parallel_tests-2.14.1/lib" +$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/parser-2.4.0.0/lib" +$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/plist-3.3.0/lib" +$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/powerpack-0.1.1/lib" +$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/public_suffix-2.0.5/lib" +$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/extensions/universal-darwin-16/2.0.0/rainbow-2.2.2" +$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/rainbow-2.2.2/lib" +$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/extensions/universal-darwin-16/2.0.0/rdiscount-2.2.0.1" +$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/rdiscount-2.2.0.1/lib" +$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/ronn-0.7.3/lib" +$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/rspec-support-3.6.0/lib" +$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/rspec-core-3.6.0/lib" +$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/rspec-expectations-3.6.0/lib" +$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/rspec-mocks-3.6.0/lib" +$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/rspec-3.6.0/lib" +$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/rspec-its-1.2.0/lib" +$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/rspec-wait-0.0.9/lib" +$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/ruby-progressbar-1.8.1/lib" +$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/unicode-display_width-1.2.1/lib" +$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/rubocop-0.47.1/lib" +$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/rubocop-cask-0.12.0/lib" +$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/gems/ruby-macho-1.1.0/lib" diff --git a/Library/Homebrew/vendor/ruby/2.0.0/gems/plist-3.3.0/LICENSE.txt b/Library/Homebrew/vendor/ruby/2.0.0/gems/plist-3.3.0/LICENSE.txt new file mode 100644 index 0000000000..0ccffe7bf3 --- /dev/null +++ b/Library/Homebrew/vendor/ruby/2.0.0/gems/plist-3.3.0/LICENSE.txt @@ -0,0 +1,20 @@ +Copyright (c) 2006-2010, Ben Bleything and Patrick May + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY +KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/Library/Homebrew/vendor/plist/plist.rb b/Library/Homebrew/vendor/ruby/2.0.0/gems/plist-3.3.0/lib/plist.rb old mode 100755 new mode 100644 similarity index 74% rename from Library/Homebrew/vendor/plist/plist.rb rename to Library/Homebrew/vendor/ruby/2.0.0/gems/plist-3.3.0/lib/plist.rb index 82ecb27d28..986dad4617 --- a/Library/Homebrew/vendor/plist/plist.rb +++ b/Library/Homebrew/vendor/ruby/2.0.0/gems/plist-3.3.0/lib/plist.rb @@ -13,9 +13,9 @@ require 'base64' require 'cgi' require 'stringio' -require_relative 'plist/generator' -require_relative 'plist/parser' -require_relative 'plist/version' +require 'plist/generator' +require 'plist/parser' +require 'plist/version' module Plist end diff --git a/Library/Homebrew/vendor/plist/plist/generator.rb b/Library/Homebrew/vendor/ruby/2.0.0/gems/plist-3.3.0/lib/plist/generator.rb old mode 100755 new mode 100644 similarity index 100% rename from Library/Homebrew/vendor/plist/plist/generator.rb rename to Library/Homebrew/vendor/ruby/2.0.0/gems/plist-3.3.0/lib/plist/generator.rb diff --git a/Library/Homebrew/vendor/plist/plist/parser.rb b/Library/Homebrew/vendor/ruby/2.0.0/gems/plist-3.3.0/lib/plist/parser.rb similarity index 100% rename from Library/Homebrew/vendor/plist/plist/parser.rb rename to Library/Homebrew/vendor/ruby/2.0.0/gems/plist-3.3.0/lib/plist/parser.rb diff --git a/Library/Homebrew/vendor/plist/plist/version.rb b/Library/Homebrew/vendor/ruby/2.0.0/gems/plist-3.3.0/lib/plist/version.rb old mode 100755 new mode 100644 similarity index 100% rename from Library/Homebrew/vendor/plist/plist/version.rb rename to Library/Homebrew/vendor/ruby/2.0.0/gems/plist-3.3.0/lib/plist/version.rb diff --git a/Library/Homebrew/vendor/ruby/2.0.0/gems/ruby-macho-1.1.0/LICENSE b/Library/Homebrew/vendor/ruby/2.0.0/gems/ruby-macho-1.1.0/LICENSE new file mode 100644 index 0000000000..d68fe0fbd1 --- /dev/null +++ b/Library/Homebrew/vendor/ruby/2.0.0/gems/ruby-macho-1.1.0/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2015, 2016 William Woodruff + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/Library/Homebrew/vendor/macho/macho.rb b/Library/Homebrew/vendor/ruby/2.0.0/gems/ruby-macho-1.1.0/lib/macho.rb similarity index 100% rename from Library/Homebrew/vendor/macho/macho.rb rename to Library/Homebrew/vendor/ruby/2.0.0/gems/ruby-macho-1.1.0/lib/macho.rb diff --git a/Library/Homebrew/vendor/macho/macho/exceptions.rb b/Library/Homebrew/vendor/ruby/2.0.0/gems/ruby-macho-1.1.0/lib/macho/exceptions.rb similarity index 100% rename from Library/Homebrew/vendor/macho/macho/exceptions.rb rename to Library/Homebrew/vendor/ruby/2.0.0/gems/ruby-macho-1.1.0/lib/macho/exceptions.rb diff --git a/Library/Homebrew/vendor/macho/macho/fat_file.rb b/Library/Homebrew/vendor/ruby/2.0.0/gems/ruby-macho-1.1.0/lib/macho/fat_file.rb similarity index 100% rename from Library/Homebrew/vendor/macho/macho/fat_file.rb rename to Library/Homebrew/vendor/ruby/2.0.0/gems/ruby-macho-1.1.0/lib/macho/fat_file.rb diff --git a/Library/Homebrew/vendor/macho/macho/headers.rb b/Library/Homebrew/vendor/ruby/2.0.0/gems/ruby-macho-1.1.0/lib/macho/headers.rb similarity index 100% rename from Library/Homebrew/vendor/macho/macho/headers.rb rename to Library/Homebrew/vendor/ruby/2.0.0/gems/ruby-macho-1.1.0/lib/macho/headers.rb diff --git a/Library/Homebrew/vendor/macho/macho/load_commands.rb b/Library/Homebrew/vendor/ruby/2.0.0/gems/ruby-macho-1.1.0/lib/macho/load_commands.rb similarity index 100% rename from Library/Homebrew/vendor/macho/macho/load_commands.rb rename to Library/Homebrew/vendor/ruby/2.0.0/gems/ruby-macho-1.1.0/lib/macho/load_commands.rb diff --git a/Library/Homebrew/vendor/macho/macho/macho_file.rb b/Library/Homebrew/vendor/ruby/2.0.0/gems/ruby-macho-1.1.0/lib/macho/macho_file.rb similarity index 100% rename from Library/Homebrew/vendor/macho/macho/macho_file.rb rename to Library/Homebrew/vendor/ruby/2.0.0/gems/ruby-macho-1.1.0/lib/macho/macho_file.rb diff --git a/Library/Homebrew/vendor/macho/macho/sections.rb b/Library/Homebrew/vendor/ruby/2.0.0/gems/ruby-macho-1.1.0/lib/macho/sections.rb similarity index 100% rename from Library/Homebrew/vendor/macho/macho/sections.rb rename to Library/Homebrew/vendor/ruby/2.0.0/gems/ruby-macho-1.1.0/lib/macho/sections.rb diff --git a/Library/Homebrew/vendor/macho/macho/structure.rb b/Library/Homebrew/vendor/ruby/2.0.0/gems/ruby-macho-1.1.0/lib/macho/structure.rb similarity index 100% rename from Library/Homebrew/vendor/macho/macho/structure.rb rename to Library/Homebrew/vendor/ruby/2.0.0/gems/ruby-macho-1.1.0/lib/macho/structure.rb diff --git a/Library/Homebrew/vendor/macho/macho/tools.rb b/Library/Homebrew/vendor/ruby/2.0.0/gems/ruby-macho-1.1.0/lib/macho/tools.rb similarity index 100% rename from Library/Homebrew/vendor/macho/macho/tools.rb rename to Library/Homebrew/vendor/ruby/2.0.0/gems/ruby-macho-1.1.0/lib/macho/tools.rb diff --git a/Library/Homebrew/vendor/macho/macho/utils.rb b/Library/Homebrew/vendor/ruby/2.0.0/gems/ruby-macho-1.1.0/lib/macho/utils.rb similarity index 100% rename from Library/Homebrew/vendor/macho/macho/utils.rb rename to Library/Homebrew/vendor/ruby/2.0.0/gems/ruby-macho-1.1.0/lib/macho/utils.rb diff --git a/Library/Homebrew/vendor/macho/macho/view.rb b/Library/Homebrew/vendor/ruby/2.0.0/gems/ruby-macho-1.1.0/lib/macho/view.rb similarity index 100% rename from Library/Homebrew/vendor/macho/macho/view.rb rename to Library/Homebrew/vendor/ruby/2.0.0/gems/ruby-macho-1.1.0/lib/macho/view.rb