nutools/runsmod

191 lines
6.7 KiB
Plaintext
Raw Normal View History

2016-04-24 18:50:20 +04:00
#!/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.
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.
2016-04-24 18:50:20 +04:00
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.
2016-04-24 18:50:20 +04:00
-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
shallow=auto
2016-04-24 18:50:20 +04:00
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= \
--shallow-clone shallow=1 \
--no-shallow-clone shallow= \
2016-04-24 18:50:20 +04:00
-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" "$update" || die
2016-04-24 18:50:20 +04:00
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