Loading bin/ruby-build +13 −7 Original line number Diff line number Diff line Loading @@ -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() { Loading @@ -235,7 +235,7 @@ http_head_wget() { } http_get_wget() { wget -nv -c -O "${2:--}" "$1" wget -nv -O "${2:--}" "$1" } fetch_tarball() { Loading @@ -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" || Loading @@ -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 Loading test/cache.bats +3 −3 Original line number Diff line number Diff line Loading @@ -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 ] Loading Loading @@ -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" Loading @@ -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" Loading test/checksum.bats +48 −5 Original line number Diff line number Diff line Loading @@ -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 ] Loading @@ -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 ] Loading @@ -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 ] Loading @@ -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 ] Loading @@ -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 ] Loading @@ -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 } test/mirror.bats +7 −7 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 ] Loading @@ -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 ] Loading @@ -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 ] Loading @@ -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 Loading @@ -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 ] Loading Loading
bin/ruby-build +13 −7 Original line number Diff line number Diff line Loading @@ -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() { Loading @@ -235,7 +235,7 @@ http_head_wget() { } http_get_wget() { wget -nv -c -O "${2:--}" "$1" wget -nv -O "${2:--}" "$1" } fetch_tarball() { Loading @@ -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" || Loading @@ -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 Loading
test/cache.bats +3 −3 Original line number Diff line number Diff line Loading @@ -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 ] Loading Loading @@ -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" Loading @@ -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" Loading
test/checksum.bats +48 −5 Original line number Diff line number Diff line Loading @@ -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 ] Loading @@ -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 ] Loading @@ -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 ] Loading @@ -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 ] Loading @@ -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 ] Loading @@ -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 }
test/mirror.bats +7 −7 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 ] Loading @@ -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 ] Loading @@ -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 ] Loading @@ -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 Loading @@ -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 ] Loading