summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFedja Beader <fedja@protonmail.ch>2024-10-08 00:31:24 +0200
committerFedja Beader <fedja@protonmail.ch>2024-10-08 00:31:24 +0200
commitbb04af993a548f47a110fe23e9e14eb7e8fd34b3 (patch)
treeac38d593573313988c41a349a982c3a0361c6cd9
parenteed1c44eca77490141f886d425a3074d3c5c0cea (diff)
downloadclientdata-bb04af993a548f47a110fe23e9e14eb7e8fd34b3.tar.gz
clientdata-bb04af993a548f47a110fe23e9e14eb7e8fd34b3.tar.bz2
clientdata-bb04af993a548f47a110fe23e9e14eb7e8fd34b3.tar.xz
clientdata-bb04af993a548f47a110fe23e9e14eb7e8fd34b3.zip
Port 1999cc4e from ManaVerse: "deduplicate repeating retries"
Honestly, why do we even need retries?
-rwxr-xr-x.tools/init.sh58
1 files changed, 27 insertions, 31 deletions
diff --git a/.tools/init.sh b/.tools/init.sh
index 4fe533ef..01a6d3d5 100755
--- a/.tools/init.sh
+++ b/.tools/init.sh
@@ -7,6 +7,30 @@ function check_error {
fi
}
+retry_with_increasing_wait()
+{
+ local wait_time=1
+
+ while true; do
+ "$@"
+ local retval=$?
+
+ if [[ $retval -eq 0 || $wait_time -gt 16 ]]; then
+ break
+ fi
+
+ printf "command %s failed (exit code %d), waiting %d seconds until next try.\n"\
+ "$*" "$retval" "$wait_time"
+
+ sleep "$wait_time"
+ # 1, 2, 4, 8, 16...
+ (( wait_time = 2 * wait_time ))
+ done
+
+ return "$retval"
+}
+
+
function gitclone1 {
echo git clone $2 $3
git clone $2 $3
@@ -23,19 +47,7 @@ function gitclone {
export name2=${CI_BUILD_REPO##*@}
export name2=https://${name2%/*}/$2
- gitclone1 "$name1" "$name2" $3
- if [ "$?" != 0 ]; then
- sleep 1s
- gitclone1 "$name1" "$name2" $3
- if [ "$?" != 0 ]; then
- sleep 3s
- gitclone1 "$name1" "$name2" $3
- if [ "$?" != 0 ]; then
- sleep 5s
- gitclone1 "$name1" "$name2" $3
- fi
- fi
- fi
+ retry_with_increasing_wait gitclone1 "$name1" "$name2" "$3"
check_error $?
}
@@ -57,28 +69,12 @@ function update_repos {
function aptget_update {
update_repos
- apt-get update
- if [ "$?" != 0 ]; then
- sleep 1s
- apt-get update
- if [ "$?" != 0 ]; then
- sleep 1s
- apt-get update
- fi
- fi
+ retry_with_increasing_wait apt-get update
check_error $?
}
function aptget_install {
- apt-get -y -qq install $*
- if [ "$?" != 0 ]; then
- sleep 1s
- apt-get -y -qq install $*
- if [ "$?" != 0 ]; then
- sleep 2s
- apt-get -y -qq install $*
- fi
- fi
+ retry_with_increasing_wait apt-get -y -qq install $*
check_error $?
}