From 7299aeb98cc83187514db996ea5923f9b0fdf8c6 Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Fri, 2 Mar 2018 13:09:29 +0400 Subject: [PATCH] =?UTF-8?q?suite=20impl=C3=A9mentation=20patch=5Fcmd()?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pff | 130 ++++++++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 87 insertions(+), 43 deletions(-) diff --git a/pff b/pff index 8231446..44e9943 100755 --- a/pff +++ b/pff @@ -327,9 +327,15 @@ function get_profiles() { list_dirs "$pffdir/pff") | sort -u | grep -vxF Current } +function get_user_profiles() { + # afficher tous les profils modifiables du projet pff $1 (c'est à dire tous + # les profils valides excepté Base) + get_profiles "$@" | grep -vxF Base +} + function get_first_profile() { # afficher le premier profil autre que Base du projet pff $1 - get_profiles "$@" | grep -vxF Base | head -n1 + get_user_profiles "$@" | head -n1 } function get_local_files() { @@ -394,18 +400,32 @@ function get_cfile() { get_pfile "$1" Current "$2"; } function get_vlfiles() { # afficher tous les fichiers de version - local pffdir="$1" rfile="$2" profile="${3:-Base}" + local pffdir="$1" rfile="$2" profile="${3:-Base}" version="$4" [ -d "$pffdir/pff/$profile" ] || return - if [ -n "$rfile" ]; then - find "$pffdir/pff/$profile" \ - -type f -path "$pffdir/pff/$profile/${rfile}__pv-*__" -o \ - -type l -path "$pffdir/pff/$profile/${rfile}__pv-*__" \ - | sed "s|^$pffdir/pff/$profile/||" + if [ -n "$version" ]; then + if [ -n "$rfile" ]; then + find "$pffdir/pff/$profile" \ + -type f -path "$pffdir/pff/$profile/${rfile}__pv-${version}__" -o \ + -type l -path "$pffdir/pff/$profile/${rfile}__pv-${version}__" \ + | sed "s|^$pffdir/pff/$profile/||" + else + find "$pffdir/pff/$profile" \ + -type f -name "*__pv-${version}__" -o \ + -type l -name "*__pv-${version}__" \ + | sed "s|^$pffdir/pff/$profile/||" + fi else - find "$pffdir/pff/$profile" \ - -type f -name "*__pv-*__" -o \ - -type l -name "*__pv-*__" \ - | sed "s|^$pffdir/pff/$profile/||" + if [ -n "$rfile" ]; then + find "$pffdir/pff/$profile" \ + -type f -path "$pffdir/pff/$profile/${rfile}__pv-*__" -o \ + -type l -path "$pffdir/pff/$profile/${rfile}__pv-*__" \ + | sed "s|^$pffdir/pff/$profile/||" + else + find "$pffdir/pff/$profile" \ + -type f -name "*__pv-*__" -o \ + -type l -name "*__pv-*__" \ + | sed "s|^$pffdir/pff/$profile/||" + fi fi } @@ -419,7 +439,7 @@ function sync_vlfiles() { if [ -n "$profile" ]; then profiles=("$profile") else - array_from_lines profiles "$(get_profiles "$pffdir" | grep -vxF Base)" + array_from_lines profiles "$(get_user_profiles "$pffdir")" fi local vlfile rfile prefix pfile plink tmp for vlfile in "$@"; do @@ -860,43 +880,67 @@ function new_cmd() { function patch_cmd() { local commit="$1" pffdir="$2" local was_patched eop_version patched_profile + local pversion profile + local -a profiles vlfiles ensure_pffdir pffdir "$pffdir" + array_from_lines profiles "$(get_user_profiles "$pffdir")" while true; do - #XXX algo - # pour chaque version de PVERSIONS: - # pour chaque profil: - # s'il y a des fichiers de patches, les intégrer - # quand il n'y a plus de fichier de patches dans aucun des profils - # intégrer le patch dans le profil Base - # mettre à jour PVERSIONS - if [ -n "$was_patched" ]; then - local ask default - if [ -n "$eop_version" ]; then - msg="Intégration de la version $version" - else - msg="Correction du profil $patched_profile pour la version $version" - fi - if [ "$commit" == ask ]; then - if [ -n "$eop_version" ]; then - enote "Vous avez terminé l'intégration des patches de la version $version" - default=O - else - einfo "Vous avez intégré les patches de la version $version pour le profil $patched_profile" - default=N - fi - ask_yesno "Voulez-vous enregistrer les modifications dans git?" $default || commit= - fi - if [ -n "$commit" ]; then - git add -A && git commit -m "$msg" || return - if [ -z "$UTOOLS_VCS_OFFLINE" ]; then - git push + was_patched= + for pversion in "${PVERSIONS[@]}"; do + have_profile_vlfiles= + have_base_vlfiles= + for profile in "${profiles[@]}"; do + array_from_lines vlfiles "$(get_vlfiles "$pffdir" "" "$profile" "$pversion")" + if [ ${#vlfiles[*]} -gt 0 ]; then + have_profile_vlfiles=1 + break fi + done + [ -n "$have_profile_vlfiles" ] && break + array_from_lines vlfiles "$(get_vlfiles "$pffdir" "" Base "$pversion")" + if [ ${#vlfiles[*]} -gt 0 ]; then + have_base_vlfiles=1 + break fi + done + if [ -n "$have_profile_vlfiles" ]; then + # il faut patcher les fichiers du profil + echo "Il faut patcher avec les modifications de ces fichiers: ${vlfiles[*]}" #XXX intégrer les modifications dans les fichiers de patch pour le profil + #was_patched=1 + elif [ -n "$have_base_vlfiles" ]; then + # il faut intégrer la nouvelle version dans Base + echo "Ces fichiers deviennent les nouveaux fichiers référence: ${vlfiles[*]}" #XXX le fichier de patch devient le nouveau fichier référence dans Base + #was_patched=1; eop_version=1 + #array_del PVERSIONS "$pversion" + #conf_update "$pffdir/$PFFCONF" PVERSIONS + fi + + # s'arrêter quand il n'y a plus de modifications + [ -n "$was_patched" ] || break + + local ask default + if [ -n "$eop_version" ]; then + msg="Intégration de la version $version" else - # s'arrêter quand il n'y a plus de modifications - break + msg="Correction du profil $patched_profile pour la version $version" + fi + if [ "$commit" == ask ]; then + if [ -n "$eop_version" ]; then + enote "Vous avez terminé l'intégration des patches de la version $version" + default=O + else + einfo "Vous avez intégré les patches de la version $version pour le profil $patched_profile" + default=N + fi + ask_yesno "Voulez-vous enregistrer les modifications dans git?" $default || commit= + fi + if [ -n "$commit" ]; then + git add -A && git commit -m "$msg" || return + if [ -z "$UTOOLS_VCS_OFFLINE" ]; then + git push + fi fi done } @@ -1077,7 +1121,7 @@ function edit_cmd() { local -a profiles edits args ensure_pffdir pffdir - array_from_lines profiles "$(get_profiles "$pffdir" | grep -vxF Base)" + array_from_lines profiles "$(get_user_profiles "$pffdir")" [ -n "$profile" ] || setx profile=get_current_profile "$pffdir" enote "Dans le profil $profile:"