X-Git-Url: https://git.xonotic.org/?a=blobdiff_plain;f=misc%2Ftools%2Fall%2Fgit.subr;h=88aefa28e799ce9098d7beba4344889582d8072f;hb=9dda8bc6cf66f275384b06a5dc3eca315e82fd92;hp=f210da95969eb7e12de4884ef97dbb04a1eae70a;hpb=72ed4168ff8590a07e9be26d045bb0a826b61cd5;p=xonotic%2Fxonotic.git diff --git a/misc/tools/all/git.subr b/misc/tools/all/git.subr index f210da95..88aefa28 100644 --- a/misc/tools/all/git.subr +++ b/misc/tools/all/git.subr @@ -53,16 +53,18 @@ testrepoflag() 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 ) } @@ -103,7 +105,13 @@ bestmirror() 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 @@ -111,7 +119,7 @@ bestmirror() *" "*) # no protocol requested? all match ;; - *" $1 "*) + *" $bmb_proto "*) ;; *) return @@ -120,9 +128,18 @@ bestmirror() # 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 @@ -133,7 +150,7 @@ bestmirror() esac case " $newlocation " in - *" $2 "*) + *" $bmb_loc "*) # see below ;; *) @@ -145,20 +162,20 @@ bestmirror() 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 @@ -166,15 +183,15 @@ bestmirror() # 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 @@ -190,7 +207,8 @@ bestmirror() if [ $thistime -gt $besttime ]; then return elif [ $thistime -lt $besttime ]; then - besturl=$3 + besturl=$bmb_url + bestlocation=$bmb_loc besttime=$thistime bestcount=1 return @@ -198,10 +216,12 @@ bestmirror() # 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" } @@ -432,16 +452,34 @@ case "$cmd" in allrepos ifrepoenabled 0 fix_config_ ;; keygen) - if [ -f ~/.ssh/id_rsa.pub ]; then + if [ -f ~/.ssh/id_ef25519.pub ]; then + msg "" + msg "A key already exists and no new one will be generated. If you" + msg "already have done the procedure for getting your key approved, you" + 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 "$gitsite_url, then log in, enter the" + msg "\"xonotic\" project, create an \"Issue\" tagged \"Repository Access\"" + msg "to apply for access." + 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_ef25519.pub`" + elif [ -f ~/.ssh/id_rsa.pub ]; then msg "" msg "A key already exists and no new one will be generated. If you" msg "already have done the procedure for getting your key approved, you" 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." + 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 @@ -451,9 +489,12 @@ case "$cmd" in 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." + 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 @@ -466,9 +507,12 @@ case "$cmd" in 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." + 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 @@ -548,7 +592,7 @@ case "$cmd" in fi shift done - + if $need_bestmirror; then newbase=`bestmirror "$base" "$newprotocol" "$newlocation"` if [ -z "$newbase" ]; then @@ -600,10 +644,11 @@ case "$cmd" in 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 @@ -627,13 +672,10 @@ case "$cmd" in 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 } @@ -677,8 +719,10 @@ case "$cmd" in 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" @@ -918,7 +962,6 @@ case "$cmd" in verbose git branch -D "${B#refs/heads/}" fi done - git rev-parse refs/heads/master >/dev/null 2>&1 || verbose git branch --track master origin/master || true git rev-parse "refs/heads/$branch" >/dev/null 2>&1 || verbose git branch --track "$branch" origin/"$branch" || true fi checkself "$cmd" "$@" @@ -937,8 +980,17 @@ case "$cmd" in $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 \"\"" handled=false ;; + grep) + for d in $repos; do + if verbose cd "$d0/$d"; then + git grep -In "$@" || true + cd "$d0" + fi + done + ;; *) handled=false ;;