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