runsmod: Implémenter les fonctionnalités documentées
This commit is contained in:
parent
12c521cfb2
commit
50580856f0
111
lib/ulib/runsmod
111
lib/ulib/runsmod
|
@ -6,10 +6,10 @@ uprovide runsmod
|
|||
urequire base
|
||||
|
||||
function __runsmod_loadconf() {
|
||||
# Charger le fichier de configuration $1. Les paramètres RUNSMOD_MODE et
|
||||
# RUNSMOD_UPDATE peuvent être modifiés par rapport à la configuration
|
||||
# chargée avec les paramètres $2 et $3 respectivement.
|
||||
local config="$1" mode="$2" update="$3"
|
||||
# Charger le fichier de configuration $1. Les paramètres RUNSMOD_MODE,
|
||||
# RUNSMOD_SHALLOW et RUNSMOD_UPDATE peuvent être modifiés par rapport à la
|
||||
# configuration chargée avec les paramètres $2, $3 et $4 respectivement.
|
||||
local config="$1" mode="$2" shallow="$3" update="$4"
|
||||
|
||||
urequire runsmod.defaults
|
||||
set_defaults runsmod
|
||||
|
@ -32,6 +32,15 @@ function __runsmod_loadconf() {
|
|||
esac
|
||||
RUNSMOD_MODE="$mode"
|
||||
|
||||
[ -n "$shallow" ] || shallow="$RUNSMOD_SHALLOW"
|
||||
if [ "$shallow" == auto ]; then
|
||||
case "$RUNSMOD_MODE" in
|
||||
prod) shallow=1;;
|
||||
devel) shallow=;;
|
||||
esac
|
||||
fi
|
||||
RUNSMOD_SHALLOW="$shallow"
|
||||
|
||||
[ -n "$update" ] || update="$RUNSMOD_UPDATE"
|
||||
if [ "$update" == auto ]; then
|
||||
case "$RUNSMOD_MODE" in
|
||||
|
@ -203,7 +212,7 @@ function __runsmod_get_repolistfile() {
|
|||
# correspondant à l'url de base $1
|
||||
local repopath
|
||||
setx repopath=__runsmod_getpath_from_baseurl "$1"
|
||||
echo "$RUNSMOD_BASEDIR/$repopath.lst"
|
||||
echo "$RUNSMOD_BASEDIR/info-$repopath.lst"
|
||||
}
|
||||
|
||||
function runsmod_should_update_repolists() {
|
||||
|
@ -295,6 +304,24 @@ function __runsmod_replace2() {
|
|||
[ -n "$3" ] && url="${url//%m/$3}"
|
||||
echo "$url"
|
||||
}
|
||||
function __runsmod_match() {
|
||||
# vérifier que $2 correspond au pattern $1
|
||||
eval "[[ $(qval "$2") == $(qwc "$1") ]]"
|
||||
}
|
||||
function __runsmod_match_repo_add() {
|
||||
# vérifier qu'un dépôt de pattern $2 se trouve dans la liste de dépôt $1
|
||||
# si c'est le cas, rajouter le dépôt dans le tableau $3 le cas échéant
|
||||
local __rs="$1[@]" __r __found
|
||||
for __r in "${!__rs}"; do
|
||||
if [[ "$__r" == *\** ]]; then
|
||||
: # ignore les dépôts wildcard
|
||||
elif __runsmod_match "$2" "$__r"; then
|
||||
[ -n "$3" ] && array_add "$3" "$__r"
|
||||
__found=1
|
||||
fi
|
||||
done
|
||||
[ -n "$__found" ]
|
||||
}
|
||||
|
||||
function __runsmod_clone_or_pull() {
|
||||
local repourl="$1" repodir="$2"
|
||||
|
@ -311,7 +338,7 @@ function __runsmod_clone_or_pull() {
|
|||
else
|
||||
if [ -n "$RUNSMOD_CLONE" ]; then
|
||||
estepi "clone $(ppath "$repodir") [$repourl]"
|
||||
git clone "$repourl" "$repodir"
|
||||
git clone ${RUNSMOD_SHALLOW:+--depth 1} "$repourl" "$repodir"
|
||||
return $?
|
||||
else
|
||||
estepe "noclone $(ppath "$repodir")"
|
||||
|
@ -340,7 +367,7 @@ function runsmod_clone_or_pull() {
|
|||
|
||||
local -a repolist reponames repourls
|
||||
local RUNSMOD_PROFILE baseurl repopath repolistfile
|
||||
local vprefix repospec reponame repourl repodir module moduledir
|
||||
local vprefix repospec reposuffix reponame repourl repodir module moduledir
|
||||
local r=0
|
||||
|
||||
# Tout d'abord, traiter les dépôts sans variable %m
|
||||
|
@ -360,13 +387,22 @@ function runsmod_clone_or_pull() {
|
|||
for repospec in "${repourls[@]}"; do
|
||||
edebug "...... repospec=$repospec"
|
||||
__runsmod_has_vmodule "$repospec" && continue
|
||||
if [[ "$repospec" == *//* ]]; then
|
||||
reposuffix="${repospec#*//}"
|
||||
[ -n "$reposuffix" ] && reposuffix="/$reposuffix"
|
||||
repospec="${repospec%%//*}"
|
||||
else
|
||||
reposuffix=
|
||||
fi
|
||||
|
||||
reponames=()
|
||||
if __runsmod_has_vhost "$repospec"; then
|
||||
if [ -n "$host" ]; then
|
||||
if [ -n "$all_hosts" ]; then
|
||||
setx repospec=__runsmod_replace1 "$repospec" "*"
|
||||
__runsmod_match_repo_add repolist "$repospec" reponames
|
||||
elif [ -n "$host" ]; then
|
||||
setx reponame=__runsmod_replace1 "$repospec" "$host"
|
||||
array_contains repolist "$reponame" && array_add reponames "$reponame"
|
||||
|
||||
setx reponame=__runsmod_replace2 "$repospec" "$host"
|
||||
array_contains repolist "$reponame" && array_add reponames "$reponame"
|
||||
fi
|
||||
|
@ -382,10 +418,11 @@ function runsmod_clone_or_pull() {
|
|||
__runsmod_clone_or_pull "$repourl" "$repodir" || r=1
|
||||
|
||||
[ -d "$repodir" ] || continue
|
||||
repodir="$repodir$reposuffix"
|
||||
array_addu REPODIRS "$repodir"
|
||||
case "$vprefix" in
|
||||
SCRIPTS) array_addu SCRIPTSDIRS "$repodir";;
|
||||
#MODULES) ;;
|
||||
MODULES) array_addu MODULESDIRS "$repodir";;
|
||||
HOSTS) array_addu HOSTSDIRS "$repodir";;
|
||||
esac
|
||||
done
|
||||
|
@ -399,6 +436,7 @@ function runsmod_clone_or_pull() {
|
|||
# lister en double s'ils existent dans plusieurs sources
|
||||
edebug "Traitement des dépôts de modules"
|
||||
local -a modules foundmodules
|
||||
local all_modules
|
||||
|
||||
modules=("$@")
|
||||
for RUNSMOD_PROFILE in "${RUNSMOD_PROFILES[@]}"; do
|
||||
|
@ -410,7 +448,13 @@ function runsmod_clone_or_pull() {
|
|||
|
||||
edebug ".. baseurl=$baseurl, repopath=$repopath"
|
||||
for module in "${modules[@]}"; do
|
||||
array_contains foundmodules "$module" && continue
|
||||
if [ "$module" == "*" ]; then
|
||||
module=
|
||||
all_modules=1
|
||||
else
|
||||
array_contains foundmodules "$module" && continue
|
||||
all_modules=
|
||||
fi
|
||||
edebug ".... module=$module"
|
||||
|
||||
for vprefix in SCRIPTS MODULES HOSTS; do
|
||||
|
@ -420,19 +464,42 @@ function runsmod_clone_or_pull() {
|
|||
for repospec in "${repourls[@]}"; do
|
||||
edebug "........ repospec=$repospec"
|
||||
__runsmod_has_vmodule "$repospec" || continue
|
||||
if [[ "$repospec" == *//* ]]; then
|
||||
reposuffix="${repospec#*//}"
|
||||
[ -n "$reposuffix" ] && reposuffix="/$reposuffix"
|
||||
repospec="${repospec%%//*}"
|
||||
else
|
||||
reposuffix=
|
||||
fi
|
||||
|
||||
reponames=()
|
||||
if __runsmod_has_vhost "$repospec"; then
|
||||
if [ -n "$host" ]; then
|
||||
setx reponame=__runsmod_replace1 "$repospec" "$host" "$module"
|
||||
array_contains repolist "$reponame" && array_add reponames "$reponame"
|
||||
|
||||
setx reponame=__runsmod_replace2 "$repospec" "$host" "$module"
|
||||
array_contains repolist "$reponame" && array_add reponames "$reponame"
|
||||
if [ -n "$all_modules" ]; then
|
||||
if __runsmod_has_vhost "$repospec"; then
|
||||
if [ -n "$all_hosts" ]; then
|
||||
setx repospec=__runsmod_replace1 "$repospec" "*" "*"
|
||||
__runsmod_match_repo_add repolist "$repospec" reponames
|
||||
elif [ -n "$host" ]; then
|
||||
setx repospec=__runsmod_replace1 "$repospec" "$host" "*"
|
||||
__runsmod_match_repo_add repolist "$repospec" reponames
|
||||
setx repospec=__runsmod_replace2 "$repospec" "$host" "*"
|
||||
__runsmod_match_repo_add repolist "$repospec" reponames
|
||||
fi
|
||||
else
|
||||
setx repospec=__runsmod_replace1 "$repospec" "" "*"
|
||||
__runsmod_match_repo_add repolist "$repospec" reponames
|
||||
fi
|
||||
else
|
||||
setx reponame=__runsmod_replace1 "$repospec" "" "$module"
|
||||
array_contains repolist "$reponame" && array_add reponames "$reponame"
|
||||
if __runsmod_has_vhost "$repospec"; then
|
||||
if [ -n "$host" ]; then
|
||||
setx reponame=__runsmod_replace1 "$repospec" "$host" "$module"
|
||||
array_contains repolist "$reponame" && array_add reponames "$reponame"
|
||||
setx reponame=__runsmod_replace2 "$repospec" "$host" "$module"
|
||||
array_contains repolist "$reponame" && array_add reponames "$reponame"
|
||||
fi
|
||||
else
|
||||
setx reponame=__runsmod_replace1 "$repospec" "" "$module"
|
||||
array_contains repolist "$reponame" && array_add reponames "$reponame"
|
||||
fi
|
||||
fi
|
||||
|
||||
edebug "........ reponames=(${reponames[*]})"
|
||||
|
@ -443,9 +510,10 @@ function runsmod_clone_or_pull() {
|
|||
__runsmod_clone_or_pull "$repourl" "$repodir" || r=1
|
||||
|
||||
[ -d "$repodir" ] || continue
|
||||
array_addu foundmodules "$module"
|
||||
[ -z "$all_modules" ] && array_addu foundmodules "$module"
|
||||
|
||||
array_addu REPODIRS "$repodir"
|
||||
repodir="$repodir$reposuffix"
|
||||
case "$vprefix" in
|
||||
SCRIPTS) array_addu SCRIPTSDIRS "$repodir";;
|
||||
MODULES)
|
||||
|
@ -461,6 +529,7 @@ function runsmod_clone_or_pull() {
|
|||
done
|
||||
|
||||
for module in "${modules[@]}"; do
|
||||
[ "$module" == "*" ] && continue
|
||||
array_contains foundmodules "$module" || ewarn "$module: module non trouvé"
|
||||
done
|
||||
|
||||
|
|
|
@ -7,21 +7,15 @@ uprovide runsmod.defaults
|
|||
# Ne pas supprimer la ligne ci-dessous
|
||||
##--runsmod.defaults--
|
||||
RUNSMOD_MODE=prod
|
||||
RUNSMOD_SHALLOW=auto
|
||||
RUNSMOD_UPDATE=auto
|
||||
RUNSMOD_IDENTITY=
|
||||
RUNSMOD_BASEURL=
|
||||
RUNSMOD_SCRIPTS_URLS=(hosts/%h/runs runss runs-scripts)
|
||||
RUNSMOD_MODULES_URLS=(hosts/%h/modules/%m modules/%m)
|
||||
RUNSMOD_HOSTS_URLS=(runsh runs-hosts)
|
||||
RUNSMOD_SCRIPTS_URLS=(hosts/%h/runs hosts/%h/all//runs runss)
|
||||
RUNSMOD_MODULES_URLS=(hosts/%h/modules/%m hosts/%h/all modules/%m)
|
||||
RUNSMOD_HOSTS_URLS=(runsh)
|
||||
RUNSMOD_BASEDIR="$HOME/runs"
|
||||
RUNSMOD_PROFILES=(vcs pvcs jclain)
|
||||
|
||||
# vcs
|
||||
RUNSMOD_vcs_BASEURL=(http://vcs.univ.run/anongit http://vcs.univ-reunion.fr/anongit)
|
||||
RUNSMOD_vcs_devel_BASEURL=git@vcs.univ.run
|
||||
RUNSMOD_vcs_SCRIPTS_URLS=("${RUNSMOD_SCRIPTS_URLS[@]}")
|
||||
RUNSMOD_vcs_MODULES_URLS=("${RUNSMOD_MODULES_URLS[@]}")
|
||||
RUNSMOD_vcs_HOSTS_URLS=("${RUNSMOD_HOSTS_URLS[@]}")
|
||||
RUNSMOD_PROFILES=(pvcs vcs jclain)
|
||||
|
||||
# pvcs
|
||||
RUNSMOD_pvcs_BASEURL=(http://pvcs.univ.run/anongit http://pvcs.univ-reunion.fr/anongit)
|
||||
|
@ -30,6 +24,13 @@ RUNSMOD_pvcs_SCRIPTS_URLS=("${RUNSMOD_SCRIPTS_URLS[@]}" si/base-runs)
|
|||
RUNSMOD_pvcs_MODULES_URLS=("${RUNSMOD_MODULES_URLS[@]}")
|
||||
RUNSMOD_pvcs_HOSTS_URLS=("${RUNSMOD_HOSTS_URLS[@]}")
|
||||
|
||||
# vcs
|
||||
RUNSMOD_vcs_BASEURL=(http://vcs.univ.run/anongit http://vcs.univ-reunion.fr/anongit)
|
||||
RUNSMOD_vcs_devel_BASEURL=git@vcs.univ.run
|
||||
RUNSMOD_vcs_SCRIPTS_URLS=("${RUNSMOD_SCRIPTS_URLS[@]}")
|
||||
RUNSMOD_vcs_MODULES_URLS=("${RUNSMOD_MODULES_URLS[@]}")
|
||||
RUNSMOD_vcs_HOSTS_URLS=("${RUNSMOD_HOSTS_URLS[@]}")
|
||||
|
||||
# jclain
|
||||
RUNSMOD_jclain_BASEURL=git@jclain.fr
|
||||
RUNSMOD_jclain_SCRIPTS_URLS=("${RUNSMOD_SCRIPTS_URLS[@]}")
|
||||
|
|
12
runsmod
12
runsmod
|
@ -14,6 +14,9 @@ sont spécifiés, les dépôts correspondants sont récupérés aussi. Avec l'op
|
|||
-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
|
||||
|
@ -42,6 +45,9 @@ OPTIONS
|
|||
--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
|
||||
|
@ -72,6 +78,7 @@ fetch=1
|
|||
host_mode=auto
|
||||
host=
|
||||
update_repolist=auto
|
||||
shallow=auto
|
||||
update=auto
|
||||
identity=
|
||||
output=
|
||||
|
@ -88,6 +95,8 @@ parse_opts "${PRETTYOPTS[@]}" \
|
|||
-T,--this-host host_mode=self \
|
||||
--update-repolist update_repolist=1 \
|
||||
--no-update-repolist update_repolist= \
|
||||
--shallow-clone shallow=1 \
|
||||
--no-shallow-clone shallow= \
|
||||
-0,--offline update=offline \
|
||||
-n,--no-pull update=clone \
|
||||
-u,--pull update=pull \
|
||||
|
@ -113,6 +122,7 @@ if [ -z "$config" ]; 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"
|
||||
|
@ -135,7 +145,7 @@ copy { print }
|
|||
fi
|
||||
fi
|
||||
|
||||
__runsmod_loadconf "$config" "$mode" "$update" || die
|
||||
__runsmod_loadconf "$config" "$mode" "$shallow" "$update" || die
|
||||
runsmod_checkenv || die
|
||||
estepn "Opération dans le mode $RUNSMOD_MODE"
|
||||
|
||||
|
|
Loading…
Reference in New Issue