#!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 source "$(dirname -- "$0")/lib/ulib/auto" || exit 1 urequire 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. Il est possible de spécifier le module '*' pour récupérer tous les modules disponibles. C'est utile sur un poste de développement. 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. --shallow-clone Faire un clone avec une profondeur de 1. C'est la valeur par défaut pour le mode production. -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=--NOT-SET-- fetch=1 host_mode=auto host= update_repolist=auto shallow_clone=--NOT-SET-- update=--NOT-SET-- 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= \ --shallow-clone shallow_clone=yes \ --no-shallow-clone shallow_clone=no \ -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 mkdirof "$userconfig" 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" "$shallow_clone" "$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