suite implémentation patch_cmd()

This commit is contained in:
Jephté Clain 2018-03-02 13:09:29 +04:00
parent eee9a65c70
commit 7299aeb98c
1 changed files with 87 additions and 43 deletions

130
pff
View File

@ -327,9 +327,15 @@ function get_profiles() {
list_dirs "$pffdir/pff") | sort -u | grep -vxF Current 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() { function get_first_profile() {
# afficher le premier profil autre que Base du projet pff $1 # 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() { function get_local_files() {
@ -394,18 +400,32 @@ function get_cfile() { get_pfile "$1" Current "$2"; }
function get_vlfiles() { function get_vlfiles() {
# afficher tous les fichiers de version # 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 [ -d "$pffdir/pff/$profile" ] || return
if [ -n "$rfile" ]; then if [ -n "$version" ]; then
find "$pffdir/pff/$profile" \ if [ -n "$rfile" ]; then
-type f -path "$pffdir/pff/$profile/${rfile}__pv-*__" -o \ find "$pffdir/pff/$profile" \
-type l -path "$pffdir/pff/$profile/${rfile}__pv-*__" \ -type f -path "$pffdir/pff/$profile/${rfile}__pv-${version}__" -o \
| sed "s|^$pffdir/pff/$profile/||" -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 else
find "$pffdir/pff/$profile" \ if [ -n "$rfile" ]; then
-type f -name "*__pv-*__" -o \ find "$pffdir/pff/$profile" \
-type l -name "*__pv-*__" \ -type f -path "$pffdir/pff/$profile/${rfile}__pv-*__" -o \
| sed "s|^$pffdir/pff/$profile/||" -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 fi
} }
@ -419,7 +439,7 @@ function sync_vlfiles() {
if [ -n "$profile" ]; then if [ -n "$profile" ]; then
profiles=("$profile") profiles=("$profile")
else else
array_from_lines profiles "$(get_profiles "$pffdir" | grep -vxF Base)" array_from_lines profiles "$(get_user_profiles "$pffdir")"
fi fi
local vlfile rfile prefix pfile plink tmp local vlfile rfile prefix pfile plink tmp
for vlfile in "$@"; do for vlfile in "$@"; do
@ -860,43 +880,67 @@ function new_cmd() {
function patch_cmd() { function patch_cmd() {
local commit="$1" pffdir="$2" local commit="$1" pffdir="$2"
local was_patched eop_version patched_profile local was_patched eop_version patched_profile
local pversion profile
local -a profiles vlfiles
ensure_pffdir pffdir "$pffdir" ensure_pffdir pffdir "$pffdir"
array_from_lines profiles "$(get_user_profiles "$pffdir")"
while true; do while true; do
#XXX algo was_patched=
# pour chaque version de PVERSIONS: for pversion in "${PVERSIONS[@]}"; do
# pour chaque profil: have_profile_vlfiles=
# s'il y a des fichiers de patches, les intégrer have_base_vlfiles=
# quand il n'y a plus de fichier de patches dans aucun des profils for profile in "${profiles[@]}"; do
# intégrer le patch dans le profil Base array_from_lines vlfiles "$(get_vlfiles "$pffdir" "" "$profile" "$pversion")"
# mettre à jour PVERSIONS if [ ${#vlfiles[*]} -gt 0 ]; then
if [ -n "$was_patched" ]; then have_profile_vlfiles=1
local ask default break
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
fi 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 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 else
# s'arrêter quand il n'y a plus de modifications msg="Correction du profil $patched_profile pour la version $version"
break 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 fi
done done
} }
@ -1077,7 +1121,7 @@ function edit_cmd() {
local -a profiles edits args local -a profiles edits args
ensure_pffdir pffdir 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" [ -n "$profile" ] || setx profile=get_current_profile "$pffdir"
enote "Dans le profil $profile:" enote "Dans le profil $profile:"