[PATCH] rankmirrors: add --max-time option

Sami Kerola kerolasa at iki.fi
Fri Jun 8 21:05:25 UTC 2018


When testing all known mirrors, and knowing you have fairly ok connectivity,
it's nice to have ability to define more aggressive timeout, such as 0.1
This way finding a small number of best mirrors will take a little bit less
time in total.

Signed-off-by: Sami Kerola <kerolasa at iki.fi>
---
 src/rankmirrors.sh.in | 26 ++++++++++++++++++--------
 1 file changed, 18 insertions(+), 8 deletions(-)

diff --git a/src/rankmirrors.sh.in b/src/rankmirrors.sh.in
index 7f518c0..faa4074 100644
--- a/src/rankmirrors.sh.in
+++ b/src/rankmirrors.sh.in
@@ -34,13 +34,14 @@ usage() {
 	echo "Usage: ${myname} [options] MIRRORFILE | URL"
 	echo
 	echo "Options:"
-	echo "  --version      show program's version number and exit"
-	echo "  -h, --help     show this help message and exit"
-	echo "  -n NUM         number of servers to output, 0 for all"
-	echo "  -t, --times    only output mirrors and their response times"
-	echo "  -u, --url      test a specific URL"
-	echo "  -v, --verbose  be verbose in output"
-	echo "  -r, --repo     specify a repository name instead of guessing"
+	echo "  --version           show program's version number and exit"
+	echo "  -h, --help          show this help message and exit"
+	echo "  -n NUM              number of servers to output, 0 for all"
+	echo "  -m, --max-time NUM  specify a ranking operation timeout, can be desimal number"
+	echo "  -t, --times         only output mirrors and their response times"
+	echo "  -u, --url           test a specific URL"
+	echo "  -v, --verbose       be verbose in output"
+	echo "  -r, --repo          specify a repository name instead of guessing"
 	exit 0
 }
 
@@ -61,7 +62,7 @@ err() {
 # gettime fetchurl (e.g gettime http://foo.com/core/os/i686/core.db.tar.gz)
 # returns the fetching time, or timeout, or unreachable
 gettime() {
-	IFS=' ' output=( $(curl -s -m 10 -w "%{time_total} %{http_code}" "$1" -o/dev/null) )
+	IFS=' ' output=( $(curl -s -m $MAX_TIME -w "%{time_total} %{http_code}" "$1" -o/dev/null) )
 	(( $? == 28 )) && echo timeout && return
 	(( ${output[1]} >= 400 || ! ${output[1]} )) && echo unreachable && return
 	echo "${output[0]}"
@@ -128,6 +129,10 @@ while [[ $1 ]]; do
 		case "${1:2}" in
 			help) usage ;;
 			version) version ;;
+			max-time)
+				[[ $2 ]] || err "Must specify number.";
+				MAX_TIME="$2"
+				shift 2;;
 			times) TIMESONLY=1 ; shift ;;
 			verbose) VERBOSE=1 ; shift ;;
 			url)
@@ -153,6 +158,10 @@ while [[ $1 ]]; do
 			for ((i=1 ; i<${#1}; i++)); do
 				case ${1:$i:1} in
 					h) usage ;;
+					m)
+						[[ $2 ]] || err "Must specify number.";
+						MAX_TIME="$2"
+						shift 2;;
 					t) TIMESONLY=1 ;;
 					v) VERBOSE=1 ;;
 					u)
@@ -185,6 +194,7 @@ done
 
 # Some sanity checks
 [[ $NUM ]] || NUM=0
+[[ $MAX_TIME ]] || MAX_TIME=10
 [[ $FILE && $CHECKURL ]] && err "Cannot specify a URL and mirrorfile."
 [[ $FILE || $CHECKURL || $STDIN ]] || err "Must specify URL, mirrorfile, or stdin."
 
-- 
2.17.1


More information about the pacman-contrib mailing list