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.
|
|
|
|
|
2016-05-24 11:47:59 +04:00
|
|
|
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.
|
2016-05-24 11:47:59 +04:00
|
|
|
--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=
|
2016-05-24 12:25:38 +04:00
|
|
|
mode=--NOT-SET--
|
2016-04-24 18:50:20 +04:00
|
|
|
fetch=1
|
|
|
|
host_mode=auto
|
|
|
|
host=
|
|
|
|
update_repolist=auto
|
2016-05-24 12:25:38 +04:00
|
|
|
shallow_clone=--NOT-SET--
|
|
|
|
update=--NOT-SET--
|
2016-04-24 18:50:20 +04:00
|
|
|
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= \
|
2016-05-24 12:25:38 +04:00
|
|
|
--shallow-clone shallow_clone=yes \
|
|
|
|
--no-shallow-clone shallow_clone=no \
|
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"
|
|
|
|
|
2016-04-24 22:50:10 +04:00
|
|
|
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
|
2016-05-24 11:47:59 +04:00
|
|
|
mkdirof "$userconfig"
|
2016-04-24 22:50:10 +04:00
|
|
|
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
|
|
|
|
|
2016-05-24 12:25:38 +04:00
|
|
|
__runsmod_loadconf "$config" "$mode" "$shallow_clone" "$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
|