From fa6e87a425dcb0ded181068fa9fd753b7f91e758 Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Tue, 17 Apr 2018 05:18:11 +0400 Subject: [PATCH] =?UTF-8?q?possibilit=C3=A9=20de=20sp=C3=A9cifier=20merge?= =?UTF-8?q?=5Fstrategy=20pour=20les=20conflits?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pff | 33 +++++++++++++++++++++++++-------- 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/pff b/pff index 3a944a5..6c10c97 100755 --- a/pff +++ b/pff @@ -206,6 +206,9 @@ supportées sont: -g, --patch [WORKDIR] Intégrer les modifications entrantes sur les fichiers nouvellement 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 -c, --commit --no-commit @@ -685,7 +688,7 @@ function new__prepare_archive() { } 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" ensure_pffdir pffdir "$pffdir" @@ -934,7 +937,7 @@ function new_cmd() { if [ -n "$autopatch" ]; then # lancer la commande patch pour intégrer les modifications 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 } @@ -942,7 +945,8 @@ function new_cmd() { # pff --patch 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 version profile rcfile curdir workdir controlfile control local -a profiles vlfiles tmpfiles @@ -959,6 +963,12 @@ function patch_cmd() { array_add profiles Common 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 # si pas de version en cours, il n'y a rien à patcher [ ${#PVERSIONS[*]} -gt 0 ] || break @@ -1035,7 +1045,7 @@ function patch_cmd() { [ -n "$(git status --porcelain)" ] && git commit -qm "$version" # basculer vers la branche de version et tenter de merger upstream dans 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é [ -n "$(git status --porcelain)" ] && git commit -qm "v$version --> $profile" else @@ -1054,8 +1064,12 @@ function Abort() { echo ABORT >$(qvals "$controlfile"); exit; } function A() { Abort \"\$@\"; } function a() { Abort \"\$@\"; } $(qvals cd "$workdir") -$(qvals eerror "Une erreur s'est produite: examinez la situation et faites les corrections nécessaires") -$(qvals eimportant "Puis tapez ${COULEUR_VERTE}Commit${COULEUR_NORMALE} pour valider l'intégration de la version") +$(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 + <<<<<<< HEAD + ======= + >>>>>>> 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" @@ -1515,6 +1529,7 @@ disttype=auto ORIGEXTS=("${DEFAULT_ORIGEXTS[@]}") PROTECTS=("${DEFAULT_PROTECTS[@]}") unwrap=auto +merge_strategy= commit_policy=ask profile= alternate= @@ -1533,6 +1548,8 @@ args=($parse_mode --no-unwrap unwrap= -E,--unwrap unwrap=1 -g,--patch action=patch + -o,--ours merge_strategy=ours + --theirs merge_strategy=theirs --ask-commit commit_policy=ask -c,--comit commit_policy=1 --no-commit commit_policy= @@ -1556,8 +1573,8 @@ array_fix_paths ORIGEXTS case "$action" in init) init_cmd "$@";; -new) new_cmd "$autopatch" "$version" "$disttype" "$unwrap" "$commit_policy" "$@";; -patch) patch_cmd "$commit_policy" "$@";; +new) new_cmd "$autopatch" "$version" "$disttype" "$unwrap" "$merge_strategy" "$commit_policy" "$@";; +patch) patch_cmd "$merge_strategy" "$commit_policy" "$@";; add-global) add_global_cmd "$@";; list-locals) list_locals_cmd "$@";; list-profiles) list_profiles_cmd "$@";;