mirrorspeed()
{
- if ! { time -p true; } >/dev/null 2>&1; then
+ # 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
+ # if we can't time, we only check availability
+ if ! $have_time; 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
+ export REPO=$1 # so that the sh -c subshell can use it
+ { measure_time sh -c 'git ls-remote "$REPO" refs/heads/master >/dev/null 2>&1'; } 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
)
}
bestcount=
bestmirror_benchmark()
{
- if [ -z "$2" ]; then
+ bmb_curloc=$1
+ bmb_proto=$2
+ bmb_loc=$3
+ bmb_url=$4
+ bmb_fudge=$5
+
+ if [ -z "$bmb_loc" ]; then
# empty location is not allowed
return
fi
*" "*)
# no protocol requested? all match
;;
- *" $1 "*)
+ *" $bmb_proto "*)
;;
*)
return
# prefer location match
case " $newlocation " in
- *" $2 "*)
+ *" $bmb_loc "*)
+ # bmb_curloc is true in first run, false in second
+ # so first run gets all matching locations
+ # so second run gets all non-matching locations
+ if ! $bmb_curloc; then
+ return
+ fi
;;
*)
+ if $bmb_curloc; then
+ return
+ fi
case " $newlocation " in
*" $bestlocation "*)
# worse
esac
case " $newlocation " in
- *" $2 "*)
+ *" $bmb_loc "*)
# see below
;;
*)
esac
;;
esac
- msg "Testing speed of $3..."
+ msg "Testing speed of $bmb_url..."
# only working mirrors
- if ! thistime=`mirrorspeed "$3$testrepo"`; then
+ if ! thistime=`mirrorspeed "$bmb_url$testrepo"`; then
msg "-> FAILED"
return
fi
- thistime=$(($thistime $4))
+ thistime=$(($thistime $bmb_fudge))
msg "-> $thistime"
# anything is better than nothing
if [ -z "$besttime" ]; then
- besturl=$3
- bestlocation=$2
+ besturl=$bmb_url
+ bestlocation=$bmb_loc
besttime=$thistime
bestcount=1
return
# prefer location match
case " $newlocation " in
- *" $2 "*)
+ *" $bmb_loc "*)
case " $newlocation " in
*" $bestlocation "*)
# equality
;;
*)
# better
- besturl=$3
- bestlocation=$2
+ besturl=$bmb_url
+ bestlocation=$bmb_loc
besttime=$thistime
bestcount=1
return
if [ $thistime -gt $besttime ]; then
return
elif [ $thistime -lt $besttime ]; then
- besturl=$3
+ besturl=$bmb_url
+ bestlocation=$bmb_loc
besttime=$thistime
bestcount=1
return
# both location and time match. Random decision.
bestcount=$(($bestcount + 1))
if [ $((($RANDOM + 0) % $bestcount)) -eq 0 ]; then
- besturl=$3
+ besturl=$bmb_url
+ bestlocation=$bmb_loc
fi
}
- allmirrors bestmirror_benchmark
+ allmirrors bestmirror_benchmark true
+ allmirrors bestmirror_benchmark false
echo "$besturl"
}
msg "can skip the following paragraph and already use the repository."
msg ""
msg "To get access, your key has to be approved first. For that, visit"
- msg "$devsite_url, then log in, create a \"New Issue\" on"
- msg "the \"Support\" tracker in the \"Repository\" category where you"
- msg "apply for access and paste the following output into the issue:"
+ msg "$gitsite_url, then log in, enter the"
+ msg "\"xonotic\" project, create an \"Issue\" tagged \"Repository Access\""
+ msg "to apply for access and paste the following output into the issue:"
+ msg ""
+ msg "After that, go to your profile settings, \"SSH Keys\", \"Add SSH Key\""
+ msg "and paste the following output:"
msg ""
msg "`cat ~/.ssh/id_rsa.pub`"
elif [ -f ~/.ssh/id_dsa.pub ]; then
msg "can skip the following paragraph and already use the repository."
msg ""
msg "To get access, your key has to be approved first. For that, visit"
- msg "$devsite_url, then log in, create a \"New Issue\" on"
- msg "the \"Support\" tracker in the \"Repository\" category where you"
- msg "apply for access and paste the following output into the issue:"
+ msg "$gitsite_url, then log in, enter the"
+ msg "\"xonotic\" project, create an \"Issue\" tagged \"Repository Access\""
+ msg "to apply for access and paste the following output into the issue:"
+ msg ""
+ msg "After that, go to your profile settings, \"SSH Keys\", \"Add SSH Key\""
+ msg "and paste the following output:"
msg ""
msg "`cat ~/.ssh/id_dsa.pub`"
else
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa
msg ""
msg "To get access, your key has to be approved first. For that, visit"
- msg "$devsite_url, then log in, create a \"New Issue\" on"
- msg "the \"Support\" tracker in the \"Repository\" category where you"
- msg "apply for access and paste the following output into the issue:"
+ msg "$gitsite_url, then log in, enter the"
+ msg "\"xonotic\" project, create an \"Issue\" tagged \"Repository Access\""
+ msg "to apply for access and paste the following output into the issue:"
+ msg ""
+ msg "After that, go to your profile settings, \"SSH Keys\", \"Add SSH Key\""
+ msg "and paste the following output:"
msg ""
msg "`cat ~/.ssh/id_rsa.pub`"
fi
o=`( cd "$d0" && git config xonotic.all.mirrorselection 2>/dev/null || true )`
( cd "$d0" && git config xonotic.all.mirrorselection try_same )
if ! verbose git pull; then
- fix_upstream_rebase_mergefail || true
- check_mergeconflict "$d"
- $ECHO "Pulling failed. Press ENTER to continue, or Ctrl-C to abort."
- read -r DUMMY
+ if fix_upstream_rebase_mergefail; then
+ check_mergeconflict "$d"
+ $ECHO "Pulling failed. Press ENTER to continue, or Ctrl-C to abort."
+ read -r DUMMY
+ fi
else
( cd "$d0" && git config xonotic.all.mirrorselection "$o" )
fix_upstream_rebase_mergeok || true
fi
o=`git config xonotic.all.mirrorselection 2>/dev/null || true`
git config xonotic.all.mirrorselection try_same
- verbose git clone "$url" "$d0/$d"
+ verbose git clone --branch "$branch" "$url" "$d0/$d"
git config xonotic.all.mirrorselection "$o"
enter "$d0/$d" verbose
fix_git_config "$url" "$pushurl"
- if [ "$branch" != "master" ]; then
- verbose git checkout --track -b "$branch" origin/"$branch"
- fi
cd "$d0"
fi
}
else
b=$branch
if git rev-parse "refs/heads/$b" >/dev/null 2>&1; then
+ [ -n "$b" ] || exists=true
verbose git checkout $checkoutflags "$b"
elif git rev-parse "refs/remotes/$remote/$b" >/dev/null 2>&1; then
+ [ -n "$b" ] || exists=true
verbose git checkout $checkoutflags --track -b "$b" "$remote/$b"
else
$ECHO "WTF? Not even branch $b doesn't exist in $d"
$ECHO " $SELF keygen"
$ECHO " $SELF push|commit [-s]"
$ECHO " $SELF update|pull [-N] [-s | -h [-p] | -g [-p]] [-l de|nl|default]"
+ $ECHO " $SELF grep \"<regex>\""
handled=false
;;
+ grep)
+ for d in $repos; do
+ if verbose cd "$d0/$d"; then
+ git grep -In "$@" || true
+ cd "$d0"
+ fi
+ done
+ ;;
*)
handled=false
;;