diff --git a/pff b/pff index 92feb85..8231446 100755 --- a/pff +++ b/pff @@ -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,17 +1103,31 @@ function edit_cmd() { r=1 continue } - add_local__link "$pfile" "$profile" "$pffdir" || { - ewarn "$file: erreur lors de la création du lien local" - r=1 - continue - } - setx Pfile=get_pfile "$pfile" "$profile" "$pffdir" - estep "Edition de $(ppath "$Pfile")" - array_add edits "$Pfile" + 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 + continue + } + setx Pfile=get_pfile "$pfile" "$profile" "$pffdir" + estep "Edition de $(ppath "$Pfile")" + array_add edits "$Pfile" + fi done - "${EDITOR:-vi}" "${edits[@]}" || r=$? + 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