support de l'édition dans le profil ALL et rajouter les raccourcis -P, -T, -A

This commit is contained in:
Jephté Clain 2018-03-02 11:39:52 +04:00
parent 6b33929b17
commit eee9a65c70
1 changed files with 53 additions and 25 deletions

60
pff
View File

@ -55,6 +55,10 @@ function __pff_profiles() {
pffdir="$(dirname -- "$pffdir")"
done
}
function __pfe_profiles() {
echo ALL
__pff_profiles "$@" | grep -vxF Base
}
function __pfs_completion() {
local cur
_get_comp_words_by_ref cur
@ -65,12 +69,12 @@ function __pfe_completion() {
local cur prev opt comp
_get_comp_words_by_ref cur prev
if [[ "$prev" == -*p ]]; then
COMPREPLY=($(compgen -W "$(__pff_profiles)" -- "$cur"))
COMPREPLY=($(compgen -W "$(__pfe_profiles)" -- "$cur"))
elif [ "$prev" == --profile ]; then
COMPREPLY=($(compgen -W "$(__pff_profiles)" -- "$cur"))
COMPREPLY=($(compgen -W "$(__pfe_profiles)" -- "$cur"))
elif [[ "$cur" == -*p* ]]; then
comp="${cur#-*p}"; opt="${cur:0:$((${#cur}-${#comp}))}"
COMPREPLY=($(compgen -W "$(__pff_profiles "$opt")" -- "$cur"))
COMPREPLY=($(compgen -W "$(__pfe_profiles "$opt")" -- "$cur"))
fi
}
complete -F __pfe_completion -o bashdefault -o default pfe
@ -80,12 +84,12 @@ function __pff_completion() {
if [ "${COMP_WORDS[1]}" == -e -o "${COMP_WORDS[1]}" == --edit ]; then
# ne compléter -p que si on est en mode --edit
if [[ "$prev" == -*p ]]; then
COMPREPLY=($(compgen -W "$(__pff_profiles)" -- "$cur"))
COMPREPLY=($(compgen -W "$(__pfe_profiles)" -- "$cur"))
elif [ "$prev" == --profile ]; then
COMPREPLY=($(compgen -W "$(__pff_profiles)" -- "$cur"))
COMPREPLY=($(compgen -W "$(__pfe_profiles)" -- "$cur"))
elif [[ "$cur" == -*p* ]]; then
comp="${cur#-*p}"; opt="${cur:0:$((${#cur}-${#comp}))}"
COMPREPLY=($(compgen -W "$(__pff_profiles "$opt")" -- "$cur"))
COMPREPLY=($(compgen -W "$(__pfe_profiles "$opt")" -- "$cur"))
fi
elif [[ "$prev" == -*s ]]; then
COMPREPLY=($(compgen -W "$(__pff_profiles)" -- "$cur"))
@ -173,11 +177,11 @@ supportées sont:
Intégrer une distribution complète. Par défaut, les archives avec
l'extension .war sont considérées commes des livraisons complètes. Si
la source est un répertoire ou une archive sans extension, l'une des
options -F ou -P est requise.
-P, --patch-archive
options -F ou -H est requise.
-H, --patch-archive
Intégrer un patch. Par défaut, les archives avec l'extension .zip sont
considérées comme des patches. Si la source est un répertoire ou une
archive sans extension, l'une des options -F ou -P est requise.
archive sans extension, l'une des options -F ou -H est requise.
Avec une distribution de type patch, on considère que les fichiers
livrés ne sont pas des fichiers origines. Il n'y a donc aucun traitement
particulier: l'archive est simplement intégrée telle quelle.
@ -224,17 +228,23 @@ supportées sont:
-e, --edit FILES...
Editer des fichiers, implique --add-local
-p, --profile PROFILE
Pour les options --add-local et --edit, sélectionner le profil spécifié
comme celui concerné pour les fichier mentionnés après cette option. Par
exemple:
Pour l'option --edit, sélectionner le profil spécifié comme celui
concerné pour les fichier mentionnés après cette option. Par exemple:
$scriptname -e A -pprod B C -ptest D
Edite le fichier A du profil courant, les fichiers B et C du profil prod
et le fichier D du profil test.
Si cette option est utilisée pour sélectionner un fichier dans un autre
profil, le profil courant est restauré à la fin de la commande.
Le profil ALL est spécial et permet d'éditer le fichier dans tous les
profils *où il existe*, excepté Base parce que ce profil contient des
fichiers qui ne devraient pas être modifiés.
Pour tous les autres profils, si le fichier n'existe pas dans le profil
spécifié il est rajouté dans le profil avant son édition.
Attention: pour que l'option -p/--profile soit correctement reconnue
avec l'option -e/--edit, il faut que cette dernière option soit
mentionnée en premier sur la ligne de commande.
-P, --prod
-T, --test
-A, --all-profiles
Raccourcis pour respectivement -pprod, -ptest et -pALL
-d, --diff [DESTP [WORKDIR]]
-d, --diff [SRCP DESTP [WORKDIR]]
@ -1064,9 +1074,10 @@ function add_local_cmd() {
function edit_cmd() {
local profile="$1"; shift
local pffdir file rfile pfile Pfile r
local -a edits args
local -a profiles edits args
ensure_pffdir pffdir
array_from_lines profiles "$(get_profiles "$pffdir" | grep -vxF Base)"
[ -n "$profile" ] || setx profile=get_current_profile "$pffdir"
enote "Dans le profil $profile:"
@ -1092,6 +1103,15 @@ function edit_cmd() {
r=1
continue
}
if [ "$profile" == ALL ]; then
local tmpp
for tmpp in "${profiles[@]}"; do
setx Pfile=get_pfile "$pfile" "$tmpp" "$pffdir"
[ -e "$Pfile" ] || continue
estep "Edition de $(ppath "$Pfile")"
array_add edits "$Pfile"
done
else
add_local__link "$pfile" "$profile" "$pffdir" || {
ewarn "$file: erreur lors de la création du lien local"
r=1
@ -1100,9 +1120,14 @@ function edit_cmd() {
setx Pfile=get_pfile "$pfile" "$profile" "$pffdir"
estep "Edition de $(ppath "$Pfile")"
array_add edits "$Pfile"
fi
done
if [ ${#edits[*]} -gt 0 ]; then
"${EDITOR:-vi}" "${edits[@]}" || r=$?
else
r=2
fi
return $r
}
@ -1278,7 +1303,7 @@ args=($parse_mode
-V:,--version: version=
--auto-archive disttype=auto
-F,--full-archive disttype=full
-P,--patch-archive disttype=patch
-H,--patch-archive disttype=patch
--auto-unwrap unwrap=auto
--no-unwrap unwrap=
-E,--unwrap unwrap=1
@ -1293,6 +1318,9 @@ args=($parse_mode
-b,--add-local action=add-local
-e,--edit action=edit
-p:,--profile: profile=
-P,--prod profile=prod
-T,--test profile=test
-A,--all-profiles profile=ALL
-d,--diff action=diff
--infos action=infos
-l,--list-names,--show-all alternate=1