Intégration de la branche update-pff
This commit is contained in:
commit
777bb1fc68
79
pff
79
pff
|
@ -23,6 +23,7 @@ PFFCONFVARS=(
|
||||||
"PVERSIONS//Versions en attente d'intégration"
|
"PVERSIONS//Versions en attente d'intégration"
|
||||||
"PROFILES//Profils définis"
|
"PROFILES//Profils définis"
|
||||||
"ORIGEXTS=//Extensions origines"
|
"ORIGEXTS=//Extensions origines"
|
||||||
|
"PROTECTS=//Fichiers locaux à protéger lors de l'intégration e.g /dir/, /file, etc."
|
||||||
"MKDIRS//Répertoires qui doivent toujours exister"
|
"MKDIRS//Répertoires qui doivent toujours exister"
|
||||||
"FILTERS//Filtres appliqués aux fichiers lors de l'intégration"
|
"FILTERS//Filtres appliqués aux fichiers lors de l'intégration"
|
||||||
)
|
)
|
||||||
|
@ -206,6 +207,9 @@ supportées sont:
|
||||||
-g, --patch [WORKDIR]
|
-g, --patch [WORKDIR]
|
||||||
Intégrer les modifications entrantes sur les fichiers nouvellement
|
Intégrer les modifications entrantes sur les fichiers nouvellement
|
||||||
arrivés via l'option --new
|
arrivés via l'option --new
|
||||||
|
-o, --ours
|
||||||
|
Utiliser la stratégie '-s recursive -X ours' en cas de conflit lors de
|
||||||
|
l'intégration de la version.
|
||||||
--ask-commit
|
--ask-commit
|
||||||
-c, --commit
|
-c, --commit
|
||||||
--no-commit
|
--no-commit
|
||||||
|
@ -685,7 +689,7 @@ function new__prepare_archive() {
|
||||||
}
|
}
|
||||||
|
|
||||||
function new_cmd() {
|
function new_cmd() {
|
||||||
local autopatch="$1" version="$2" disttype="$3" unwrap="$4" commit_policy="$5"; shift; shift; shift; shift; shift
|
local autopatch="$1" version="$2" disttype="$3" unwrap="$4" merge_strategy="$5" commit_policy="$6"; shift; shift; shift; shift; shift; shift
|
||||||
local archive="$1" pffdir="$2"
|
local archive="$1" pffdir="$2"
|
||||||
|
|
||||||
ensure_pffdir pffdir "$pffdir"
|
ensure_pffdir pffdir "$pffdir"
|
||||||
|
@ -721,7 +725,7 @@ function new_cmd() {
|
||||||
local -a find; local p
|
local -a find; local p
|
||||||
local fndest0="$workdir/ndest0" fldest0="$workdir/ldest0"
|
local fndest0="$workdir/ndest0" fldest0="$workdir/ldest0"
|
||||||
get_local_files "$pffdir" >"$fldest0"
|
get_local_files "$pffdir" >"$fldest0"
|
||||||
for p in "${PROTECTS[@]}"; do
|
for p in "${PROTECTS[@]}" "${DEFAULT_PROTECTS[@]}"; do
|
||||||
[ ${#find[*]} -gt 0 ] && find=("${find[@]}" -o)
|
[ ${#find[*]} -gt 0 ] && find=("${find[@]}" -o)
|
||||||
if [ "${p#/}" != "$p" ]; then
|
if [ "${p#/}" != "$p" ]; then
|
||||||
# les fichiers à la racine
|
# les fichiers à la racine
|
||||||
|
@ -934,7 +938,7 @@ function new_cmd() {
|
||||||
if [ -n "$autopatch" ]; then
|
if [ -n "$autopatch" ]; then
|
||||||
# lancer la commande patch pour intégrer les modifications
|
# lancer la commande patch pour intégrer les modifications
|
||||||
ask_yesno "Voulez-vous passer à l'intégration de cette version?" O &&
|
ask_yesno "Voulez-vous passer à l'intégration de cette version?" O &&
|
||||||
patch_cmd "$commit_policy" "$pffdir"
|
patch_cmd "$merge_strategy" "$commit_policy" "$pffdir"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -942,9 +946,10 @@ function new_cmd() {
|
||||||
# pff --patch
|
# pff --patch
|
||||||
|
|
||||||
function patch_cmd() {
|
function patch_cmd() {
|
||||||
local commit_policy="$1" pffdir="$2"
|
local merge_strategy="$1" commit_policy="$2"; shift; shift
|
||||||
|
local pffdir="$1"
|
||||||
local gitproject was_patched eop_version
|
local gitproject was_patched eop_version
|
||||||
local version profile rcfile curdir workdir controldir
|
local version profile rcfile curdir workdir controlfile control tmpfile
|
||||||
local -a profiles vlfiles tmpfiles
|
local -a profiles vlfiles tmpfiles
|
||||||
|
|
||||||
ensure_pffdir pffdir "$pffdir"
|
ensure_pffdir pffdir "$pffdir"
|
||||||
|
@ -959,6 +964,12 @@ function patch_cmd() {
|
||||||
array_add profiles Common
|
array_add profiles Common
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
case "$merge_strategy" in
|
||||||
|
ours) merge_strategy=(-s recursive -X ours);;
|
||||||
|
theirs) merge_strategy=(-s recursive -X theirs);;
|
||||||
|
*) merge_strategy=();;
|
||||||
|
esac
|
||||||
|
|
||||||
while true; do
|
while true; do
|
||||||
# si pas de version en cours, il n'y a rien à patcher
|
# si pas de version en cours, il n'y a rien à patcher
|
||||||
[ ${#PVERSIONS[*]} -gt 0 ] || break
|
[ ${#PVERSIONS[*]} -gt 0 ] || break
|
||||||
|
@ -983,10 +994,9 @@ function patch_cmd() {
|
||||||
# il faut patcher les fichiers du profil
|
# il faut patcher les fichiers du profil
|
||||||
etitle "Intégration de la version $version dans le profil $profile"
|
etitle "Intégration de la version $version dans le profil $profile"
|
||||||
[ -n "$rcfile" ] || ac_set_tmpfile rcfile
|
[ -n "$rcfile" ] || ac_set_tmpfile rcfile
|
||||||
|
[ -n "$controlfile" ] || ac_set_tmpfile controlfile
|
||||||
[ -n "$workdir" ] && ac_clean "$workdir"
|
[ -n "$workdir" ] && ac_clean "$workdir"
|
||||||
ac_set_tmpdir workdir
|
ac_set_tmpdir workdir
|
||||||
[ -n "$controldir" ] && ac_clean "$controldir"
|
|
||||||
ac_set_tmpdir controldir
|
|
||||||
curdir="$(pwd)"
|
curdir="$(pwd)"
|
||||||
cd "$workdir"
|
cd "$workdir"
|
||||||
git init -q .
|
git init -q .
|
||||||
|
@ -1036,7 +1046,7 @@ function patch_cmd() {
|
||||||
[ -n "$(git status --porcelain)" ] && git commit -qm "$version"
|
[ -n "$(git status --porcelain)" ] && git commit -qm "$version"
|
||||||
# basculer vers la branche de version et tenter de merger upstream dans version
|
# basculer vers la branche de version et tenter de merger upstream dans version
|
||||||
git checkout -q "v$version"
|
git checkout -q "v$version"
|
||||||
if git merge -q --no-commit upstream; then
|
if git merge -q "${merge_strategy[@]}" --no-commit upstream; then
|
||||||
# tout s'est bien passé
|
# tout s'est bien passé
|
||||||
[ -n "$(git status --porcelain)" ] && git commit -qm "v$version --> $profile"
|
[ -n "$(git status --porcelain)" ] && git commit -qm "v$version --> $profile"
|
||||||
else
|
else
|
||||||
|
@ -1046,17 +1056,48 @@ function patch_cmd() {
|
||||||
[ -f ~/.bashrc ] && . ~/.bashrc
|
[ -f ~/.bashrc ] && . ~/.bashrc
|
||||||
$(qvals source "$ULIBDIR/ulib")
|
$(qvals source "$ULIBDIR/ulib")
|
||||||
urequire DEFAULTS
|
urequire DEFAULTS
|
||||||
function abort() { $(qvals touch "$controldir/ABORT"); exit; }
|
function Commit() { echo COMMIT >$(qvals "$controlfile"); exit; }
|
||||||
function a() { abort \"\$@\"; } # raccourci pour abort
|
# raccourcis pour Commit
|
||||||
function d() { exit; } # raccourci pour done
|
function C() { Commit \"\$@\"; }; function c() { Commit \"\$@\"; }; function commit() { Commit \"\$@\"; }
|
||||||
|
function Abort() { echo ABORT >$(qvals "$controlfile"); exit; }
|
||||||
|
# raccourcis pour Abort
|
||||||
|
function A() { Abort \"\$@\"; }; function a() { Abort \"\$@\"; }; function abort() { Abort \"\$@\"; }
|
||||||
$(qvals cd "$workdir")
|
$(qvals cd "$workdir")
|
||||||
$(qvals eerror "Une erreur s'est produite: examinez la situation et faites les corrections nécessaires")
|
$(qvals eerror "Une erreur s'est produite: consultez les fichiers concernés et faites les corrections nécessaires. En cas de conflit, vous devez les résoudre en examinant les lignes marquées
|
||||||
$(qvals eimportant "Puis tapez exit pour valider l'intégration de la version")
|
<<<<<<< HEAD
|
||||||
$(qvals eimportant "Sinon, tapez abort pour arrêter l'intégration de cette version")
|
=======
|
||||||
|
>>>>>>> upstream
|
||||||
|
puis en gardant la partie HEAD pour les modifications locales et upstream pour les modifications entrantes")
|
||||||
|
$(qvals eimportant "Puis tapez ${COULEUR_VERTE}Commit${COULEUR_NORMALE} pour valider l'intégration de cette version")
|
||||||
|
$(qvals eimportant "Sinon, tapez ${COULEUR_ROUGE}Abort${COULEUR_NORMALE} pour arrêter l'intégration de cette version")
|
||||||
"
|
"
|
||||||
|
>"$controlfile"
|
||||||
"${SHELL:-bash}" --rcfile "$rcfile"
|
"${SHELL:-bash}" --rcfile "$rcfile"
|
||||||
|
control="$(<"$controlfile")"
|
||||||
|
if [ -z "$control" ]; then
|
||||||
|
# demander à l'utilisateur sa décision
|
||||||
|
eerror "Vous n'avez pas terminé votre session par ${COULEUR_VERTE}Commit${COULEUR_NORMALE} ou ${COULEUR_ROUGE}Abort${COULEUR_NORMALE}"
|
||||||
|
ask_yesno "Voulez-vous valider l'intégration de la version?" N && control=COMMIT || control=ABORT
|
||||||
|
fi
|
||||||
|
if [ "$control" == COMMIT ]; then
|
||||||
|
array_from_lines tmpfiles "$(git status --porcelain | awk '{print substr($0, 4)}')"
|
||||||
|
for tmpfile in "${tmpfiles[@]}"; do
|
||||||
|
if grep -qE '^(<<<<<<<|=======|>>>>>>>)' "$tmpfile"; then
|
||||||
|
ewarn "Vous avez choisi de valider l'intégration des modifications mais..."
|
||||||
|
ewarn "$tmpfile: ce fichier semble encore contenir des marques de conflit"
|
||||||
|
if ! ask_yesno -y "Etes-vous sûr d'avoir correctement édité le fichier?" N; then
|
||||||
|
eecho "Annulation de l'intégration de la version"
|
||||||
|
control=ABORT
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
if [ "$control" == ABORT ]; then
|
||||||
|
enote "Vous pouvez reprendre l'intégration de la version $version avec la commande pff -g"
|
||||||
|
break # abort
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
[ -f "$controldir/ABORT" ] && break
|
|
||||||
# récupérer les versions modifiées et supprimer les fichiers de patch
|
# récupérer les versions modifiées et supprimer les fichiers de patch
|
||||||
for vlfile in "${vlfiles[@]}"; do
|
for vlfile in "${vlfiles[@]}"; do
|
||||||
setx pfile=get_pfile "${vlfile%__pv-${version}__}" "$profile" "$pffdir"
|
setx pfile=get_pfile "${vlfile%__pv-${version}__}" "$profile" "$pffdir"
|
||||||
|
@ -1499,8 +1540,8 @@ autopatch=1
|
||||||
version=
|
version=
|
||||||
disttype=auto
|
disttype=auto
|
||||||
ORIGEXTS=("${DEFAULT_ORIGEXTS[@]}")
|
ORIGEXTS=("${DEFAULT_ORIGEXTS[@]}")
|
||||||
PROTECTS=("${DEFAULT_PROTECTS[@]}")
|
|
||||||
unwrap=auto
|
unwrap=auto
|
||||||
|
merge_strategy=
|
||||||
commit_policy=ask
|
commit_policy=ask
|
||||||
profile=
|
profile=
|
||||||
alternate=
|
alternate=
|
||||||
|
@ -1519,6 +1560,8 @@ args=($parse_mode
|
||||||
--no-unwrap unwrap=
|
--no-unwrap unwrap=
|
||||||
-E,--unwrap unwrap=1
|
-E,--unwrap unwrap=1
|
||||||
-g,--patch action=patch
|
-g,--patch action=patch
|
||||||
|
-o,--ours merge_strategy=ours
|
||||||
|
--theirs merge_strategy=theirs
|
||||||
--ask-commit commit_policy=ask
|
--ask-commit commit_policy=ask
|
||||||
-c,--comit commit_policy=1
|
-c,--comit commit_policy=1
|
||||||
--no-commit commit_policy=
|
--no-commit commit_policy=
|
||||||
|
@ -1542,8 +1585,8 @@ array_fix_paths ORIGEXTS
|
||||||
|
|
||||||
case "$action" in
|
case "$action" in
|
||||||
init) init_cmd "$@";;
|
init) init_cmd "$@";;
|
||||||
new) new_cmd "$autopatch" "$version" "$disttype" "$unwrap" "$commit_policy" "$@";;
|
new) new_cmd "$autopatch" "$version" "$disttype" "$unwrap" "$merge_strategy" "$commit_policy" "$@";;
|
||||||
patch) patch_cmd "$commit_policy" "$@";;
|
patch) patch_cmd "$merge_strategy" "$commit_policy" "$@";;
|
||||||
add-global) add_global_cmd "$@";;
|
add-global) add_global_cmd "$@";;
|
||||||
list-locals) list_locals_cmd "$@";;
|
list-locals) list_locals_cmd "$@";;
|
||||||
list-profiles) list_profiles_cmd "$@";;
|
list-profiles) list_profiles_cmd "$@";;
|
||||||
|
|
Loading…
Reference in New Issue