possibilité de spécifier merge_strategy pour les conflits

This commit is contained in:
Jephté Clain 2018-04-17 05:18:11 +04:00
parent 5f68f3eb50
commit fa6e87a425
1 changed files with 25 additions and 8 deletions

33
pff
View File

@ -206,6 +206,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 +688,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"
@ -934,7 +937,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,7 +945,8 @@ 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 controlfile control local version profile rcfile curdir workdir controlfile control
local -a profiles vlfiles tmpfiles local -a profiles vlfiles tmpfiles
@ -959,6 +963,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
@ -1035,7 +1045,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
@ -1054,8 +1064,12 @@ function Abort() { echo ABORT >$(qvals "$controlfile"); exit; }
function A() { Abort \"\$@\"; } function A() { Abort \"\$@\"; }
function a() { Abort \"\$@\"; } function a() { 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 ${COULEUR_VERTE}Commit${COULEUR_NORMALE} pour valider l'intégration de la version") <<<<<<< 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") $(qvals eimportant "Sinon, tapez ${COULEUR_ROUGE}Abort${COULEUR_NORMALE} pour arrêter l'intégration de cette version")
" "
>"$controlfile" >"$controlfile"
@ -1515,6 +1529,7 @@ disttype=auto
ORIGEXTS=("${DEFAULT_ORIGEXTS[@]}") ORIGEXTS=("${DEFAULT_ORIGEXTS[@]}")
PROTECTS=("${DEFAULT_PROTECTS[@]}") PROTECTS=("${DEFAULT_PROTECTS[@]}")
unwrap=auto unwrap=auto
merge_strategy=
commit_policy=ask commit_policy=ask
profile= profile=
alternate= alternate=
@ -1533,6 +1548,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=
@ -1556,8 +1573,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 "$@";;