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
}
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:"