Commit 9aab127f authored by Mislav Marohnić's avatar Mislav Marohnić
Browse files

Install Rake and Bundler in isolation when missing

Some Rubies need Rake or Bundler for the installation process. However,
since the host Ruby version might not have those gems installed, install
them in a temporary GEM_HOME and add their executables to PATH.

Fixes #426
parent 730a8164
Loading
Loading
Loading
Loading
+19 −0
Original line number Diff line number Diff line
@@ -703,10 +703,29 @@ rake() {
  if [ -e "./Gemfile" ]; then
    bundle exec rake "$@"
  else
    isolated_gem_dependency "rake --version" rake -v '~> 10.1.0'
    command rake "$@"
  fi
}

bundle() {
  isolated_gem_dependency "bundle --version" bundler -v '~> 1.3.5'
  command bundle "$@"
}

isolated_gem_dependency() {
  if ! command $1 &>/dev/null; then
    shift 1
    isolated_gem_install "$@"
  fi
}

isolated_gem_install() {
  export GEM_HOME="${PWD}/.gem"
  export PATH="${GEM_HOME}/bin:${PATH}"
  gem install "$@"
}

version() {
  echo "ruby-build ${RUBY_BUILD_VERSION}"
}
+7 −2
Original line number Diff line number Diff line
@@ -142,7 +142,8 @@ OUT
install_package "mruby-1.0" "http://ruby-lang.org/pub/mruby-1.0.tar.gz" mruby
DEF

  stub rake true
  stub gem false
  stub rake '--version : true' true

  run ruby-build "definition" "$INSTALL_ROOT"
  assert_success
@@ -162,8 +163,12 @@ DEF
install_package "rubinius-2.0.0" "http://releases.rubini.us/rubinius-2.0.0.tar.gz" rbx
DEF

  stub gem false
  stub rake false
  stub bundle ' : echo bundle >> build.log' \
  stub bundle \
    '--version : true' \
    ' : echo bundle >> build.log' \
    '--version : true' \
    " exec rake install : { cat build.log; echo bundle \"\$@\"; } >> '$INSTALL_ROOT/build.log'"

  run ruby-build "definition" "$INSTALL_ROOT"
+4 −2
Original line number Diff line number Diff line
@@ -3,8 +3,10 @@ export TMP="$BATS_TEST_DIRNAME/tmp"
if [ "$FIXTURE_ROOT" != "$BATS_TEST_DIRNAME/fixtures" ]; then
  export FIXTURE_ROOT="$BATS_TEST_DIRNAME/fixtures"
  export INSTALL_ROOT="$TMP/install"
  export PATH="$BATS_TEST_DIRNAME/../bin:$PATH"
  export PATH="$TMP/bin:$PATH"
  PATH=/usr/bin:/usr/sbin:/bin/:/sbin
  PATH="$BATS_TEST_DIRNAME/../bin:$PATH"
  PATH="$TMP/bin:$PATH"
  export PATH
fi

teardown() {