181 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			181 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/bin/bash
 | 
						|
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
 | 
						|
source "$(dirname "$0")/lib/ulib/ulib" || exit 1
 | 
						|
urequire DEFAULTS runsmod
 | 
						|
 | 
						|
function display_help() {
 | 
						|
    uecho "$scriptname: récupérer des dépôts git à usage de runs
 | 
						|
 | 
						|
USAGE
 | 
						|
    $scriptname [options] [-h host] [modules...]
 | 
						|
 | 
						|
Tous les dépôts spécifiés dans la configuration sont récupérés. Si des modules
 | 
						|
sont spécifiés, les dépôts correspondants sont récupérés aussi. Avec l'option
 | 
						|
-h, des dépôts spécifiques à l'hôte peuvent éventuellement être récupérés en
 | 
						|
plus.
 | 
						|
 | 
						|
OPTIONS
 | 
						|
    -c, --config CONFIG
 | 
						|
        Spécifier un fichier de configuration à charger au lieu de la valeur par
 | 
						|
        défaut ~/etc/default/runs
 | 
						|
    --prod
 | 
						|
    --devel
 | 
						|
        Forcer un mode de sélection des urls. En mode production, préférer pour
 | 
						|
        le clonage les urls de production, qui sont en principe accessibles sans
 | 
						|
        authentification et en lecture seule. En mode développement, préférer
 | 
						|
        pour le clonage les urls de développement, qui sont en principe
 | 
						|
        accessibles par clé ssh et en lecture/écriture
 | 
						|
    --no-fetch
 | 
						|
        Ne rien récupérer. Utile avec --update-repolist
 | 
						|
    -N, --no-host
 | 
						|
    -A, --all-hosts
 | 
						|
    -H, -h, --host HOST
 | 
						|
    -T, --this-host
 | 
						|
        Options permettant de spécifier l'hôte pour la récupération de dépôts
 | 
						|
        spécifiques.
 | 
						|
        --no-host demande explicitement à ce qu'aucun hôte ne soit spécifié
 | 
						|
        --all-hosts sélectionne tous les dépôts spécifiques
 | 
						|
        --host récupère uniquement les dépôts pour l'hôte spécifié
 | 
						|
        --this-host équivaut à --host $MYHOST
 | 
						|
        L'option par défaut est --this-host en mode production et --all-hosts en
 | 
						|
        mode développement
 | 
						|
    --update-repolist
 | 
						|
        Forcer la mise à jour de la liste des dépôts. En principe, cette mise à
 | 
						|
        jour n'est pas faite plus d'une fois par période de 24 heures.
 | 
						|
    -0, --offline
 | 
						|
    -n, --no-pull
 | 
						|
    -u, --pull
 | 
						|
        Spécifier le mode opératoire pour la récupération des dépôts.
 | 
						|
        En mode --offline, ni clone ni pull ne sont autorisés. Le module doit
 | 
						|
        avoir déjà été cloné.
 | 
						|
        En mode --no-pull, seul le clonage est autorisé, e.g. le dépôt est
 | 
						|
        cloné si ce n'est pas déjà le cas.
 | 
						|
        En mode --pull, cloner le dépôt si ce n'est pas déjà le cas, ou le
 | 
						|
        mettre à jour le dépôt avant de l'utiliser s'il avait déjà été cloné.
 | 
						|
        Par défaut, utiliser --pull en mode production et --no-pull en mode
 | 
						|
        développement.
 | 
						|
    -i, --identity IDENTITY_FILE
 | 
						|
        Spécifier le fichier depuis lequel lire la clé privée pour les
 | 
						|
        connexions par ssh.
 | 
						|
    -o, --output OUTPUT
 | 
						|
        Spécifier un fichier dans lequel écrire des définitions de variables,
 | 
						|
        notamment REPODIRS qui reçoit la liste des chemins des dépôts qui ont
 | 
						|
        été récupérés. De plus, les variables RUNSSCRIPTSPATH, RUNSMODULESPATH
 | 
						|
        et RUNSHOSTSPATH sont définies.
 | 
						|
    -a, --append-output
 | 
						|
        Ajouter au fichier OUTPUT au lieu de l'écraser"
 | 
						|
}
 | 
						|
 | 
						|
config=
 | 
						|
mode=
 | 
						|
fetch=1
 | 
						|
host_mode=auto
 | 
						|
host=
 | 
						|
update_repolist=auto
 | 
						|
update=auto
 | 
						|
identity=
 | 
						|
output=
 | 
						|
append_output=
 | 
						|
parse_opts "${PRETTYOPTS[@]}" \
 | 
						|
    --help '$exit_with display_help' \
 | 
						|
    -c:,--config: config= \
 | 
						|
    --prod mode=prod \
 | 
						|
    --devel mode=devel \
 | 
						|
    --no-fetch fetch= \
 | 
						|
    -N,--no-host host_mode=none \
 | 
						|
    -A,--all-hosts host_mode=all \
 | 
						|
    -h:,-H:,--host: '$set@ host; host_mode=one' \
 | 
						|
    -T,--this-host host_mode=self \
 | 
						|
    --update-repolist update_repolist=1 \
 | 
						|
    --no-update-repolist update_repolist= \
 | 
						|
    -0,--offline update=offline \
 | 
						|
    -n,--no-pull update=clone \
 | 
						|
    -u,--pull update=pull \
 | 
						|
    -i:,--identity: identity= \
 | 
						|
    -o:,--output: output= \
 | 
						|
    -a,--append-output append_output=1 \
 | 
						|
    @ args -- "$@" && set -- "${args[@]}" || die "$args"
 | 
						|
 | 
						|
if [ -z "$config" ]; then
 | 
						|
    # Vérifier si une configuration existe
 | 
						|
    noconfig=1
 | 
						|
    get_defaults_files dconfs runsmod
 | 
						|
    for dconf in "${dconfs[@]}"; do
 | 
						|
        if [ -n "$(<"$dconf" filter_comment)" ]; then
 | 
						|
            noconfig=
 | 
						|
            break
 | 
						|
        fi
 | 
						|
    done
 | 
						|
    if [ -n "$noconfig" ]; then
 | 
						|
        setx userconfig=get_user_defaults_file runsmod
 | 
						|
        ewarn "Aucune configuration n'existe pour runsmod"
 | 
						|
        if ask_yesno "Voulez-vous installer une configuration par défaut?" X; then
 | 
						|
            if [ ! -f "$userconfig" ]; then
 | 
						|
                ewarn "Les profils par défaut ne sont pas installés. Il est conseillé d'installer nutools puis de faire 'uenv -u' avant de continuer"
 | 
						|
                ask_yesno "Voulez-vous continuer?" N || die
 | 
						|
                touch "$userconfig"
 | 
						|
            fi
 | 
						|
            setx lines=wc -l <"$userconfig"
 | 
						|
            lines=$(($lines + 4 + 1))
 | 
						|
            # dans la ligne ci-dessus, 4 est le nombre de lignes affichées par
 | 
						|
            # la commande suivante:
 | 
						|
            echo >>"$userconfig" "
 | 
						|
### Configuration par défaut
 | 
						|
# Ces valeurs sont copiées pour référence depuis le module runsmod.defaults
 | 
						|
"
 | 
						|
            awk <"$ULIBDIR/runsmod.defaults" >>"$userconfig" '
 | 
						|
BEGIN { copy = 0 }
 | 
						|
/--runsmod.defaults--/ { copy = 1; next }
 | 
						|
copy { print }
 | 
						|
'
 | 
						|
            "${EDITOR:-vi}" +"$lines" "$userconfig"
 | 
						|
        elif check_interaction -y; then
 | 
						|
            die
 | 
						|
        fi
 | 
						|
    fi
 | 
						|
fi
 | 
						|
 | 
						|
__runsmod_loadconf "$config" "$mode" "$update" || die
 | 
						|
runsmod_checkenv || die
 | 
						|
estepn "Opération dans le mode $RUNSMOD_MODE"
 | 
						|
 | 
						|
if [ "$host_mode" == auto ]; then
 | 
						|
    case "$RUNSMOD_MODE" in
 | 
						|
    prod) host_mode=self;;
 | 
						|
    devel) host_mode=all;;
 | 
						|
    *) host_mode=none;;
 | 
						|
    esac
 | 
						|
fi
 | 
						|
 | 
						|
if [ "$update_repolist" == auto ]; then
 | 
						|
    if runsmod_should_update_repolists; then
 | 
						|
        etitle "Vérification de la liste des dépôts"
 | 
						|
        runsmod_update_repolists
 | 
						|
        eend
 | 
						|
    fi
 | 
						|
elif [ -n "$update_repolist" ]; then
 | 
						|
    etitle "Mise à jour de la liste des dépôts"
 | 
						|
    runsmod_update_repolists 1
 | 
						|
    eend
 | 
						|
fi
 | 
						|
 | 
						|
r=0
 | 
						|
if [ -n "$fetch" ]; then
 | 
						|
    etitle "Clonage/mise à jour des dépôts"
 | 
						|
    runsmod_setup_vars
 | 
						|
    runsmod_clone_or_pull "$host_mode" "$host" "$@" || r=1
 | 
						|
    runsmod_teardown_vars
 | 
						|
    eend
 | 
						|
fi
 | 
						|
 | 
						|
if [ -n "$output" ]; then
 | 
						|
    [ "$output" == "-" ] && output=/dev/stdout
 | 
						|
    [ -n "$append_output" ] || >"$output"
 | 
						|
    set_array_cmd REPODIRS >>"$output"
 | 
						|
    echo_setv RUNSSCRIPTSPATH="$RUNSSCRIPTSPATH" >>"$output"
 | 
						|
    echo_setv RUNSMODULESPATH="$RUNSMODULESPATH" >>"$output"
 | 
						|
    echo_setv RUNSHOSTSPATH="$RUNSHOSTSPATH" >>"$output"
 | 
						|
fi
 | 
						|
 | 
						|
exit $r
 |