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

Merge branch 'no-resume-download'

parents 556db9ab 1bcd249f
Loading
Loading
Loading
Loading
+13 −7
Original line number Diff line number Diff line
@@ -227,7 +227,7 @@ http_head_curl() {
}

http_get_curl() {
  curl -C - -o "${2:--}" -qsSLf "$1"
  curl -q -o "${2:--}" -sSLf "$1"
}

http_head_wget() {
@@ -235,7 +235,7 @@ http_head_wget() {
}

http_get_wget() {
  wget -nv -c -O "${2:--}" "$1"
  wget -nv -O "${2:--}" "$1"
}

fetch_tarball() {
@@ -261,7 +261,7 @@ fetch_tarball() {
    tar_args="${tar_args/z/j}"
  fi

  if ! symlink_tarball_from_cache "$package_filename" "$checksum"; then
  if ! reuse_existing_tarball "$package_filename" "$checksum"; then
    echo "Downloading ${package_filename}..." >&2
    http head "$mirror_url" &&
    download_tarball "$mirror_url" "$package_filename" "$checksum" ||
@@ -278,13 +278,19 @@ fetch_tarball() {
  } >&4 2>&1
}

symlink_tarball_from_cache() {
  [ -n "$RUBY_BUILD_CACHE_PATH" ] || return 1

reuse_existing_tarball() {
  local package_filename="$1"
  local cached_package_filename="${RUBY_BUILD_CACHE_PATH}/$package_filename"
  local checksum="$2"

  # Reuse existing file in build location
  if [ -e "$package_filename" ] && verify_checksum "$package_filename" "$checksum"; then
    return 0
  fi

  # Reuse previously downloaded file in cache location
  [ -n "$RUBY_BUILD_CACHE_PATH" ] || return 1
  local cached_package_filename="${RUBY_BUILD_CACHE_PATH}/$package_filename"

  [ -e "$cached_package_filename" ] || return 1
  verify_checksum "$cached_package_filename" "$checksum" >&4 2>&1 || return 1
  ln -s "$cached_package_filename" "$package_filename" >&4 2>&1 || return 1
+3 −3
Original line number Diff line number Diff line
@@ -11,7 +11,7 @@ setup() {

@test "packages are saved to download cache" {
  stub md5 true
  stub curl "-C - -o * -*S* http://example.com/* : cp $FIXTURE_ROOT/\${6##*/} \$4"
  stub curl "-q -o * -*S* http://example.com/* : cp $FIXTURE_ROOT/\${5##*/} \$3"

  install_fixture definitions/without-checksum
  [ "$status" -eq 0 ]
@@ -59,7 +59,7 @@ setup() {

  stub md5 true "echo invalid" "echo $checksum"
  stub curl "-*I* : true" \
    "-C - -o * -*S* http://?*/$checksum : cp $FIXTURE_ROOT/package-1.0.0.tar.gz \$4"
    "-q -o * -*S* http://?*/$checksum : cp $FIXTURE_ROOT/package-1.0.0.tar.gz \$3"

  touch "${RUBY_BUILD_CACHE_PATH}/package-1.0.0.tar.gz"

@@ -76,7 +76,7 @@ setup() {

@test "nonexistent cache directory is ignored" {
  stub md5 true
  stub curl "-C - -o * -*S* http://example.com/* : cp $FIXTURE_ROOT/\${6##*/} \$4"
  stub curl "-q -o * -*S* http://example.com/* : cp $FIXTURE_ROOT/\${5##*/} \$3"

  export RUBY_BUILD_CACHE_PATH="${TMP}/nonexistent"

+48 −5
Original line number Diff line number Diff line
@@ -7,7 +7,7 @@ export RUBY_BUILD_CACHE_PATH=

@test "package URL without checksum" {
  stub md5 true
  stub curl "-C - -o * -*S* http://example.com/* : cp $FIXTURE_ROOT/\${6##*/} \$4"
  stub curl "-q -o * -*S* http://example.com/* : cp $FIXTURE_ROOT/\${5##*/} \$3"

  install_fixture definitions/without-checksum
  [ "$status" -eq 0 ]
@@ -20,7 +20,7 @@ export RUBY_BUILD_CACHE_PATH=

@test "package URL with valid checksum" {
  stub md5 true "echo 83e6d7725e20166024a1eb74cde80677"
  stub curl "-C - -o * -*S* http://example.com/* : cp $FIXTURE_ROOT/\${6##*/} \$4"
  stub curl "-q -o * -*S* http://example.com/* : cp $FIXTURE_ROOT/\${5##*/} \$3"

  install_fixture definitions/with-checksum
  [ "$status" -eq 0 ]
@@ -33,7 +33,7 @@ export RUBY_BUILD_CACHE_PATH=

@test "package URL with invalid checksum" {
  stub md5 true "echo 83e6d7725e20166024a1eb74cde80677"
  stub curl "-C - -o * -*S* http://example.com/* : cp $FIXTURE_ROOT/\${6##*/} \$4"
  stub curl "-q -o * -*S* http://example.com/* : cp $FIXTURE_ROOT/\${5##*/} \$3"

  install_fixture definitions/with-invalid-checksum
  [ "$status" -eq 1 ]
@@ -46,7 +46,7 @@ export RUBY_BUILD_CACHE_PATH=

@test "package URL with checksum but no MD5 support" {
  stub md5 false
  stub curl "-C - -o * -*S* http://example.com/* : cp $FIXTURE_ROOT/\${6##*/} \$4"
  stub curl "-q -o * -*S* http://example.com/* : cp $FIXTURE_ROOT/\${5##*/} \$3"

  install_fixture definitions/with-checksum
  [ "$status" -eq 0 ]
@@ -59,7 +59,7 @@ export RUBY_BUILD_CACHE_PATH=

@test "package with invalid checksum" {
  stub md5 true "echo invalid"
  stub curl "-C - -o * -*S* http://example.com/* : cp $FIXTURE_ROOT/\${6##*/} \$4"
  stub curl "-q -o * -*S* http://example.com/* : cp $FIXTURE_ROOT/\${5##*/} \$3"

  install_fixture definitions/with-checksum
  [ "$status" -eq 1 ]
@@ -68,3 +68,46 @@ export RUBY_BUILD_CACHE_PATH=
  unstub curl
  unstub md5
}

@test "existing tarball in build location is reused" {
  stub md5 true "echo 83e6d7725e20166024a1eb74cde80677"
  stub curl false
  stub wget false

  export -n RUBY_BUILD_CACHE_PATH
  export RUBY_BUILD_BUILD_PATH="${TMP}/build"

  mkdir -p "$RUBY_BUILD_BUILD_PATH"
  ln -s "${FIXTURE_ROOT}/package-1.0.0.tar.gz" "$RUBY_BUILD_BUILD_PATH"

  run_inline_definition <<DEF
install_package "package-1.0.0" "http://example.com/packages/package-1.0.0.tar.gz#83e6d7725e20166024a1eb74cde80677" copy
DEF

  assert_success
  [ -x "${INSTALL_ROOT}/bin/package" ]

  unstub md5
}

@test "existing tarball in build location is discarded if not matching checksum" {
  stub md5 true \
    "echo invalid" \
    "echo 83e6d7725e20166024a1eb74cde80677"
  stub curl "-q -o * -*S* http://example.com/* : cp $FIXTURE_ROOT/\${5##*/} \$3"

  export -n RUBY_BUILD_CACHE_PATH
  export RUBY_BUILD_BUILD_PATH="${TMP}/build"

  mkdir -p "$RUBY_BUILD_BUILD_PATH"
  touch "${RUBY_BUILD_BUILD_PATH}/package-1.0.0.tar.gz"

  run_inline_definition <<DEF
install_package "package-1.0.0" "http://example.com/packages/package-1.0.0.tar.gz#83e6d7725e20166024a1eb74cde80677" copy
DEF

  assert_success
  [ -x "${INSTALL_ROOT}/bin/package" ]

  unstub md5
}
+7 −7
Original line number Diff line number Diff line
@@ -8,7 +8,7 @@ export RUBY_BUILD_MIRROR_URL=http://mirror.example.com

@test "package URL without checksum bypasses mirror" {
  stub md5 true
  stub curl "-C - -o * -*S* http://example.com/* : cp $FIXTURE_ROOT/\${6##*/} \$4"
  stub curl "-q -o * -*S* http://example.com/* : cp $FIXTURE_ROOT/\${5##*/} \$3"

  install_fixture definitions/without-checksum
  echo "$output" >&2
@@ -22,7 +22,7 @@ export RUBY_BUILD_MIRROR_URL=http://mirror.example.com

@test "package URL with checksum but no MD5 support bypasses mirror" {
  stub md5 false
  stub curl "-C - -o * -*S* http://example.com/* : cp $FIXTURE_ROOT/\${6##*/} \$4"
  stub curl "-q -o * -*S* http://example.com/* : cp $FIXTURE_ROOT/\${5##*/} \$3"

  install_fixture definitions/with-checksum
  [ "$status" -eq 0 ]
@@ -39,7 +39,7 @@ export RUBY_BUILD_MIRROR_URL=http://mirror.example.com

  stub md5 true "echo $checksum"
  stub curl "-*I* $mirror_url : true" \
    "-C - -o * -*S* $mirror_url : cp $FIXTURE_ROOT/package-1.0.0.tar.gz \$4"
    "-q -o * -*S* $mirror_url : cp $FIXTURE_ROOT/package-1.0.0.tar.gz \$3"

  install_fixture definitions/with-checksum
  [ "$status" -eq 0 ]
@@ -56,7 +56,7 @@ export RUBY_BUILD_MIRROR_URL=http://mirror.example.com

  stub md5 true "echo $checksum"
  stub curl "-*I* $mirror_url : false" \
    "-C - -o * -*S* http://example.com/* : cp $FIXTURE_ROOT/\${6##*/} \$4"
    "-q -o * -*S* http://example.com/* : cp $FIXTURE_ROOT/\${5##*/} \$3"

  install_fixture definitions/with-checksum
  [ "$status" -eq 0 ]
@@ -73,8 +73,8 @@ export RUBY_BUILD_MIRROR_URL=http://mirror.example.com

  stub md5 true "echo invalid" "echo $checksum"
  stub curl "-*I* $mirror_url : true" \
    "-C - -o * -*S* $mirror_url : cp $FIXTURE_ROOT/package-1.0.0.tar.gz \$4" \
    "-C - -o * -*S* http://example.com/* : cp $FIXTURE_ROOT/\${6##*/} \$4"
    "-q -o * -*S* $mirror_url : cp $FIXTURE_ROOT/package-1.0.0.tar.gz \$3" \
    "-q -o * -*S* http://example.com/* : cp $FIXTURE_ROOT/\${5##*/} \$3"

  install_fixture definitions/with-checksum
  echo "$output" >&2
@@ -92,7 +92,7 @@ export RUBY_BUILD_MIRROR_URL=http://mirror.example.com

  stub md5 true "echo $checksum"
  stub curl "-*I* : true" \
    "-C - -o * -*S* http://?*/$checksum : cp $FIXTURE_ROOT/package-1.0.0.tar.gz \$4" \
    "-q -o * -*S* http://?*/$checksum : cp $FIXTURE_ROOT/package-1.0.0.tar.gz \$3" \

  install_fixture definitions/with-checksum
  [ "$status" -eq 0 ]