#!/bin/bash
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8

SCRIPTNAME=update-nutools
TMPSCRIPT="/tmp/$SCRIPTNAME"
PRIV_REPO=http://vs-git.univ.run/modules/nutools
PUB_REPO=https://git.univ-reunion.fr/modules/nutools
REPO_SUFFIX=modules/nutools
NAME=nutools

################################################################################
eval "set -- $(getopt -n update-nutools -o dpx -l develop,public,use-proxy,do-update -- "$@" || echo exit 1)"
develop=
public=
use_proxy=
do_update=
while [ "$1" != -- ]; do
    case "$1" in
    --help)
        echo "update-nutools: mettre à jour nutools

USAGE:
    update-nutools [--develop]

OPTIONS
    -d, --develop
        Mettre à jour avec la branche develop pour avoir les dernières fonctions
        qui ne sont pas encore stabilisées. Par défaut, la mise à jour est faite
        avec la branche master.
    -p, --public
        Forcer l'utilisation de l'url publique"
        exit 0
        ;;
    -d|--develop)
        develop=develop
        ;;
    -p|--public)
        public=1
        NUTOOLS_REPO="$PUB_REPO"
        ;;
    -x|--use-proxy)
        use_proxy=1
        ;;
    --do-update)
        do_update=1
        ;;
    esac
    shift
done

[ -n "$use_proxy" ] || export http_proxy=

if [ -z "$do_update" ]; then
    scriptdir="$(dirname -- "$0")"

    cp "$0" "$TMPSCRIPT"
    chmod 755 "$TMPSCRIPT"
    exec bash "$TMPSCRIPT" ${develop:+--develop} ${public:+--public} --do-update "$scriptdir"
fi

CURL="$(which curl 2>/dev/null)"
WGET="$(which wget 2>/dev/null)"
if [ -n "$NUTOOLS_REPO" ]; then
    REPO="$NUTOOLS_REPO"
elif [ -n "$CURL" ]; then
    if curl -fs -m 3 "${PUB_REPO%$REPO_SUFFIX}" >&/dev/null; then
        REPO="$PUB_REPO"
    else
        REPO="$PRIV_REPO"
    fi
elif [ -n "$WGET" ]; then
    if wget -q --timeout=3 -O - "${PUB_REPO%$REPO_SUFFIX}" >&/dev/null; then
        REPO="$PUB_REPO"
    else
        REPO="$PRIV_REPO"
    fi
else
    REPO="$PUB_REPO"
    echo "\
WARN: impossible de déterminer la source pour la mise à jour.
      sélection de l'adresse publique $PUB_REPO"
    echo "\
NOTE: si une erreur se produit, utiliser l'adresse privée, e.g.
      NUTOOLS_REPO=$PRIV_REPO $0"
fi

scriptdir="$1"
tmpclone=
if [ -z "$NUTOOLS_REPO" -a -f "$scriptdir/.nutools-devel" -a -d "$scriptdir/.git" ]; then
    echo "NOTE: tentative de mise à jour du dépôt local"
    cd "$scriptdir"
    git pull || tmpclone=1
else
    tmpclone=1
fi

if [ -n "$tmpclone" ]; then
    echo "NOTE: clonage du dépôt distant $REPO"
    cd /tmp
    rm -rf "$NAME"
    git clone --depth 1 ${develop:+--branch "$develop"} "$REPO" || exit 1
    cd "$NAME"
fi

if ! diff -q "$SCRIPTNAME" "$0"; then
    echo "NOTE: Le script $SCRIPTNAME a été mis à jour. Il va être relancé."
    exec bash "./$SCRIPTNAME" ${develop:+--develop} ${public:+--public}
fi

bash ./uinst -y || exit 1
if [ -n "$tmpclone" ]; then
    cd ..
    rm -rf "$NAME"
fi

# IMPORTANT: la ligne suivante ne doit pas se terminer par un retour à la ligne:
rm "$0"; exit 0