scripts/fetch in rvm-1.0.7 vs scripts/fetch in rvm-1.0.8
- old
+ new
@@ -1,118 +1,230 @@
#!/usr/bin/env bash
rvm_base_except="selector"
+
source "$rvm_path/scripts/base"
+
result=0
# Set it to cleanup the download on interruption.
trap 'cleanup_download' 1 2 3 15
cleanup_download() {
- [[ -f "$archive" ]] && rm -rf "$archive"
+
+ [[ -f "$archive" ]] && rm -f "$archive"
+
}
record_md5() {
+
if [[ "Darwin" = "$(uname)" ]] || [[ "FreeBSD" = "$(uname)" ]]; then
+
archive_md5="$(/sbin/md5 -q "${archive}")"
+
else
+
archive_md5="$(md5sum "${archive}" | awk '{print $1}')"
+
fi
- "$rvm_path/scripts/db" "$rvm_config_path/md5" "$archive" "$archive_md5"
+
+ "$rvm_path/scripts/db" "$rvm_path/config/md5" "$archive" "$archive_md5"
+
}
-builtin cd "$rvm_archives_path"
+builtin cd "${rvm_archives_path:-"$rvm_path/archives"}"
# args=($*) # Reserved for future use
-if [[ -z "$1" ]] ; then "$rvm_path/scripts/log" "fail" "BUG: $0 called without an argument :/" ; exit 1 ; fi
+if [[ -z "$1" ]] ; then
+ "$rvm_path/scripts/log" "fail" \
+ "BUG: $0 called without an argument :/"
+
+ exit 1
+fi
+
url="$1"; download=1 ; package_name="$2"
if ! command -v curl > /dev/null ; then
- "$rvm_path/scripts/log" "fail" "rvm requires curl. curl was not found in your active path."
+
+ "$rvm_path/scripts/log" "fail" \
+ "rvm requires curl. curl was not found in your active path."
+
exit 1
+
elif [[ ! -z ${rvm_proxy} ]] ; then
+
fetch_command="curl -x${rvm_proxy} -L --create-dirs -C - " # -s for silent
+
else
+
fetch_command="curl -L --create-dirs -C - " # -s for silent
+
fi
if [[ ! -z "$package_name" ]] ; then
+
fetch_command="${fetch_command} -o ${package_name} "
+
archive="$package_name"
+
else
+
fetch_command="${fetch_command} -O "
+
archive=$(basename "$url")
+
fi
-if [[ ${rvm_debug_flag:-0} -gt 0 ]] ; then "$rvm_path/scripts/log" "debug" "Fetching $archive" ; fi
+if [[ ${rvm_debug_flag:-0} -gt 0 ]] ; then
+ "$rvm_path/scripts/log" "debug" \
+ "Fetching $archive"
+
+fi
+
# Check first if we have the correct archive
-archive_md5="$($rvm_path/scripts/db "$rvm_config_path/md5" "$archive" | head -n1)"
-if [[ -e "$archive" ]] && [[ ! -z "$archive_md5" ]] ; then
- if [[ ${rvm_debug_flag:-0} -gt 0 ]] ; then "$rvm_path/scripts/log" "debug" "Found archive and its md5, testing correctness" ; fi
- if ! "$rvm_path/scripts"/md5 "${rvm_archives_path}/${archive}" "$archive_md5" ; then
- if [[ ${rvm_debug_flag:-0} -gt 0 ]] ; then "$rvm_path/scripts/log" "debug" "Archive is bad, downloading" ; fi
+archive_md5="$($rvm_path/scripts/db "$rvm_path/config/md5" "$archive" | head -n1)"
+
+if [[ -e "$archive" && ! -z "$archive_md5" ]] ; then
+
+ if [[ ${rvm_debug_flag:-0} -gt 0 ]] ; then
+
+ "$rvm_path/scripts/log" "debug" \
+ "Found archive and its md5, testing correctness"
+
+ fi
+
+ if ! "$rvm_path/scripts"/md5 "${rvm_archives_path:-"$rvm_path/archives"}/${archive}" "$archive_md5" ; then
+
+ if [[ ${rvm_debug_flag:-0} -gt 0 ]] ; then
+ "$rvm_path/scripts/log" "debug" \
+ "Archive md5 did not match, downloading"
+ fi
+
download=1
+
else
- if [[ ${rvm_debug_flag:-0} -gt 0 ]] ; then "$rvm_path/scripts/log" "debug" "Archive is good, not downloading" ; fi
+
+ if [[ ${rvm_debug_flag:-0} -gt 0 ]] ; then
+
+ "$rvm_path/scripts/log" "debug" \
+ "Archive md5 matched, not downloading"
+
+ fi
+
download=0
+
result=0
- fi ; unset archive_md5
+
+ fi
+
else
- if [[ ${rvm_debug_flag:-0} -gt 0 ]] ; then "$rvm_path/scripts/log" "debug" "No archive or no MD5, downloading" ; fi
+
+ if [[ ${rvm_debug_flag:-0} -gt 0 ]] ; then
+
+ "$rvm_path/scripts/log" "debug" \
+ "No archive or no MD5, downloading"
+
+ fi
+
download=1
+
fi
# try to convert the ftp url to a http url
-http_url="$(echo $url | sed -e 's/ftp:/http:/' -e 's/git:/http:/')"
+http_url="$(echo "$url" | sed -e 's/ftp:/http:/' -e 's/git:/http:/')"
if [[ $download -gt 0 ]] ; then
+
rm -f $archive
- eval $fetch_command "$url"
- result=$?
+
+ eval $fetch_command "$url" ; result=$?
+
if [[ $result -gt 0 ]] ; then
+
retry=0
+
try_http=0
+
if [[ $result -eq 78 ]] ; then
- "$rvm_path/scripts/log" "error" "The requested url does not exist: '$url'"
+
+ "$rvm_path/scripts/log" "error" \
+ "The requested url does not exist: '$url'"
+
try_http=1
+
elif [[ $result -eq 18 ]] ; then
- "$rvm_path/scripts/log" "error" "Partial file. Only a part of the file was transferred. Removing partial and re-trying."
+
+ "$rvm_path/scripts/log" "error" \
+ "Partial file. Only a part of the file was transferred. Removing partial and re-trying."
+
rm -f "$archive"
+
retry=1
+
elif [[ $result -eq 33 ]] ; then
- if [[ ${rvm_debug_flag:-0} -gt 0 ]] ; then "$rvm_path/scripts/log" "debug" "Server does not support 'range' command, removing '$archive'" ; fi
+
+ if [[ ${rvm_debug_flag:-0} -gt 0 ]] ; then
+
+ "$rvm_path/scripts/log" "debug" \
+ "Server does not support 'range' command, removing '$archive'"
+
+ fi
+
rm -f "$archive"
+
retry=1
+
else
- "$rvm_path/scripts/log" "error" "There was an error, please check $rvm_ruby_log_path/*.error.log. Next we'll try to fetch via http."
+
+ "$rvm_path/scripts/log" "error" \
+ "There was an error, please check ${rvm_log_path:-"$rvm_path/log"}/$rvm_ruby_string/*.error.log. Next we'll try to fetch via http."
+
try_http=1
+
fi
if [[ $retry -eq 1 ]] ; then
- eval $fetch_command "$url"
- result=$?
+
+ eval $fetch_command "$url" ; result=$?
+
if [[ $result -gt 0 ]] ; then
- "$rvm_path/scripts/log" "error" "There was an error, please check $rvm_ruby_log_path/*.error.log"
+
+ "$rvm_path/scripts/log" "error" \
+ "There was an error, please check ${rvm_log_path:-"$rvm_path/log"}/$rvm_ruby_string/*.error.log"
+
else
+
record_md5
+
fi
+
fi
if [[ $try_http -eq 1 ]] ; then
- eval $fetch_command "$http_url"
- result=$?
+
+ eval $fetch_command "$http_url" ; result=$?
+
if [[ $result -gt 0 ]] ; then
- "$rvm_path/scripts/log" "error" "There was an error, please check $rvm_ruby_log_path/*.error.log"
+
+ "$rvm_path/scripts/log" "error" \
+ "There was an error, please check ${rvm_log_path:-"$rvm_path/log"}/$rvm_ruby_string/*.error.log"
+
else
+
record_md5
+
fi
+
fi
else
+
record_md5
+
fi
+
fi
exit $result