runsmod: Implémenter les fonctionnalités documentées
This commit is contained in:
parent
12c521cfb2
commit
50580856f0
|
@ -6,10 +6,10 @@ uprovide runsmod
|
||||||
urequire base
|
urequire base
|
||||||
|
|
||||||
function __runsmod_loadconf() {
|
function __runsmod_loadconf() {
|
||||||
# Charger le fichier de configuration $1. Les paramètres RUNSMOD_MODE et
|
# Charger le fichier de configuration $1. Les paramètres RUNSMOD_MODE,
|
||||||
# RUNSMOD_UPDATE peuvent être modifiés par rapport à la configuration
|
# RUNSMOD_SHALLOW et RUNSMOD_UPDATE peuvent être modifiés par rapport à la
|
||||||
# chargée avec les paramètres $2 et $3 respectivement.
|
# configuration chargée avec les paramètres $2, $3 et $4 respectivement.
|
||||||
local config="$1" mode="$2" update="$3"
|
local config="$1" mode="$2" shallow="$3" update="$4"
|
||||||
|
|
||||||
urequire runsmod.defaults
|
urequire runsmod.defaults
|
||||||
set_defaults runsmod
|
set_defaults runsmod
|
||||||
|
@ -32,6 +32,15 @@ function __runsmod_loadconf() {
|
||||||
esac
|
esac
|
||||||
RUNSMOD_MODE="$mode"
|
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"
|
[ -n "$update" ] || update="$RUNSMOD_UPDATE"
|
||||||
if [ "$update" == auto ]; then
|
if [ "$update" == auto ]; then
|
||||||
case "$RUNSMOD_MODE" in
|
case "$RUNSMOD_MODE" in
|
||||||
|
@ -203,7 +212,7 @@ function __runsmod_get_repolistfile() {
|
||||||
# correspondant à l'url de base $1
|
# correspondant à l'url de base $1
|
||||||
local repopath
|
local repopath
|
||||||
setx repopath=__runsmod_getpath_from_baseurl "$1"
|
setx repopath=__runsmod_getpath_from_baseurl "$1"
|
||||||
echo "$RUNSMOD_BASEDIR/$repopath.lst"
|
echo "$RUNSMOD_BASEDIR/info-$repopath.lst"
|
||||||
}
|
}
|
||||||
|
|
||||||
function runsmod_should_update_repolists() {
|
function runsmod_should_update_repolists() {
|
||||||
|
@ -295,6 +304,24 @@ function __runsmod_replace2() {
|
||||||
[ -n "$3" ] && url="${url//%m/$3}"
|
[ -n "$3" ] && url="${url//%m/$3}"
|
||||||
echo "$url"
|
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() {
|
function __runsmod_clone_or_pull() {
|
||||||
local repourl="$1" repodir="$2"
|
local repourl="$1" repodir="$2"
|
||||||
|
@ -311,7 +338,7 @@ function __runsmod_clone_or_pull() {
|
||||||
else
|
else
|
||||||
if [ -n "$RUNSMOD_CLONE" ]; then
|
if [ -n "$RUNSMOD_CLONE" ]; then
|
||||||
estepi "clone $(ppath "$repodir") [$repourl]"
|
estepi "clone $(ppath "$repodir") [$repourl]"
|
||||||
git clone "$repourl" "$repodir"
|
git clone ${RUNSMOD_SHALLOW:+--depth 1} "$repourl" "$repodir"
|
||||||
return $?
|
return $?
|
||||||
else
|
else
|
||||||
estepe "noclone $(ppath "$repodir")"
|
estepe "noclone $(ppath "$repodir")"
|
||||||
|
@ -340,7 +367,7 @@ function runsmod_clone_or_pull() {
|
||||||
|
|
||||||
local -a repolist reponames repourls
|
local -a repolist reponames repourls
|
||||||
local RUNSMOD_PROFILE baseurl repopath repolistfile
|
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
|
local r=0
|
||||||
|
|
||||||
# Tout d'abord, traiter les dépôts sans variable %m
|
# 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
|
for repospec in "${repourls[@]}"; do
|
||||||
edebug "...... repospec=$repospec"
|
edebug "...... repospec=$repospec"
|
||||||
__runsmod_has_vmodule "$repospec" && continue
|
__runsmod_has_vmodule "$repospec" && continue
|
||||||
|
if [[ "$repospec" == *//* ]]; then
|
||||||
|
reposuffix="${repospec#*//}"
|
||||||
|
[ -n "$reposuffix" ] && reposuffix="/$reposuffix"
|
||||||
|
repospec="${repospec%%//*}"
|
||||||
|
else
|
||||||
|
reposuffix=
|
||||||
|
fi
|
||||||
|
|
||||||
reponames=()
|
reponames=()
|
||||||
if __runsmod_has_vhost "$repospec"; then
|
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"
|
setx reponame=__runsmod_replace1 "$repospec" "$host"
|
||||||
array_contains repolist "$reponame" && array_add reponames "$reponame"
|
array_contains repolist "$reponame" && array_add reponames "$reponame"
|
||||||
|
|
||||||
setx reponame=__runsmod_replace2 "$repospec" "$host"
|
setx reponame=__runsmod_replace2 "$repospec" "$host"
|
||||||
array_contains repolist "$reponame" && array_add reponames "$reponame"
|
array_contains repolist "$reponame" && array_add reponames "$reponame"
|
||||||
fi
|
fi
|
||||||
|
@ -382,10 +418,11 @@ function runsmod_clone_or_pull() {
|
||||||
__runsmod_clone_or_pull "$repourl" "$repodir" || r=1
|
__runsmod_clone_or_pull "$repourl" "$repodir" || r=1
|
||||||
|
|
||||||
[ -d "$repodir" ] || continue
|
[ -d "$repodir" ] || continue
|
||||||
|
repodir="$repodir$reposuffix"
|
||||||
array_addu REPODIRS "$repodir"
|
array_addu REPODIRS "$repodir"
|
||||||
case "$vprefix" in
|
case "$vprefix" in
|
||||||
SCRIPTS) array_addu SCRIPTSDIRS "$repodir";;
|
SCRIPTS) array_addu SCRIPTSDIRS "$repodir";;
|
||||||
#MODULES) ;;
|
MODULES) array_addu MODULESDIRS "$repodir";;
|
||||||
HOSTS) array_addu HOSTSDIRS "$repodir";;
|
HOSTS) array_addu HOSTSDIRS "$repodir";;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
@ -399,6 +436,7 @@ function runsmod_clone_or_pull() {
|
||||||
# lister en double s'ils existent dans plusieurs sources
|
# lister en double s'ils existent dans plusieurs sources
|
||||||
edebug "Traitement des dépôts de modules"
|
edebug "Traitement des dépôts de modules"
|
||||||
local -a modules foundmodules
|
local -a modules foundmodules
|
||||||
|
local all_modules
|
||||||
|
|
||||||
modules=("$@")
|
modules=("$@")
|
||||||
for RUNSMOD_PROFILE in "${RUNSMOD_PROFILES[@]}"; do
|
for RUNSMOD_PROFILE in "${RUNSMOD_PROFILES[@]}"; do
|
||||||
|
@ -410,7 +448,13 @@ function runsmod_clone_or_pull() {
|
||||||
|
|
||||||
edebug ".. baseurl=$baseurl, repopath=$repopath"
|
edebug ".. baseurl=$baseurl, repopath=$repopath"
|
||||||
for module in "${modules[@]}"; do
|
for module in "${modules[@]}"; do
|
||||||
|
if [ "$module" == "*" ]; then
|
||||||
|
module=
|
||||||
|
all_modules=1
|
||||||
|
else
|
||||||
array_contains foundmodules "$module" && continue
|
array_contains foundmodules "$module" && continue
|
||||||
|
all_modules=
|
||||||
|
fi
|
||||||
edebug ".... module=$module"
|
edebug ".... module=$module"
|
||||||
|
|
||||||
for vprefix in SCRIPTS MODULES HOSTS; do
|
for vprefix in SCRIPTS MODULES HOSTS; do
|
||||||
|
@ -420,13 +464,35 @@ function runsmod_clone_or_pull() {
|
||||||
for repospec in "${repourls[@]}"; do
|
for repospec in "${repourls[@]}"; do
|
||||||
edebug "........ repospec=$repospec"
|
edebug "........ repospec=$repospec"
|
||||||
__runsmod_has_vmodule "$repospec" || continue
|
__runsmod_has_vmodule "$repospec" || continue
|
||||||
|
if [[ "$repospec" == *//* ]]; then
|
||||||
|
reposuffix="${repospec#*//}"
|
||||||
|
[ -n "$reposuffix" ] && reposuffix="/$reposuffix"
|
||||||
|
repospec="${repospec%%//*}"
|
||||||
|
else
|
||||||
|
reposuffix=
|
||||||
|
fi
|
||||||
|
|
||||||
reponames=()
|
reponames=()
|
||||||
|
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
|
||||||
if __runsmod_has_vhost "$repospec"; then
|
if __runsmod_has_vhost "$repospec"; then
|
||||||
if [ -n "$host" ]; then
|
if [ -n "$host" ]; then
|
||||||
setx reponame=__runsmod_replace1 "$repospec" "$host" "$module"
|
setx reponame=__runsmod_replace1 "$repospec" "$host" "$module"
|
||||||
array_contains repolist "$reponame" && array_add reponames "$reponame"
|
array_contains repolist "$reponame" && array_add reponames "$reponame"
|
||||||
|
|
||||||
setx reponame=__runsmod_replace2 "$repospec" "$host" "$module"
|
setx reponame=__runsmod_replace2 "$repospec" "$host" "$module"
|
||||||
array_contains repolist "$reponame" && array_add reponames "$reponame"
|
array_contains repolist "$reponame" && array_add reponames "$reponame"
|
||||||
fi
|
fi
|
||||||
|
@ -434,6 +500,7 @@ function runsmod_clone_or_pull() {
|
||||||
setx reponame=__runsmod_replace1 "$repospec" "" "$module"
|
setx reponame=__runsmod_replace1 "$repospec" "" "$module"
|
||||||
array_contains repolist "$reponame" && array_add reponames "$reponame"
|
array_contains repolist "$reponame" && array_add reponames "$reponame"
|
||||||
fi
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
edebug "........ reponames=(${reponames[*]})"
|
edebug "........ reponames=(${reponames[*]})"
|
||||||
for reponame in "${reponames[@]}"; do
|
for reponame in "${reponames[@]}"; do
|
||||||
|
@ -443,9 +510,10 @@ function runsmod_clone_or_pull() {
|
||||||
__runsmod_clone_or_pull "$repourl" "$repodir" || r=1
|
__runsmod_clone_or_pull "$repourl" "$repodir" || r=1
|
||||||
|
|
||||||
[ -d "$repodir" ] || continue
|
[ -d "$repodir" ] || continue
|
||||||
array_addu foundmodules "$module"
|
[ -z "$all_modules" ] && array_addu foundmodules "$module"
|
||||||
|
|
||||||
array_addu REPODIRS "$repodir"
|
array_addu REPODIRS "$repodir"
|
||||||
|
repodir="$repodir$reposuffix"
|
||||||
case "$vprefix" in
|
case "$vprefix" in
|
||||||
SCRIPTS) array_addu SCRIPTSDIRS "$repodir";;
|
SCRIPTS) array_addu SCRIPTSDIRS "$repodir";;
|
||||||
MODULES)
|
MODULES)
|
||||||
|
@ -461,6 +529,7 @@ function runsmod_clone_or_pull() {
|
||||||
done
|
done
|
||||||
|
|
||||||
for module in "${modules[@]}"; do
|
for module in "${modules[@]}"; do
|
||||||
|
[ "$module" == "*" ] && continue
|
||||||
array_contains foundmodules "$module" || ewarn "$module: module non trouvé"
|
array_contains foundmodules "$module" || ewarn "$module: module non trouvé"
|
||||||
done
|
done
|
||||||
|
|
||||||
|
|
|
@ -7,21 +7,15 @@ uprovide runsmod.defaults
|
||||||
# Ne pas supprimer la ligne ci-dessous
|
# Ne pas supprimer la ligne ci-dessous
|
||||||
##--runsmod.defaults--
|
##--runsmod.defaults--
|
||||||
RUNSMOD_MODE=prod
|
RUNSMOD_MODE=prod
|
||||||
|
RUNSMOD_SHALLOW=auto
|
||||||
RUNSMOD_UPDATE=auto
|
RUNSMOD_UPDATE=auto
|
||||||
RUNSMOD_IDENTITY=
|
RUNSMOD_IDENTITY=
|
||||||
RUNSMOD_BASEURL=
|
RUNSMOD_BASEURL=
|
||||||
RUNSMOD_SCRIPTS_URLS=(hosts/%h/runs runss runs-scripts)
|
RUNSMOD_SCRIPTS_URLS=(hosts/%h/runs hosts/%h/all//runs runss)
|
||||||
RUNSMOD_MODULES_URLS=(hosts/%h/modules/%m modules/%m)
|
RUNSMOD_MODULES_URLS=(hosts/%h/modules/%m hosts/%h/all modules/%m)
|
||||||
RUNSMOD_HOSTS_URLS=(runsh runs-hosts)
|
RUNSMOD_HOSTS_URLS=(runsh)
|
||||||
RUNSMOD_BASEDIR="$HOME/runs"
|
RUNSMOD_BASEDIR="$HOME/runs"
|
||||||
RUNSMOD_PROFILES=(vcs pvcs jclain)
|
RUNSMOD_PROFILES=(pvcs vcs 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[@]}")
|
|
||||||
|
|
||||||
# pvcs
|
# pvcs
|
||||||
RUNSMOD_pvcs_BASEURL=(http://pvcs.univ.run/anongit http://pvcs.univ-reunion.fr/anongit)
|
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_MODULES_URLS=("${RUNSMOD_MODULES_URLS[@]}")
|
||||||
RUNSMOD_pvcs_HOSTS_URLS=("${RUNSMOD_HOSTS_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
|
# jclain
|
||||||
RUNSMOD_jclain_BASEURL=git@jclain.fr
|
RUNSMOD_jclain_BASEURL=git@jclain.fr
|
||||||
RUNSMOD_jclain_SCRIPTS_URLS=("${RUNSMOD_SCRIPTS_URLS[@]}")
|
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
|
-h, des dépôts spécifiques à l'hôte peuvent éventuellement être récupérés en
|
||||||
plus.
|
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
|
OPTIONS
|
||||||
-c, --config CONFIG
|
-c, --config CONFIG
|
||||||
Spécifier un fichier de configuration à charger au lieu de la valeur par
|
Spécifier un fichier de configuration à charger au lieu de la valeur par
|
||||||
|
@ -42,6 +45,9 @@ OPTIONS
|
||||||
--update-repolist
|
--update-repolist
|
||||||
Forcer la mise à jour de la liste des dépôts. En principe, cette mise à
|
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.
|
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
|
-0, --offline
|
||||||
-n, --no-pull
|
-n, --no-pull
|
||||||
-u, --pull
|
-u, --pull
|
||||||
|
@ -72,6 +78,7 @@ fetch=1
|
||||||
host_mode=auto
|
host_mode=auto
|
||||||
host=
|
host=
|
||||||
update_repolist=auto
|
update_repolist=auto
|
||||||
|
shallow=auto
|
||||||
update=auto
|
update=auto
|
||||||
identity=
|
identity=
|
||||||
output=
|
output=
|
||||||
|
@ -88,6 +95,8 @@ parse_opts "${PRETTYOPTS[@]}" \
|
||||||
-T,--this-host host_mode=self \
|
-T,--this-host host_mode=self \
|
||||||
--update-repolist update_repolist=1 \
|
--update-repolist update_repolist=1 \
|
||||||
--no-update-repolist update_repolist= \
|
--no-update-repolist update_repolist= \
|
||||||
|
--shallow-clone shallow=1 \
|
||||||
|
--no-shallow-clone shallow= \
|
||||||
-0,--offline update=offline \
|
-0,--offline update=offline \
|
||||||
-n,--no-pull update=clone \
|
-n,--no-pull update=clone \
|
||||||
-u,--pull update=pull \
|
-u,--pull update=pull \
|
||||||
|
@ -113,6 +122,7 @@ if [ -z "$config" ]; then
|
||||||
if [ ! -f "$userconfig" ]; 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"
|
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
|
ask_yesno "Voulez-vous continuer?" N || die
|
||||||
|
mkdirof "$userconfig"
|
||||||
touch "$userconfig"
|
touch "$userconfig"
|
||||||
fi
|
fi
|
||||||
setx lines=wc -l <"$userconfig"
|
setx lines=wc -l <"$userconfig"
|
||||||
|
@ -135,7 +145,7 @@ copy { print }
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
__runsmod_loadconf "$config" "$mode" "$update" || die
|
__runsmod_loadconf "$config" "$mode" "$shallow" "$update" || die
|
||||||
runsmod_checkenv || die
|
runsmod_checkenv || die
|
||||||
estepn "Opération dans le mode $RUNSMOD_MODE"
|
estepn "Opération dans le mode $RUNSMOD_MODE"
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue