mirror of
https://github.com/pyenv/pyenv.git
synced 2024-12-22 15:53:35 +00:00
Merge pull request #539 from yyuu/download-aria2c
Use `aria2c` as the download if available (#534)
This commit is contained in:
commit
9993d13996
7 changed files with 73 additions and 67 deletions
|
@ -323,42 +323,40 @@ http() {
|
|||
local file="$3"
|
||||
[ -n "$url" ] || return 1
|
||||
|
||||
if type curl &>/dev/null; then
|
||||
if type aria2c &>/dev/null; then
|
||||
"http_${method}_aria2c" "$url" "$file"
|
||||
elif type curl &>/dev/null; then
|
||||
"http_${method}_curl" "$url" "$file"
|
||||
elif type wget &>/dev/null; then
|
||||
"http_${method}_wget" "$url" "$file"
|
||||
else
|
||||
echo "error: please install \`curl\` or \`wget\` and try again" >&2
|
||||
echo "error: please install \`aria2c\`, \`curl\` or \`wget\` and try again" >&2
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
http_head_aria2c() {
|
||||
aria2c --dry-run ${ARIA2_OPTS} "$1" >&4 2>&1
|
||||
}
|
||||
|
||||
http_get_aria2c() {
|
||||
aria2c -o "${2:--}" ${ARIA2_OPTS} "$1"
|
||||
}
|
||||
|
||||
http_head_curl() {
|
||||
options=""
|
||||
[ -n "${IPV4}" ] && options="--ipv4"
|
||||
[ -n "${IPV6}" ] && options="--ipv6"
|
||||
curl -qsILf ${options} "$1" >&4 2>&1
|
||||
curl -qsILf ${CURL_OPTS} "$1" >&4 2>&1
|
||||
}
|
||||
|
||||
http_get_curl() {
|
||||
options=""
|
||||
[ -n "${IPV4}" ] && options="--ipv4"
|
||||
[ -n "${IPV6}" ] && options="--ipv6"
|
||||
curl -q -o "${2:--}" -sSLf ${options} "$1"
|
||||
curl -q -o "${2:--}" -sSLf ${CURL_OPTS} "$1"
|
||||
}
|
||||
|
||||
http_head_wget() {
|
||||
options=""
|
||||
[ -n "${IPV4}" ] && options="--inet4-only"
|
||||
[ -n "${IPV6}" ] && options="--inet6-only"
|
||||
wget -q --spider ${options} "$1" >&4 2>&1
|
||||
wget -q --spider ${WGET_OPTS} "$1" >&4 2>&1
|
||||
}
|
||||
|
||||
http_get_wget() {
|
||||
options=""
|
||||
[ -n "${IPV4}" ] && options="--inet4-only"
|
||||
[ -n "${IPV6}" ] && options="--inet6-only"
|
||||
wget -nv ${options} -O "${2:--}" "$1"
|
||||
wget -nv ${WGET_OPTS} -O "${2:--}" "$1"
|
||||
}
|
||||
|
||||
fetch_tarball() {
|
||||
|
@ -1816,6 +1814,10 @@ if [ -n "$PYTHON_BUILD_SKIP_MIRROR" ] || ! has_checksum_support compute_sha2; th
|
|||
unset PYTHON_BUILD_MIRROR_URL
|
||||
fi
|
||||
|
||||
ARIA2_OPTS="${PYTHON_BUILD_ARIA2_OPTS} ${IPV4+--disable-ipv6=true} ${IPV6+--disable-ipv6=false}"
|
||||
CURL_OPTS="${PYTHON_BUILD_CURL_OPTS} ${IPV4+--ipv4} ${IPV6+--ipv6}"
|
||||
WGET_OPTS="${PYTHON_BUILD_WGET_OPTS} ${IPV4+--inet4-only} ${IPV6+--inet6-only}"
|
||||
|
||||
# Add an option to build a debug version of Python (#11)
|
||||
if [ -n "$DEBUG" ]; then
|
||||
package_option python configure --with-pydebug
|
||||
|
|
|
@ -10,7 +10,7 @@ export -n PYTHON_CONFIGURE_OPTS
|
|||
setup() {
|
||||
mkdir -p "$INSTALL_ROOT"
|
||||
stub md5 false
|
||||
stub curl false
|
||||
stub aria2c false
|
||||
}
|
||||
|
||||
executable() {
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
load test_helper
|
||||
export PYTHON_BUILD_SKIP_MIRROR=1
|
||||
export PYTHON_BUILD_CACHE_PATH="$TMP/cache"
|
||||
export PYTHON_BUILD_ARIA2_OPTS=
|
||||
|
||||
setup() {
|
||||
mkdir "$PYTHON_BUILD_CACHE_PATH"
|
||||
|
@ -10,19 +11,19 @@ setup() {
|
|||
|
||||
|
||||
@test "packages are saved to download cache" {
|
||||
stub curl "-q -o * -*S* http://example.com/* : cp $FIXTURE_ROOT/\${5##*/} \$3"
|
||||
stub aria2c "-o * http://example.com/* : cp $FIXTURE_ROOT/\${3##*/} \$2"
|
||||
|
||||
install_fixture definitions/without-checksum
|
||||
|
||||
assert_success
|
||||
assert [ -e "${PYTHON_BUILD_CACHE_PATH}/package-1.0.0.tar.gz" ]
|
||||
|
||||
unstub curl
|
||||
unstub aria2c
|
||||
}
|
||||
|
||||
|
||||
@test "cached package without checksum" {
|
||||
stub curl
|
||||
stub aria2c
|
||||
|
||||
cp "${FIXTURE_ROOT}/package-1.0.0.tar.gz" "$PYTHON_BUILD_CACHE_PATH"
|
||||
|
||||
|
@ -31,13 +32,13 @@ setup() {
|
|||
assert_success
|
||||
assert [ -e "${PYTHON_BUILD_CACHE_PATH}/package-1.0.0.tar.gz" ]
|
||||
|
||||
unstub curl
|
||||
unstub aria2c
|
||||
}
|
||||
|
||||
|
||||
@test "cached package with valid checksum" {
|
||||
stub shasum true "echo ba988b1bb4250dee0b9dd3d4d722f9c64b2bacfc805d1b6eba7426bda72dd3c5"
|
||||
stub curl
|
||||
stub aria2c
|
||||
|
||||
cp "${FIXTURE_ROOT}/package-1.0.0.tar.gz" "$PYTHON_BUILD_CACHE_PATH"
|
||||
|
||||
|
@ -47,7 +48,7 @@ setup() {
|
|||
assert [ -x "${INSTALL_ROOT}/bin/package" ]
|
||||
assert [ -e "${PYTHON_BUILD_CACHE_PATH}/package-1.0.0.tar.gz" ]
|
||||
|
||||
unstub curl
|
||||
unstub aria2c
|
||||
unstub shasum
|
||||
}
|
||||
|
||||
|
@ -57,8 +58,8 @@ setup() {
|
|||
local checksum="ba988b1bb4250dee0b9dd3d4d722f9c64b2bacfc805d1b6eba7426bda72dd3c5"
|
||||
|
||||
stub shasum true "echo invalid" "echo $checksum"
|
||||
stub curl "-*I* : true" \
|
||||
"-q -o * -*S* https://?*/$checksum : cp $FIXTURE_ROOT/package-1.0.0.tar.gz \$3"
|
||||
stub aria2c "--dry-run * : true" \
|
||||
"-o * https://?*/$checksum : cp $FIXTURE_ROOT/package-1.0.0.tar.gz \$2"
|
||||
|
||||
touch "${PYTHON_BUILD_CACHE_PATH}/package-1.0.0.tar.gz"
|
||||
|
||||
|
@ -69,13 +70,13 @@ setup() {
|
|||
assert [ -e "${PYTHON_BUILD_CACHE_PATH}/package-1.0.0.tar.gz" ]
|
||||
assert diff -q "${PYTHON_BUILD_CACHE_PATH}/package-1.0.0.tar.gz" "${FIXTURE_ROOT}/package-1.0.0.tar.gz"
|
||||
|
||||
unstub curl
|
||||
unstub aria2c
|
||||
unstub shasum
|
||||
}
|
||||
|
||||
|
||||
@test "nonexistent cache directory is ignored" {
|
||||
stub curl "-q -o * -*S* http://example.com/* : cp $FIXTURE_ROOT/\${5##*/} \$3"
|
||||
stub aria2c "-o * http://example.com/* : cp $FIXTURE_ROOT/\${3##*/} \$2"
|
||||
|
||||
export PYTHON_BUILD_CACHE_PATH="${TMP}/nonexistent"
|
||||
|
||||
|
@ -85,5 +86,5 @@ setup() {
|
|||
assert [ -x "${INSTALL_ROOT}/bin/package" ]
|
||||
refute [ -d "$PYTHON_BUILD_CACHE_PATH" ]
|
||||
|
||||
unstub curl
|
||||
unstub aria2c
|
||||
}
|
||||
|
|
|
@ -3,105 +3,107 @@
|
|||
load test_helper
|
||||
export PYTHON_BUILD_SKIP_MIRROR=1
|
||||
export PYTHON_BUILD_CACHE_PATH=
|
||||
export PYTHON_BUILD_ARIA2_OPTS=
|
||||
|
||||
|
||||
@test "package URL without checksum" {
|
||||
stub curl "-q -o * -*S* http://example.com/* : cp $FIXTURE_ROOT/\${5##*/} \$3"
|
||||
stub aria2c "-o * http://example.com/* : cp $FIXTURE_ROOT/\${3##*/} \$2"
|
||||
|
||||
install_fixture definitions/without-checksum
|
||||
|
||||
assert_success
|
||||
assert [ -x "${INSTALL_ROOT}/bin/package" ]
|
||||
|
||||
unstub curl
|
||||
unstub aria2c
|
||||
}
|
||||
|
||||
|
||||
@test "package URL with valid checksum" {
|
||||
stub shasum true "echo ba988b1bb4250dee0b9dd3d4d722f9c64b2bacfc805d1b6eba7426bda72dd3c5"
|
||||
stub curl "-q -o * -*S* http://example.com/* : cp $FIXTURE_ROOT/\${5##*/} \$3"
|
||||
stub aria2c "-o * http://example.com/* : cp $FIXTURE_ROOT/\${3##*/} \$2"
|
||||
|
||||
install_fixture definitions/with-checksum
|
||||
|
||||
assert_success
|
||||
assert [ -x "${INSTALL_ROOT}/bin/package" ]
|
||||
|
||||
unstub curl
|
||||
unstub aria2c
|
||||
unstub shasum
|
||||
}
|
||||
|
||||
|
||||
@test "package URL with invalid checksum" {
|
||||
stub shasum true "echo ba988b1bb4250dee0b9dd3d4d722f9c64b2bacfc805d1b6eba7426bda72dd3c5"
|
||||
stub curl "-q -o * -*S* http://example.com/* : cp $FIXTURE_ROOT/\${5##*/} \$3"
|
||||
stub aria2c "-o * http://example.com/* : cp $FIXTURE_ROOT/\${3##*/} \$2"
|
||||
|
||||
install_fixture definitions/with-invalid-checksum
|
||||
|
||||
assert_failure
|
||||
refute [ -f "${INSTALL_ROOT}/bin/package" ]
|
||||
|
||||
unstub curl
|
||||
unstub aria2c
|
||||
unstub shasum
|
||||
}
|
||||
|
||||
|
||||
@test "package URL with checksum but no shasum support" {
|
||||
stub shasum false
|
||||
stub curl "-q -o * -*S* http://example.com/* : cp $FIXTURE_ROOT/\${5##*/} \$3"
|
||||
stub aria2c "-o * http://example.com/* : cp $FIXTURE_ROOT/\${3##*/} \$2"
|
||||
|
||||
install_fixture definitions/with-checksum
|
||||
|
||||
assert_success
|
||||
assert [ -x "${INSTALL_ROOT}/bin/package" ]
|
||||
|
||||
unstub curl
|
||||
unstub aria2c
|
||||
unstub shasum
|
||||
}
|
||||
|
||||
|
||||
@test "package URL with valid md5 checksum" {
|
||||
stub md5 true "echo 83e6d7725e20166024a1eb74cde80677"
|
||||
stub curl "-q -o * -*S* http://example.com/* : cp $FIXTURE_ROOT/\${5##*/} \$3"
|
||||
stub aria2c "-o * http://example.com/* : cp $FIXTURE_ROOT/\${3##*/} \$2"
|
||||
|
||||
install_fixture definitions/with-md5-checksum
|
||||
|
||||
assert_success
|
||||
assert [ -x "${INSTALL_ROOT}/bin/package" ]
|
||||
|
||||
unstub curl
|
||||
unstub aria2c
|
||||
unstub md5
|
||||
}
|
||||
|
||||
|
||||
@test "package URL with md5 checksum but no md5 support" {
|
||||
stub md5 false
|
||||
stub curl "-q -o * -*S* http://example.com/* : cp $FIXTURE_ROOT/\${5##*/} \$3"
|
||||
stub aria2c "-o * http://example.com/* : cp $FIXTURE_ROOT/\${3##*/} \$2"
|
||||
|
||||
install_fixture definitions/with-md5-checksum
|
||||
|
||||
assert_success
|
||||
assert [ -x "${INSTALL_ROOT}/bin/package" ]
|
||||
|
||||
unstub curl
|
||||
unstub aria2c
|
||||
unstub md5
|
||||
}
|
||||
|
||||
|
||||
@test "package with invalid checksum" {
|
||||
stub shasum true "echo invalid"
|
||||
stub curl "-q -o * -*S* http://example.com/* : cp $FIXTURE_ROOT/\${5##*/} \$3"
|
||||
stub aria2c "-o * http://example.com/* : cp $FIXTURE_ROOT/\${3##*/} \$2"
|
||||
|
||||
install_fixture definitions/with-checksum
|
||||
|
||||
assert_failure
|
||||
refute [ -f "${INSTALL_ROOT}/bin/package" ]
|
||||
|
||||
unstub curl
|
||||
unstub aria2c
|
||||
unstub shasum
|
||||
}
|
||||
|
||||
@test "existing tarball in build location is reused" {
|
||||
stub shasum true "echo ba988b1bb4250dee0b9dd3d4d722f9c64b2bacfc805d1b6eba7426bda72dd3c5"
|
||||
stub aria2c false
|
||||
stub curl false
|
||||
stub wget false
|
||||
|
||||
|
@ -125,7 +127,7 @@ DEF
|
|||
stub shasum true \
|
||||
"echo invalid" \
|
||||
"echo ba988b1bb4250dee0b9dd3d4d722f9c64b2bacfc805d1b6eba7426bda72dd3c5"
|
||||
stub curl "-q -o * -*S* http://example.com/* : cp $FIXTURE_ROOT/\${5##*/} \$3"
|
||||
stub aria2c "-o * http://example.com/* : cp $FIXTURE_ROOT/\${3##*/} \$2"
|
||||
|
||||
export -n PYTHON_BUILD_CACHE_PATH
|
||||
export PYTHON_BUILD_BUILD_PATH="${TMP}/build"
|
||||
|
@ -144,7 +146,7 @@ DEF
|
|||
}
|
||||
|
||||
@test "package URL with checksum of unexpected length" {
|
||||
stub curl "-q -o * -*S* http://example.com/* : cp $FIXTURE_ROOT/\${5##*/} \$3"
|
||||
stub aria2c "-o * http://example.com/* : cp $FIXTURE_ROOT/\${3##*/} \$2"
|
||||
|
||||
run_inline_definition <<DEF
|
||||
install_package "package-1.0.0" "http://example.com/packages/package-1.0.0.tar.gz#checksum_of_unexpected_length" copy
|
||||
|
|
|
@ -10,7 +10,7 @@ setup() {
|
|||
}
|
||||
|
||||
@test "failed download displays error message" {
|
||||
stub curl false
|
||||
stub aria2c false
|
||||
|
||||
install_fixture definitions/without-checksum
|
||||
assert_failure
|
||||
|
|
|
@ -4,11 +4,12 @@ load test_helper
|
|||
export PYTHON_BUILD_SKIP_MIRROR=
|
||||
export PYTHON_BUILD_CACHE_PATH=
|
||||
export PYTHON_BUILD_MIRROR_URL=http://mirror.example.com
|
||||
export PYTHON_BUILD_ARIA2_OPTS=
|
||||
|
||||
|
||||
@test "package URL without checksum bypasses mirror" {
|
||||
stub shasum true
|
||||
stub curl "-q -o * -*S* http://example.com/* : cp $FIXTURE_ROOT/\${5##*/} \$3"
|
||||
stub aria2c "-o * http://example.com/* : cp $FIXTURE_ROOT/\${3##*/} \$2"
|
||||
|
||||
install_fixture definitions/without-checksum
|
||||
echo "$output" >&2
|
||||
|
@ -16,21 +17,21 @@ export PYTHON_BUILD_MIRROR_URL=http://mirror.example.com
|
|||
assert_success
|
||||
assert [ -x "${INSTALL_ROOT}/bin/package" ]
|
||||
|
||||
unstub curl
|
||||
unstub aria2c
|
||||
unstub shasum
|
||||
}
|
||||
|
||||
|
||||
@test "package URL with checksum but no shasum support bypasses mirror" {
|
||||
stub shasum false
|
||||
stub curl "-q -o * -*S* http://example.com/* : cp $FIXTURE_ROOT/\${5##*/} \$3"
|
||||
stub aria2c "-o * http://example.com/* : cp $FIXTURE_ROOT/\${3##*/} \$2"
|
||||
|
||||
install_fixture definitions/with-checksum
|
||||
|
||||
assert_success
|
||||
assert [ -x "${INSTALL_ROOT}/bin/package" ]
|
||||
|
||||
unstub curl
|
||||
unstub aria2c
|
||||
unstub shasum
|
||||
}
|
||||
|
||||
|
@ -40,15 +41,15 @@ export PYTHON_BUILD_MIRROR_URL=http://mirror.example.com
|
|||
local mirror_url="${PYTHON_BUILD_MIRROR_URL}/$checksum"
|
||||
|
||||
stub shasum true "echo $checksum"
|
||||
stub curl "-*I* $mirror_url : true" \
|
||||
"-q -o * -*S* $mirror_url : cp $FIXTURE_ROOT/package-1.0.0.tar.gz \$3"
|
||||
stub aria2c "--dry-run $mirror_url : true" \
|
||||
"-o * $mirror_url : cp $FIXTURE_ROOT/package-1.0.0.tar.gz \$2"
|
||||
|
||||
install_fixture definitions/with-checksum
|
||||
|
||||
assert_success
|
||||
assert [ -x "${INSTALL_ROOT}/bin/package" ]
|
||||
|
||||
unstub curl
|
||||
unstub aria2c
|
||||
unstub shasum
|
||||
}
|
||||
|
||||
|
@ -58,15 +59,15 @@ export PYTHON_BUILD_MIRROR_URL=http://mirror.example.com
|
|||
local mirror_url="${PYTHON_BUILD_MIRROR_URL}/$checksum"
|
||||
|
||||
stub shasum true "echo $checksum"
|
||||
stub curl "-*I* $mirror_url : false" \
|
||||
"-q -o * -*S* http://example.com/* : cp $FIXTURE_ROOT/\${5##*/} \$3"
|
||||
stub aria2c "--dry-run $mirror_url : false" \
|
||||
"-o * http://example.com/* : cp $FIXTURE_ROOT/\${3##*/} \$2"
|
||||
|
||||
install_fixture definitions/with-checksum
|
||||
|
||||
assert_success
|
||||
assert [ -x "${INSTALL_ROOT}/bin/package" ]
|
||||
|
||||
unstub curl
|
||||
unstub aria2c
|
||||
unstub shasum
|
||||
}
|
||||
|
||||
|
@ -76,9 +77,9 @@ export PYTHON_BUILD_MIRROR_URL=http://mirror.example.com
|
|||
local mirror_url="${PYTHON_BUILD_MIRROR_URL}/$checksum"
|
||||
|
||||
stub shasum true "echo invalid" "echo $checksum"
|
||||
stub curl "-*I* $mirror_url : true" \
|
||||
"-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"
|
||||
stub aria2c "--dry-run $mirror_url : true" \
|
||||
"-o * $mirror_url : cp $FIXTURE_ROOT/package-1.0.0.tar.gz \$2" \
|
||||
"-o * http://example.com/* : cp $FIXTURE_ROOT/\${3##*/} \$2"
|
||||
|
||||
install_fixture definitions/with-checksum
|
||||
echo "$output" >&2
|
||||
|
@ -86,7 +87,7 @@ export PYTHON_BUILD_MIRROR_URL=http://mirror.example.com
|
|||
assert_success
|
||||
assert [ -x "${INSTALL_ROOT}/bin/package" ]
|
||||
|
||||
unstub curl
|
||||
unstub aria2c
|
||||
unstub shasum
|
||||
}
|
||||
|
||||
|
@ -96,15 +97,15 @@ export PYTHON_BUILD_MIRROR_URL=http://mirror.example.com
|
|||
local checksum="ba988b1bb4250dee0b9dd3d4d722f9c64b2bacfc805d1b6eba7426bda72dd3c5"
|
||||
|
||||
stub shasum true "echo $checksum"
|
||||
stub curl "-*I* : true" \
|
||||
"-q -o * -*S* https://?*/$checksum : cp $FIXTURE_ROOT/package-1.0.0.tar.gz \$3" \
|
||||
stub aria2c "--dry-run : true" \
|
||||
"-o * https://?*/$checksum : cp $FIXTURE_ROOT/package-1.0.0.tar.gz \$2" \
|
||||
|
||||
install_fixture definitions/with-checksum
|
||||
|
||||
assert_success
|
||||
assert [ -x "${INSTALL_ROOT}/bin/package" ]
|
||||
|
||||
unstub curl
|
||||
unstub aria2c
|
||||
unstub shasum
|
||||
}
|
||||
|
||||
|
@ -114,7 +115,7 @@ export PYTHON_BUILD_MIRROR_URL=http://mirror.example.com
|
|||
local checksum="ba988b1bb4250dee0b9dd3d4d722f9c64b2bacfc805d1b6eba7426bda72dd3c5"
|
||||
|
||||
stub shasum true "echo $checksum"
|
||||
stub curl "-q -o * -*S* https://www.python.org/* : cp $FIXTURE_ROOT/\${5##*/} \$3"
|
||||
stub aria2c "-o * https://www.python.org/* : cp $FIXTURE_ROOT/\${3##*/} \$2"
|
||||
|
||||
run_inline_definition <<DEF
|
||||
install_package "package-1.0.0" "https://www.python.org/packages/package-1.0.0.tar.gz#ba988b1bb4250dee0b9dd3d4d722f9c64b2bacfc805d1b6eba7426bda72dd3c5" copy
|
||||
|
@ -123,6 +124,6 @@ DEF
|
|||
assert_success
|
||||
assert [ -x "${INSTALL_ROOT}/bin/package" ]
|
||||
|
||||
unstub curl
|
||||
unstub aria2c
|
||||
unstub shasum
|
||||
}
|
||||
|
|
|
@ -11,7 +11,7 @@ export TMP_FIXTURES="$TMP/fixtures"
|
|||
setup() {
|
||||
mkdir -p "$INSTALL_ROOT"
|
||||
stub md5 false
|
||||
stub curl false
|
||||
stub aria2c false
|
||||
}
|
||||
|
||||
executable() {
|
||||
|
|
Loading…
Reference in a new issue