]> git.xonotic.org Git - xonotic/xonotic.git/commitdiff
new repos library file, not used yet, meant to replace the old mess
authorRudolf Polzer <divverent@alientrap.org>
Thu, 29 Mar 2012 11:36:59 +0000 (13:36 +0200)
committerRudolf Polzer <divverent@alientrap.org>
Thu, 29 Mar 2012 11:36:59 +0000 (13:36 +0200)
misc/tools/all/repos.subr [new file with mode: 0644]

diff --git a/misc/tools/all/repos.subr b/misc/tools/all/repos.subr
new file mode 100644 (file)
index 0000000..aa77bb3
--- /dev/null
@@ -0,0 +1,130 @@
+allmirrors()
+{
+       "$@" git '' git://git.xonotic.org/xonotic/ ''
+       "$@" http '' http://git.xonotic.org/xonotic/ ''
+       "$@" ssh '' ssh://xonotic@git.xonotic.org/ ''
+
+       "$@" ssh push ssh://xonotic@push.git.xonotic.org/ ''
+
+       "$@" git de git://de.git.xonotic.org/xonotic/ ''
+       "$@" http de http://de.git.xonotic.org/xonotic/ ''
+
+       "$@" git nl git://nl.git.xonotic.org/xonotic/ '*3/2'
+       "$@" http nl http://nl.git.xonotic.org/xonotic/ '*3/2'
+
+       "$@" git us git://us.git.xonotic.org/xonotic/ ''
+       "$@" http us http://us.git.xonotic.org/xonotic/ ''
+}
+
+allrepos()
+{
+       "$@" .                             xonotic.git                  master         ""
+       "$@" data/xonotic-data.pk3dir      xonotic-data.pk3dir.git      master         ""
+       "$@" data/xonotic-music.pk3dir     xonotic-music.pk3dir.git     master         ""
+       "$@" data/xonotic-nexcompat.pk3dir xonotic-nexcompat.pk3dir.git master         "no"
+       "$@" darkplaces                    darkplaces.git               div0-stable    "svn"
+       "$@" netradiant                    netradiant.git               master         ""
+       "$@" div0-gittools                 div0-gittools.git            master         "no"
+       "$@" d0_blind_id                   d0_blind_id.git              master         ""
+       "$@" data/xonotic-maps.pk3dir      xonotic-maps.pk3dir.git      master         ""
+       "$@" mediasource                   mediasource.git              master         "no"
+       "$@" fteqcc                        fteqcc.git                   xonotic-stable "noautocrlf"
+}
+
+mirrorspeed()
+{
+       if ! { time -p true; } >/dev/null 2>&1; then
+               echo 0
+               return
+       fi
+       # first result is to be ignored, but we use it to check status
+       git ls-remote "$1" refs/heads/master >/dev/null 2>&1 || return 1
+       # now actually time it
+       (
+               set +x
+               { time -p git ls-remote "$1" refs/heads/master; } 2>&1 >/dev/null | head -n 1 | cut -d ' ' -f 2 | tr -d . | sed 's,^0*,,' | grep . || echo 0
+                       # unit: clock ticks (depends on what "time" returns
+       )
+}
+bestmirror()
+{
+       oldurl="$1"
+       newprotocol="$2"
+       newlocation="$3"
+       oldprotocol=
+       oldlocation=
+       testrepo=
+       bestmirror_firstrepo()
+       {
+               if [ -z "$testrepo" ]; then
+                       testrepo=$2
+               fi
+       }
+       allrepos bestmirror_firstrepo
+       bestmirror_findold()
+       {
+               if [ x"$oldurl" = x"$3" ]; then
+                       oldprotocol=$1
+                       oldlocation=$2
+               fi
+       }
+       allmirrors bestmirror_findold
+       besturl=
+       bestlocation=
+       besttime=
+       bestcount=
+       bestmirror_benchmark()
+       {
+               if [ -z "$2" ]; then
+                       # empty location is not allowed
+                       return
+               fi
+               if [ x"$1" != x"$newprotocol" ]; then
+                       return
+               fi
+               # only working mirrors
+               if ! thistime=`mirrorspeed "$3$testrepo"`; then
+                       return
+               fi
+               thistime=$(($thistime $4))
+               # anything is better than nothing
+               if [ -z "$besttime" ]; then
+                       besturl=$3
+                       bestlocation=$2
+                       besttime=$thistime
+                       bestcount=1
+                       return
+               fi
+               # prefer location match
+               if [ x"$2" = x"$newlocation" ]; then
+                       if [ x"$bestlocation" != x"$newlocation" ]; then
+                               besturl=$3
+                               bestlocation=$2
+                               besttime=$thistime
+                               bestcount=1
+                               return
+                       fi
+               else
+                       if [ x"$bestlocation" = x"$newlocation" ]; then
+                               return
+                       fi
+               fi
+               # if we get here, we must compare mirror speed as we have more than one match
+               if [ $thistime -gt $besttime ]; then
+                       return
+               elif [ $thistime -lt $besttime ]; then
+                       besturl=$3
+                       besttime=$thistime
+                       bestcount=1
+                       return
+               fi
+               # both location and time match. Random decision.
+               bestcount=$(($bestcount + 1))
+               if [ $((($RANDOM + 0) % $bestcount)) -eq 0 ]; then
+                       besturl=$3
+               fi
+       }
+       allmirrors bestmirror_benchmark
+       echo "$besturl"
+}
+