Commit de409790 authored by Mislav Marohnić's avatar Mislav Marohnić
Browse files

Merge branch 'provide-bundle-rake'

parents eaa187b4 9a2c45ba
Loading
Loading
Loading
Loading
+28 −0
Original line number Diff line number Diff line
@@ -699,6 +699,34 @@ build_package_verify_openssl() {
  end' >&4 2>&1
}

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() {
  local output="$(command $1 2>/dev/null || true)"
  if [ -z "$output" ]; 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}"
}
+53 −12
Original line number Diff line number Diff line
@@ -13,7 +13,7 @@ setup() {
cached_tarball() {
  mkdir -p "$RUBY_BUILD_CACHE_PATH"
  pushd "$RUBY_BUILD_CACHE_PATH" >/dev/null
  tarball "$1"
  tarball "$@"
  popd >/dev/null
}

@@ -21,14 +21,20 @@ tarball() {
  local name="$1"
  local path="$PWD/$name"
  local configure="$path/configure"
  shift 1

  mkdir -p "$path"
  cat > "$configure" <<OUT
#!$BASH
echo "$name: \$@" > build.log
echo "$name: \$@" >> build.log
OUT
  chmod +x "$configure"

  for file; do
    mkdir -p "$(dirname "${path}/${file}")"
    touch "${path}/${file}"
  done

  tar czf "${path}.tar.gz" -C "${path%/*}" "$name"
}

@@ -122,23 +128,18 @@ OUT
}

@test "mruby strategy overwrites non-writable files" {
  mkdir -p "$RUBY_BUILD_CACHE_PATH"
  cd "$RUBY_BUILD_CACHE_PATH"
  mkdir -p "mruby-1.0/build/host/bin"
  touch "mruby-1.0/build/host/bin"/{mruby,mirb}
  tar czf "mruby-1.0.tar.gz" "mruby-1.0"
  cached_tarball "mruby-1.0" build/host/bin/{mruby,mirb}

  mkdir -p "$INSTALL_ROOT/bin"
  touch "$INSTALL_ROOT/bin/mruby"
  chmod -w "$INSTALL_ROOT/bin/mruby"

  cat > "definition" <<DEF
  stub gem false
  stub rake '--version : echo 1' true

  run_inline_definition <<DEF
install_package "mruby-1.0" "http://ruby-lang.org/pub/mruby-1.0.tar.gz" mruby
DEF

  stub rake true

  run ruby-build "definition" "$INSTALL_ROOT"
  assert_success

  unstub rake
@@ -147,3 +148,43 @@ DEF
  assert [ -e "$INSTALL_ROOT/bin/ruby" ]
  assert [ -e "$INSTALL_ROOT/bin/irb" ]
}

@test "mruby strategy fetches rake if missing" {
  cached_tarball "mruby-1.0" build/host/bin/mruby

  stub rake '--version : false' true
  stub gem 'install rake -v *10.1.0 : true'

  run_inline_definition <<DEF
install_package "mruby-1.0" "http://ruby-lang.org/pub/mruby-1.0.tar.gz" mruby
DEF
  assert_success

  unstub gem
  unstub rake
}

@test "rbx uses bundle then rake" {
  cached_tarball "rubinius-2.0.0" "Gemfile"

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

  run_inline_definition <<DEF
install_package "rubinius-2.0.0" "http://releases.rubini.us/rubinius-2.0.0.tar.gz" rbx
DEF
  assert_success

  unstub bundle

  assert_build_log <<OUT
bundle
rubinius-2.0.0: --prefix=$INSTALL_ROOT
bundle exec rake install
OUT
}
+5 −0
Original line number Diff line number Diff line
@@ -11,6 +11,11 @@ _STUB_RUN="${PROGRAM}_STUB_RUN"
_STUB_INDEX="${PROGRAM}_STUB_INDEX"
_STUB_RESULT="${PROGRAM}_STUB_RESULT"
_STUB_END="${PROGRAM}_STUB_END"
_STUB_DEBUG="${PROGRAM}_STUB_DEBUG"

if [ -n "${!_STUB_DEBUG}" ]; then
  echo "$program" "$@" >&${!_STUB_DEBUG}
fi

[ -e "${!_STUB_PLAN}" ] || exit 1
[ -n "${!_STUB_RUN}" ] || eval "${_STUB_RUN}"="${TMPDIR}/${program}-stub-run"
+14 −3
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() {
@@ -34,9 +36,18 @@ unstub() {

  export "${prefix}_STUB_END"=1

  "$path"
  local STATUS=0
  "$path" || STATUS="$?"

  rm -f "$path"
  rm -f "${TMP}/${program}-stub-plan" "${TMP}/${program}-stub-run"
  return "$STATUS"
}

run_inline_definition() {
  local definition="${TMP}/build-definition"
  cat > "$definition"
  run ruby-build "$definition" "${1:-$INSTALL_ROOT}"
}

install_fixture() {