This commit is contained in:
Jephté Clain 2025-10-20 21:32:42 +04:00
parent bf4d934daa
commit aa9b870159
3 changed files with 170 additions and 175 deletions

View File

@ -72,95 +72,93 @@ function get_merge_to_branch() {
function should_prel_merge() { function should_prel_merge() {
# tester si la branche $1 doit être mergée avec prel dans la direction # tester si la branche $1 doit être mergée avec prel dans la direction
# $2(=to) # $2(=to)
local branch="$1" dir="${2:-to}" infos local branch="$1" merge_dir="${2:-to}" infos
[ -n "$branch" ] || return 1 [ -n "$branch" ] || return 1
infos="${branch^^}_PREL" infos="${branch^^}_PREL"
[ "${!infos}" == "$dir" ] [ "${!infos}" == "$merge_dir" ]
} }
function should_delete_merged() { function should_delete_merged() {
# tester si la branche $1 doit être supprimée après avoir été mergée dans la # tester si la branche $1 doit être supprimée après avoir été mergée dans la
# direction $2(=to) # direction $2(=to)
local branch="$1" dir="${2:-to}" infos local branch="$1" merge_dir="${2:-to}" infos
[ -n "$branch" ] || return 1 [ -n "$branch" ] || return 1
infos="${branch^^}_DELETE" infos="${branch^^}_DELETE"
[ "${!infos}" == "$dir" ] [ "${!infos}" == "$merge_dir" ]
} }
: " : "
# description des variables # # description des variables #
* PMAN_TOOL -- nom de l'outil, e.g pdev, pmain, pdist * REF_BRANCH -- code de la branche de référence basé sur le nom de l'outil
* RefBranch -- nom effectif de la branche si elle est définie dans
* PMAN_REF_BRANCH -- code de la branche de référence basé sur le nom de l'outil
* PmanRefBranch -- nom effectif de la branche si elle est définie dans
.pman.conf, vide sinon .pman.conf, vide sinon
* IfRefBranch -- nom effectif de la branche *si elle existe*, vide sinon * IfRefBranch -- nom effectif de la branche *si elle existe*, vide sinon
* PMAN_UNIQUE -- si la branche de référence est unique. est vide pour les * REF_UNIQUE -- si la branche de référence est unique. est vide pour les
codes de branches multiples, telle que FEATURE codes de branches multiples, telle que FEATURE
* PMAN_BASE_BRANCH -- branche de base à partir de laquelle créer la branche * BASE_BRANCH -- branche de base à partir de laquelle créer la branche
de référence de référence
* PmanBaseBranch -- nom effectif de la branche de base si elle est définie * BaseBranch -- nom effectif de la branche de base si elle est définie
dans .pman.conf, vide sinon dans .pman.conf, vide sinon
* IfBaseBranch -- nom effectif de la branche de base *si elle existe*, vide * IfBaseBranch -- nom effectif de la branche de base *si elle existe*, vide
sinon sinon
* PMAN_MERGE_FROM -- code de la branche source à partir de laquelle la fusion * MERGE_FROM -- code de la branche source à partir de laquelle la fusion
est faite dans PMAN_REF_BRANCH. vide si la branche n'a pas de source est faite dans REF_BRANCH. vide si la branche n'a pas de source
* PMAN_MERGE_TO -- code de la branche destination dans laquelle la fusion est * MERGE_TO -- code de la branche destination dans laquelle la fusion est
faite depuis PMAN_REF_BRANCH. vide si la branche n'a pas de destination faite depuis REF_BRANCH. vide si la branche n'a pas de destination
* PMAN_DIR -- direction de la fusion: * MERGE_DIR -- direction de la fusion:
'from' si on fait PMAN_REF_BRANCH --> PMAN_MERGE_TO 'from' si on fait REF_BRANCH --> MERGE_TO
'to' si on fait PMAN_MERGE_FROM --> PMAN_REF_BRANCH 'to' si on fait MERGE_FROM --> REF_BRANCH
* PMAN_PREL_MERGE -- si la fusion devrait se faire avec prel * PREL_MERGE -- si la fusion devrait se faire avec prel
* PMAN_DELETE_MERGED -- s'il faut supprimer la branche source après la fusion * DELETE_MERGED -- s'il faut supprimer la branche source après la fusion
* PMAN_MERGE_SRC -- code de la branche source pour la fusion, ou vide si la * MERGE_SRC -- code de la branche source pour la fusion, ou vide si la
fusion n'est pas possible fusion n'est pas possible
* PmanMergeSrc -- nom effectif de la branche source si elle est définie * MergeSrc -- nom effectif de la branche source si elle est définie
dans .pman.conf dans .pman.conf
* IfMergeSrc -- nom effectif de la branche source *si elle existe*, vide * IfMergeSrc -- nom effectif de la branche source *si elle existe*, vide
sinon sinon
* PMAN_MERGE_DEST -- code de la branche destination pour la fusion, ou vide si * MERGE_DEST -- code de la branche destination pour la fusion, ou vide si
la fusion n'est pas possible la fusion n'est pas possible
* PmanMergeDest -- nom effectif de la branche destination si elle est * MergeDest -- nom effectif de la branche destination si elle est
définie dans .pman.conf définie dans .pman.conf
* IfMergeDest -- nom effectif de la branche source *si elle existe*, vide * IfMergeDest -- nom effectif de la branche source *si elle existe*, vide
sinon" sinon"
function set_pman_vars() { function set_pman_vars() {
PmanRefBranch="${!PMAN_REF_BRANCH}" RefBranch="${!REF_BRANCH}"
case "$PMAN_REF_BRANCH" in case "$REF_BRANCH" in
FEATURE|RELEASE|HOTFIX) PMAN_UNIQUE=;; FEATURE|RELEASE|HOTFIX) REF_UNIQUE=;;
*) PMAN_UNIQUE=1;; *) REF_UNIQUE=1;;
esac esac
PMAN_BASE_BRANCH=$(get_base_branch "$PMAN_REF_BRANCH") BASE_BRANCH=$(get_base_branch "$REF_BRANCH")
[ -n "$PMAN_BASE_BRANCH" ] && PmanBaseBranch="${!PMAN_BASE_BRANCH}" || PmanBaseBranch= [ -n "$BASE_BRANCH" ] && BaseBranch="${!BASE_BRANCH}" || BaseBranch=
PMAN_MERGE_FROM=$(get_merge_from_branch "$PMAN_REF_BRANCH") MERGE_FROM=$(get_merge_from_branch "$REF_BRANCH")
PMAN_MERGE_TO=$(get_merge_to_branch "$PMAN_REF_BRANCH") MERGE_TO=$(get_merge_to_branch "$REF_BRANCH")
if [ -n "$1" ]; then PMAN_DIR="$1" if [ -n "$1" ]; then MERGE_DIR="$1"
else PMAN_DIR=from else MERGE_DIR=from
fi fi
PMAN_PREL_MERGE=$(should_prel_merge "$PMAN_REF_BRANCH" "$PMAN_DIR" && echo 1) PREL_MERGE=$(should_prel_merge "$REF_BRANCH" "$MERGE_DIR" && echo 1)
PMAN_DELETE_MERGED=$(should_delete_merged "$PMAN_REF_BRANCH" "$PMAN_DIR" && echo 1) DELETE_MERGED=$(should_delete_merged "$REF_BRANCH" "$MERGE_DIR" && echo 1)
case "$PMAN_DIR" in case "$MERGE_DIR" in
from) from)
PMAN_MERGE_SRC="$PMAN_REF_BRANCH" MERGE_SRC="$REF_BRANCH"
PMAN_MERGE_DEST="$PMAN_MERGE_TO" MERGE_DEST="$MERGE_TO"
;; ;;
to) to)
PMAN_MERGE_SRC="$PMAN_MERGE_FROM" MERGE_SRC="$MERGE_FROM"
PMAN_MERGE_DEST="$PMAN_REF_BRANCH" MERGE_DEST="$REF_BRANCH"
;; ;;
esac esac
[ -n "$PMAN_MERGE_SRC" ] && PmanMergeSrc="${!PMAN_MERGE_SRC}" || PmanMergeSrc= [ -n "$MERGE_SRC" ] && MergeSrc="${!MERGE_SRC}" || MergeSrc=
[ -n "$PMAN_MERGE_DEST" ] && PmanMergeDest="${!PMAN_MERGE_DEST}" || PmanMergeDest= [ -n "$MERGE_DEST" ] && MergeDest="${!MERGE_DEST}" || MergeDest=
} }
################################################################################ ################################################################################
@ -214,7 +212,7 @@ $1 == "|" {
} }
function _list_commits() { function _list_commits() {
local source="${1:-$PmanMergeSrc}" dest="${2:-$PmanMergeDest}" mergebase local source="${1:-$MergeSrc}" dest="${2:-$MergeDest}" mergebase
setx mergebase=git merge-base "$dest" "$source" setx mergebase=git merge-base "$dest" "$source"
git log --oneline --graph --no-decorate "$mergebase..$source" | git log --oneline --graph --no-decorate "$mergebase..$source" |
grep -vF '|\' | grep -vF '|/' | sed -r 's/^(\| )+\* +/| /; s/^\* +/+ /' | grep -vF '|\' | grep -vF '|/' | sed -r 's/^(\| )+\* +/| /; s/^\* +/+ /' |
@ -222,7 +220,7 @@ function _list_commits() {
} }
function _show_diff() { function _show_diff() {
local source="${1:-$PmanMergeSrc}" dest="${2:-$PmanMergeDest}" mergebase local source="${1:-$MergeSrc}" dest="${2:-$MergeDest}" mergebase
setx mergebase=git merge-base "$dest" "$source" setx mergebase=git merge-base "$dest" "$source"
git diff ${_sd_COLOR:+--color=$_sd_COLOR} "$mergebase..$source" git diff ${_sd_COLOR:+--color=$_sd_COLOR} "$mergebase..$source"
} }
@ -341,10 +339,10 @@ function load_branches() {
elif [ -n "$DIST" -a "$branch" == "$DIST" ]; then elif [ -n "$DIST" -a "$branch" == "$DIST" ]; then
DistBranch="$branch" DistBranch="$branch"
fi fi
[ -n "$PmanRefBranch" -a "$branch" == "$PmanRefBranch" ] && IfRefBranch="$branch" [ -n "$RefBranch" -a "$branch" == "$RefBranch" ] && IfRefBranch="$branch"
[ -n "$PmanBaseBranch" -a "$branch" == "$PmanBaseBranch" ] && IfBaseBranch="$branch" [ -n "$BaseBranch" -a "$branch" == "$BaseBranch" ] && IfBaseBranch="$branch"
[ -n "$PmanMergeSrc" -a "$branch" == "$PmanMergeSrc" ] && IfMergeSrc="$branch" [ -n "$MergeSrc" -a "$branch" == "$MergeSrc" ] && IfMergeSrc="$branch"
[ -n "$PmanMergeDest" -a "$branch" == "$PmanMergeDest" ] && IfMergeDest="$branch" [ -n "$MergeDest" -a "$branch" == "$MergeDest" ] && IfMergeDest="$branch"
done done
[ -n "$IfMergeSrc" -a "$IfMergeDest" ] && IfCanMerge=1 || IfCanMerge= [ -n "$IfMergeSrc" -a "$IfMergeDest" ] && IfCanMerge=1 || IfCanMerge=
;; ;;
@ -443,8 +441,8 @@ function _mscript_start() {
#!/bin/bash #!/bin/bash
$(qvals source "$NULIBDIR/load.sh") || exit 1 $(qvals source "$NULIBDIR/load.sh") || exit 1
$(echo_setv SrcBranch="$PmanMergeSrc") $(echo_setv MergeSrc="$MergeSrc")
$(echo_setv DestBranch="$PmanMergeDest") $(echo_setv MergeDest="$MergeDest")
merge= merge=
delete= delete=
@ -464,32 +462,32 @@ function _mscript_merge_branch() {
local msg local msg
# basculer sur la branche # basculer sur la branche
_scripta "switch to branch $PmanMergeDest" <<EOF _scripta "switch to branch $MergeDest" <<EOF
$comment$(qvals git checkout "$PmanMergeDest")$or_die $comment$(qvals git checkout "$MergeDest")$or_die
EOF EOF
if [ -n "$SquashMsg" ]; then if [ -n "$SquashMsg" ]; then
msg="$SquashMsg" msg="$SquashMsg"
[ -n "$TechMerge" ] && msg="<pman>$msg" [ -n "$TechMerge" ] && msg="<pman>$msg"
_scripta "squash merge $PmanMergeSrc" <<EOF _scripta "squash merge $MergeSrc" <<EOF
$comment$(qvals git merge "$PmanMergeSrc" --squash)$or_die $comment$(qvals git merge "$MergeSrc" --squash)$or_die
$comment$(qvals git commit -m "$msg")$or_die $comment$(qvals git commit -m "$msg")$or_die
EOF EOF
else else
msg="Intégration de la branche $PmanMergeSrc" msg="Intégration de la branche $MergeSrc"
[ -n "$TechMerge" ] && msg="<pman>$msg" [ -n "$TechMerge" ] && msg="<pman>$msg"
_scripta "merge $PmanMergeSrc" <<EOF _scripta "merge $MergeSrc" <<EOF
$comment$(qvals git merge "$PmanMergeSrc" --no-ff -m "$msg")$or_die $comment$(qvals git merge "$MergeSrc" --no-ff -m "$msg")$or_die
EOF EOF
fi fi
array_addu push_branches "$PmanMergeDest" array_addu push_branches "$MergeDest"
} }
function _mscript_delete_branch() { function _mscript_delete_branch() {
_scripta "delete branch $PmanMergeSrc" <<EOF _scripta "delete branch $MergeSrc" <<EOF
$comment$(qvals git branch -D "$PmanMergeSrc")$or_die $comment$(qvals git branch -D "$MergeSrc")$or_die
EOF EOF
array_addu delete_branches ":$PmanMergeSrc" array_addu delete_branches ":$MergeSrc"
} }
################################################################################ ################################################################################
@ -501,11 +499,11 @@ function _rscript_start() {
#!/bin/bash #!/bin/bash
$(qvals source "$NULIBDIR/load.sh") || exit 1 $(qvals source "$NULIBDIR/load.sh") || exit 1
$(echo_setv SrcBranch="$PmanMergeSrc") $(echo_setv MergeSrc="$MergeSrc")
$(echo_setv Version="$Version") $(echo_setv Version="$Version")
$(echo_setv Tag="$Tag") $(echo_setv Tag="$Tag")
$(echo_setv ReleaseBranch="$ReleaseBranch") $(echo_setv ReleaseBranch="$ReleaseBranch")
$(echo_setv DestBranch="$PmanMergeDest") $(echo_setv MergeDest="$MergeDest")
create= create=
merge= merge=
@ -534,7 +532,7 @@ function _rscript_create_release_branch() {
# créer la branche de release et basculer dessus # créer la branche de release et basculer dessus
_scripta "create branch $ReleaseBranch" <<EOF _scripta "create branch $ReleaseBranch" <<EOF
$(qvals git checkout -b "$ReleaseBranch" "$PmanMergeSrc")$or_die $(qvals git checkout -b "$ReleaseBranch" "$MergeSrc")$or_die
EOF EOF
# créer le changelog # créer le changelog
@ -600,16 +598,15 @@ EOF
function dump_action() { function dump_action() {
enote "Valeurs des variables: enote "Valeurs des variables:
PMAN_TOOL=$PMAN_TOOL REF_BRANCH=$REF_BRANCH${RefBranch:+ RefBranch=$RefBranch IfRefBranch=$IfRefBranch}
PMAN_REF_BRANCH=$PMAN_REF_BRANCH${PmanRefBranch:+ PmanRefBranch=$PmanRefBranch IfRefBranch=$IfRefBranch} BASE_BRANCH=$BASE_BRANCH${BaseBranch:+ BaseBranch=$BaseBranch IfBaseBranch=$IfBaseBranch}
PMAN_BASE_BRANCH=$PMAN_BASE_BRANCH${PmanBaseBranch:+ PmanBaseBranch=$PmanBaseBranch IfBaseBranch=$IfBaseBranch} MERGE_FROM=$MERGE_FROM
PMAN_MERGE_FROM=$PMAN_MERGE_FROM MERGE_TO=$MERGE_TO
PMAN_MERGE_TO=$PMAN_MERGE_TO MERGE_DIR=$MERGE_DIR
PMAN_DIR=$PMAN_DIR PREL_MERGE=$PREL_MERGE
PMAN_PREL_MERGE=$PMAN_PREL_MERGE DELETE_MERGED=$DELETE_MERGED
PMAN_DELETE_MERGED=$PMAN_DELETE_MERGED MERGE_SRC=$MERGE_SRC${MergeSrc:+ MergeSrc=$MergeSrc IfMergeSrc=$IfMergeSrc}
PMAN_MERGE_SRC=$PMAN_MERGE_SRC${PmanMergeSrc:+ PmanMergeSrc=$PmanMergeSrc IfMergeSrc=$IfMergeSrc} MERGE_DEST=$MERGE_DEST${MergeDest:+ MergeDest=$MergeDest IfMergeDest=$IfMergeDest}
PMAN_MERGE_DEST=$PMAN_MERGE_DEST${PmanMergeDest:+ PmanMergeDest=$PmanMergeDest IfMergeDest=$IfMergeDest}
CurrentBranch=$CurrentBranch CurrentBranch=$CurrentBranch
LocalBranches=${LocalBranches[*]} LocalBranches=${LocalBranches[*]}
@ -627,105 +624,105 @@ DistBranch=$DistBranch
} }
function resolve_unique_branch() { function resolve_unique_branch() {
if [ "$PMAN_REF_BRANCH" == FEATURE ]; then if [ "$REF_BRANCH" == FEATURE ]; then
if [ $# -gt 0 ]; then if [ $# -gt 0 ]; then
PmanRefBranch="$FEATURE${1#$FEATURE}" RefBranch="$FEATURE${1#$FEATURE}"
elif [[ "$CurrentBranch" == "$FEATURE"* ]]; then elif [[ "$CurrentBranch" == "$FEATURE"* ]]; then
PmanRefBranch="$CurrentBranch" RefBranch="$CurrentBranch"
elif [ ${#FeatureBranches[*]} -eq 0 ]; then elif [ ${#FeatureBranches[*]} -eq 0 ]; then
die "Vous devez spécifier la branche de feature" die "Vous devez spécifier la branche de feature"
elif [ ${#FeatureBranches[*]} -eq 1 ]; then elif [ ${#FeatureBranches[*]} -eq 1 ]; then
PmanRefBranch="${FeatureBranches[0]}" RefBranch="${FeatureBranches[0]}"
else else
simple_menu \ simple_menu \
PmanRefBranch FeatureBranches \ RefBranch FeatureBranches \
-t "Branches de feature" \ -t "Branches de feature" \
-m "Veuillez choisir la branche de feature" \ -m "Veuillez choisir la branche de feature" \
-d "${FeatureBranches[0]}" -d "${FeatureBranches[0]}"
fi fi
else else
die "resolve_unique_branch: $PMAN_REF_BRANCH: non implémenté" die "resolve_unique_branch: $REF_BRANCH: non implémenté"
fi fi
if [ "$PMAN_DIR" == from ]; then if [ "$MERGE_DIR" == from ]; then
PmanMergeSrc="$PmanRefBranch" MergeSrc="$RefBranch"
elif [ "$PMAN_DIR" == to ]; then elif [ "$MERGE_DIR" == to ]; then
PmanMergeDest="$PmanRefBranch" MergeDest="$RefBranch"
fi fi
} }
function _ensure_ref_branch() { function _ensure_ref_branch() {
[ -n "$PmanRefBranch" ] || die "\ [ -n "$RefBranch" ] || die "\
La branche $PMAN_REF_BRANCH n'a pas été définie. La branche $REF_BRANCH n'a pas été définie.
Veuillez éditer le fichier .pman.conf" Veuillez éditer le fichier .pman.conf"
[ "$1" == init -o -n "$IfRefBranch" ] || die "$PmanRefBranch: cette branche n'existe pas (le dépôt a-t-il été initialisé?)" [ "$1" == init -o -n "$IfRefBranch" ] || die "$RefBranch: cette branche n'existe pas (le dépôt a-t-il été initialisé?)"
} }
function _ensure_base_branch() { function _ensure_base_branch() {
[ -n "$PmanBaseBranch" ] || die "\ [ -n "$BaseBranch" ] || die "\
La branche $PMAN_BASE_BRANCH n'a pas été définie. La branche $BASE_BRANCH n'a pas été définie.
Veuillez éditer le fichier .pman.conf" Veuillez éditer le fichier .pman.conf"
[ "$1" == init -o -n "$IfBaseBranch" ] || die "$PmanBaseBranch: cette branche n'existe pas (le dépôt a-t-il été initialisé?)" [ "$1" == init -o -n "$IfBaseBranch" ] || die "$BaseBranch: cette branche n'existe pas (le dépôt a-t-il été initialisé?)"
} }
function checkout_action() { function checkout_action() {
local -a push_branches local -a push_branches
[ -n "$PMAN_UNIQUE" ] || resolve_unique_branch "$@" [ -n "$REF_UNIQUE" ] || resolve_unique_branch "$@"
_ensure_ref_branch init _ensure_ref_branch init
#if [ -n "$IfRefBranch" ]; then #if [ -n "$IfRefBranch" ]; then
# git checkout "$IfRefBranch" # git checkout "$IfRefBranch"
#el #el
if array_contains LocalBranches "$PmanRefBranch"; then if array_contains LocalBranches "$RefBranch"; then
git checkout "$PmanRefBranch" git checkout "$RefBranch"
elif array_contains AllBranches "$PmanRefBranch"; then elif array_contains AllBranches "$RefBranch"; then
enote "$PmanRefBranch: une branche du même nom existe dans l'origine" enote "$RefBranch: une branche du même nom existe dans l'origine"
ask_yesno "Voulez-vous basculer sur cette branche?" O || die ask_yesno "Voulez-vous basculer sur cette branche?" O || die
git checkout "$PmanRefBranch" git checkout "$RefBranch"
else else
_ensure_base_branch _ensure_base_branch
resolve_should_push resolve_should_push
enote "Vous allez créer la branche ${COULEUR_BLEUE}$PmanRefBranch${COULEUR_NORMALE} <-- ${COULEUR_ROUGE}$PmanBaseBranch${COULEUR_NORMALE}" enote "Vous allez créer la branche ${COULEUR_BLEUE}$RefBranch${COULEUR_NORMALE} <-- ${COULEUR_ROUGE}$BaseBranch${COULEUR_NORMALE}"
ask_yesno "Voulez-vous continuer?" O || die ask_yesno "Voulez-vous continuer?" O || die
einfo "Création de la branche $PmanRefBranch" einfo "Création de la branche $RefBranch"
git checkout -b "$PmanRefBranch" "$PmanBaseBranch" || die git checkout -b "$RefBranch" "$BaseBranch" || die
push_branches+=("$PmanRefBranch") push_branches+=("$RefBranch")
_push_branches _push_branches
fi fi
} }
function ensure_merge_branches() { function ensure_merge_branches() {
[ -n "$PmanMergeSrc" ] || die "\ [ -n "$MergeSrc" ] || die "\
$PmanRefBranch: configuration de fusion non trouvée: la branche $PMAN_MERGE_SRC n'a pas été définie. $RefBranch: configuration de fusion non trouvée: la branche $MERGE_SRC n'a pas été définie.
Veuillez éditer le fichier .pman.conf" Veuillez éditer le fichier .pman.conf"
[ -n "$PmanMergeDest" ] || die "\ [ -n "$MergeDest" ] || die "\
$PmanRefBranch: configuration de fusion non trouvée: la branche $PMAN_MERGE_DEST n'a pas été définie. $RefBranch: configuration de fusion non trouvée: la branche $MERGE_DEST n'a pas été définie.
Veuillez éditer le fichier .pman.conf" Veuillez éditer le fichier .pman.conf"
local branches local branches
[ "$1" == -a ] && branches=AllBranches || branches=LocalBranches [ "$1" == -a ] && branches=AllBranches || branches=LocalBranches
array_contains "$branches" "$PmanMergeSrc" || die "$PmanMergeSrc: branche source introuvable" array_contains "$branches" "$MergeSrc" || die "$MergeSrc: branche source introuvable"
array_contains "$branches" "$PmanMergeDest" || die "$PmanMergeDest: branche destination introuvable" array_contains "$branches" "$MergeDest" || die "$MergeDest: branche destination introuvable"
} }
function _show_action() { function _show_action() {
local commits local commits
setx commits=_list_commits "$PmanMergeSrc" "$PmanMergeDest" setx commits=_list_commits "$MergeSrc" "$MergeDest"
if [ -n "$commits" ]; then if [ -n "$commits" ]; then
if [ $ShowLevel -ge 2 ]; then if [ $ShowLevel -ge 2 ]; then
{ {
echo "\ echo "\
# Commits à fusionner $PmanMergeSrc --> $PmanMergeDest # Commits à fusionner $MergeSrc --> $MergeDest
$commits $commits
" "
_sd_COLOR=always _show_diff _sd_COLOR=always _show_diff
} | less -eRF } | less -eRF
else else
einfo "Commits à fusionner $PmanMergeSrc --> $PmanMergeDest" einfo "Commits à fusionner $MergeSrc --> $MergeDest"
eecho "$commits" eecho "$commits"
fi fi
fi fi
@ -733,7 +730,7 @@ $commits
function show_action() { function show_action() {
git_check_cleancheckout || ewarn "$git_cleancheckout_DIRTY" git_check_cleancheckout || ewarn "$git_cleancheckout_DIRTY"
[ -n "$PMAN_UNIQUE" ] || resolve_unique_branch "$@" [ -n "$REF_UNIQUE" ] || resolve_unique_branch "$@"
ensure_merge_branches ensure_merge_branches
_show_action "$@" _show_action "$@"
} }

View File

@ -45,14 +45,14 @@ L'option --no-push a été forcée puisque ce dépôt n'a pas d'origine"
if [ -n "$Merge" ]; then if [ -n "$Merge" ]; then
enote "\ enote "\
Ce script va: Ce script va:
- créer la branche de release ${COULEUR_VERTE}$ReleaseBranch${COULEUR_NORMALE} <-- ${COULEUR_BLEUE}$PmanMergeSrc${COULEUR_NORMALE} - créer la branche de release ${COULEUR_VERTE}$ReleaseBranch${COULEUR_NORMALE} <-- ${COULEUR_BLEUE}$MergeSrc${COULEUR_NORMALE}
- la provisionner avec une description des changements - la provisionner avec une description des changements
- la fusionner dans la branche destination ${COULEUR_ROUGE}$PmanMergeDest${COULEUR_NORMALE}${Push:+ - la fusionner dans la branche destination ${COULEUR_ROUGE}$MergeDest${COULEUR_NORMALE}${Push:+
- pousser les branches modifiées}" - pousser les branches modifiées}"
else else
enote "\ enote "\
Ce script va: Ce script va:
- créer la branche de release ${COULEUR_VERTE}$ReleaseBranch${COULEUR_NORMALE} <-- ${COULEUR_BLEUE}$PmanMergeSrc${COULEUR_NORMALE} - créer la branche de release ${COULEUR_VERTE}$ReleaseBranch${COULEUR_NORMALE} <-- ${COULEUR_BLEUE}$MergeSrc${COULEUR_NORMALE}
- la provisionner avec une description des changements - la provisionner avec une description des changements
Vous devrez: Vous devrez:
- mettre à jour les informations de release puis relancer ce script" - mettre à jour les informations de release puis relancer ce script"
@ -97,8 +97,8 @@ EOF
$BEFORE_MERGE_RELEASE $BEFORE_MERGE_RELEASE
)$or_die )$or_die
EOF EOF
_rscript_merge_release_branch "$PmanMergeDest" "$Tag" _rscript_merge_release_branch "$MergeDest" "$Tag"
_rscript_merge_release_branch "$PmanMergeSrc" _rscript_merge_release_branch "$MergeSrc"
_rscript_delete_release_branch _rscript_delete_release_branch
[ -n "$AFTER_MERGE_RELEASE" ] && _scripta <<EOF [ -n "$AFTER_MERGE_RELEASE" ] && _scripta <<EOF
( (
@ -157,14 +157,14 @@ function merge_release_action() {
enote "\ enote "\
Vous allez: Vous allez:
- fusionner la branche de release ${COULEUR_VERTE}$ReleaseBranch${COULEUR_NORMALE} - fusionner la branche de release ${COULEUR_VERTE}$ReleaseBranch${COULEUR_NORMALE}
dans la branche destination ${COULEUR_ROUGE}$PmanMergeDest${COULEUR_NORMALE}" dans la branche destination ${COULEUR_ROUGE}$MergeDest${COULEUR_NORMALE}"
ask_yesno "Voulez-vous continuer?" O || die ask_yesno "Voulez-vous continuer?" O || die
} }
function merge_hotfix_action() { function merge_hotfix_action() {
enote "\ enote "\
Vous allez intégrer la branche de hotfix ${COULEUR_JAUNE}$HotfixBranch${COULEUR_NORMALE} Vous allez intégrer la branche de hotfix ${COULEUR_JAUNE}$HotfixBranch${COULEUR_NORMALE}
dans la branche destination ${COULEUR_ROUGE}$PmanMergeDest${COULEUR_NORMALE}" dans la branche destination ${COULEUR_ROUGE}$MergeDest${COULEUR_NORMALE}"
ask_yesno "Voulez-vous continuer?" O || die ask_yesno "Voulez-vous continuer?" O || die
} }
@ -236,7 +236,7 @@ parse_args "$@"; set -- "${args[@]}"
ensure_gitdir "$chdir" ensure_gitdir "$chdir"
load_branches all load_branches all
load_config load_config
PMAN_REF_BRANCH=DEVELOP REF_BRANCH=DEVELOP
set_pman_vars set_pman_vars
load_branches current load_branches current

110
bin/ptool
View File

@ -10,7 +10,7 @@ Enregistrez ces modifications avant de fusionner la branche"
function _merge_action() { function _merge_action() {
enote "\ enote "\
Ce script va Ce script va
- fusionner la branche ${COULEUR_BLEUE}$PmanMergeSrc${COULEUR_NORMALE} dans ${COULEUR_ROUGE}$PmanMergeDest${COULEUR_NORMALE}${Push:+ - fusionner la branche ${COULEUR_BLEUE}$MergeSrc${COULEUR_NORMALE} dans ${COULEUR_ROUGE}$MergeDest${COULEUR_NORMALE}${Push:+
- pousser les branches modifiées}" - pousser les branches modifiées}"
ask_yesno "Voulez-vous continuer?" O || die ask_yesno "Voulez-vous continuer?" O || die
@ -27,13 +27,13 @@ Ce script va
if [ -n "\$merge" ]; then if [ -n "\$merge" ]; then
esection "Fusionner la branche" esection "Fusionner la branche"
EOF EOF
hook="BEFORE_MERGE_$PMAN_MERGE_SRC"; [ -n "${!hook}" ] && _scripta <<EOF hook="BEFORE_MERGE_$MERGE_SRC"; [ -n "${!hook}" ] && _scripta <<EOF
( (
${!hook} ${!hook}
)$or_die )$or_die
EOF EOF
_mscript_merge_branch _mscript_merge_branch
hook="AFTER_MERGE_$PMAN_MERGE_SRC"; [ -n "${!hook}" ] && _scripta <<EOF hook="AFTER_MERGE_$MERGE_SRC"; [ -n "${!hook}" ] && _scripta <<EOF
( (
${!hook} ${!hook}
)$or_die )$or_die
@ -50,7 +50,7 @@ if [ -n "\$delete" ]; then
esection "Supprimer la branche" esection "Supprimer la branche"
EOF EOF
_mscript_delete_branch _mscript_delete_branch
hook="AFTER_DELETE_$PMAN_MERGE_SRC"; [ -n "${!hook}" ] && _scripta <<EOF hook="AFTER_DELETE_$MERGE_SRC"; [ -n "${!hook}" ] && _scripta <<EOF
( (
${!hook} ${!hook}
)$or_die )$or_die
@ -66,7 +66,7 @@ EOF
if [ -n "\$push" ]; then if [ -n "\$push" ]; then
esection "Pousser les branches" esection "Pousser les branches"
EOF EOF
hook="BEFORE_PUSH_$PMAN_MERGE_DEST"; [ -n "${!hook}" ] && _scripta <<EOF hook="BEFORE_PUSH_$MERGE_DEST"; [ -n "${!hook}" ] && _scripta <<EOF
( (
${!hook} ${!hook}
)$or_die )$or_die
@ -78,7 +78,7 @@ EOF
_script_push_branches _script_push_branches
_scripta <<<fi _scripta <<<fi
fi fi
hook="AFTER_PUSH_$PMAN_MERGE_DEST"; [ -n "${!hook}" ] && _scripta <<EOF hook="AFTER_PUSH_$MERGE_DEST"; [ -n "${!hook}" ] && _scripta <<EOF
( (
${!hook} ${!hook}
)$or_die )$or_die
@ -118,30 +118,30 @@ Il y a aussi les commandes supplémentaires suivantes:
} }
function merge_action() { function merge_action() {
[ -n "$PMAN_UNIQUE" ] || resolve_unique_branch "$@" [ -n "$REF_UNIQUE" ] || resolve_unique_branch "$@"
ensure_merge_branches -a ensure_merge_branches -a
if [ -n "$PMAN_PREL_MERGE" ]; then if [ -n "$PREL_MERGE" ]; then
[ -n "$ForceMerge" ] || die "$PmanMergeSrc: cette branche doit être fusionnée dans $PmanMergeDest avec prel" [ -n "$ForceMerge" ] || die "$MergeSrc: cette branche doit être fusionnée dans $MergeDest avec prel"
fi fi
if [ -n "$PMAN_DELETE_MERGED" ]; then if [ -n "$DELETE_MERGED" ]; then
ShouldDelete=1 ShouldDelete=1
[ -n "$AfterMerge" ] || setx AfterMerge=qvals git checkout -q "$PmanMergeDest" [ -n "$AfterMerge" ] || setx AfterMerge=qvals git checkout -q "$MergeDest"
else else
ShouldDelete= ShouldDelete=
Delete= Delete=
[ -n "$AfterMerge" ] || setx AfterMerge=qvals git checkout -q "$PmanMergeSrc" [ -n "$AfterMerge" ] || setx AfterMerge=qvals git checkout -q "$MergeSrc"
fi fi
[ -z "$_Fake" ] && git_ensure_cleancheckout [ -z "$_Fake" ] && git_ensure_cleancheckout
if ! array_contains LocalBranches "$PmanMergeSrc" && array_contains AllBranches "$PmanMergeSrc"; then if ! array_contains LocalBranches "$MergeSrc" && array_contains AllBranches "$MergeSrc"; then
enote "$PmanMergeSrc: une branche du même nom existe dans l'origine" enote "$MergeSrc: une branche du même nom existe dans l'origine"
fi fi
if ! array_contains LocalBranches "$PmanMergeDest" && array_contains AllBranches "$PmanMergeDest"; then if ! array_contains LocalBranches "$MergeDest" && array_contains AllBranches "$MergeDest"; then
enote "$PmanMergeDest: une branche du même nom existe dans l'origine" enote "$MergeDest: une branche du même nom existe dans l'origine"
fi fi
array_contains LocalBranches "$PmanMergeSrc" || die "$PmanMergeSrc: branche locale introuvable" array_contains LocalBranches "$MergeSrc" || die "$MergeSrc: branche locale introuvable"
array_contains LocalBranches "$PmanMergeDest" || die "$PmanMergeDest: branche locale introuvable" array_contains LocalBranches "$MergeDest" || die "$MergeDest: branche locale introuvable"
resolve_should_push resolve_should_push
_merge_action "$@" _merge_action "$@"
@ -154,7 +154,7 @@ function rebase_action() {
################################################################################ ################################################################################
loaded_config= loaded_config=
dir= merge_dir=
if [ "$MYNAME" == ptool ]; then if [ "$MYNAME" == ptool ]; then
if [ "$1" == --help ]; then if [ "$1" == --help ]; then
exit_with eecho "$MYNAME: gérer les branches d'un projet exit_with eecho "$MYNAME: gérer les branches d'un projet
@ -173,66 +173,64 @@ OPTIONS
fi fi
ref="$1"; shift ref="$1"; shift
dir=to merge_dir=to
[ -n "$ref" ] || die "vous spécifier la branche de référence" [ -n "$ref" ] || die "vous spécifier la branche de référence"
case "$ref" in case "$ref" in
-f|--merge-from) -f|--merge-from)
ref="$1"; shift ref="$1"; shift
dir=from merge_dir=from
;; ;;
-f*) -f*)
ref="${ref#-f}" ref="${ref#-f}"
dir=from merge_dir=from
;; ;;
-t|--merge-to) -t|--merge-to)
ref="$1"; shift ref="$1"; shift
dir=to merge_dir=to
;; ;;
-t*) -t*)
ref="${ref#-t}" ref="${ref#-t}"
dir=to merge_dir=to
;; ;;
esac esac
PMAN_TOOL= REF_BRANCH="${ref^^}"
PMAN_REF_BRANCH="${ref^^}" array_contains BRANCHES "$REF_BRANCH" || die "$ref: invalid branch"
array_contains PMAN_BRANCHES "$PMAN_REF_BRANCH" || die "$ref: invalid branch"
else else
PMAN_TOOL="${MYNAME^^}" REF_BRANCH="PMAN_TOOL_${MYNAME^^}"; REF_BRANCH="${!REF_BRANCH}"
PMAN_REF_BRANCH="PMAN_TOOL_${PMAN_TOOL}"; PMAN_REF_BRANCH="${!PMAN_REF_BRANCH}"
fi fi
if check_gitdir; then if check_gitdir; then
load_branches all load_branches all
load_config load_config
set_pman_vars "$dir" set_pman_vars "$merge_dir"
load_branches current load_branches current
loaded_config=1 loaded_config=1
else else
set_pman_vars "$dir" set_pman_vars "$merge_dir"
fi fi
BranchDesc= BranchDesc=
MergeSrcDesc= MergeSrcDesc=
MergeDestDesc= MergeDestDesc=
if [ -n "$PMAN_REF_BRANCH" ]; then if [ -n "$REF_BRANCH" ]; then
BranchDesc="${COULEUR_BLANCHE}<$PMAN_REF_BRANCH>" BranchDesc="${COULEUR_BLANCHE}<$REF_BRANCH>"
[ -n "$PmanRefBranch" -a -n "$PMAN_UNIQUE" ] && BranchDesc="$BranchDesc ($PmanRefBranch)" [ -n "$RefBranch" -a -n "$REF_UNIQUE" ] && BranchDesc="$BranchDesc ($RefBranch)"
BranchDesc="$BranchDesc${COULEUR_NORMALE}" BranchDesc="$BranchDesc${COULEUR_NORMALE}"
fi fi
if [ -n "$PMAN_MERGE_SRC" ]; then if [ -n "$MERGE_SRC" ]; then
MergeSrcDesc="${COULEUR_BLEUE}<$PMAN_MERGE_SRC>" MergeSrcDesc="${COULEUR_BLEUE}<$MERGE_SRC>"
[ -n "$PmanMergeSrc" -a -n "$PMAN_UNIQUE" ] && MergeSrcDesc="$MergeSrcDesc ($PmanMergeSrc)" [ -n "$MergeSrc" -a -n "$REF_UNIQUE" ] && MergeSrcDesc="$MergeSrcDesc ($MergeSrc)"
MergeSrcDesc="$MergeSrcDesc${COULEUR_NORMALE}" MergeSrcDesc="$MergeSrcDesc${COULEUR_NORMALE}"
fi fi
if [ -n "$PMAN_MERGE_DEST" ]; then if [ -n "$MERGE_DEST" ]; then
MergeDestDesc="${COULEUR_ROUGE}<$PMAN_MERGE_DEST>" MergeDestDesc="${COULEUR_ROUGE}<$MERGE_DEST>"
[ -n "$PmanMergeDest" -a -n "$PMAN_UNIQUE" ] && MergeDestDesc="$MergeDestDesc ($PmanMergeDest)" [ -n "$MergeDest" -a -n "$REF_UNIQUE" ] && MergeDestDesc="$MergeDestDesc ($MergeDest)"
MergeDestDesc="$MergeDestDesc${COULEUR_NORMALE}" MergeDestDesc="$MergeDestDesc${COULEUR_NORMALE}"
fi fi
[ -n "$PMAN_UNIQUE" ] && [ -n "$REF_UNIQUE" ] &&
purpose="gérer la branche $BranchDesc" || purpose="gérer la branche $BranchDesc" ||
purpose="gérer les branches $BranchDesc" purpose="gérer les branches $BranchDesc"
usage="--checkout" usage="--checkout"
@ -253,13 +251,13 @@ du dépôt est utilisé par défaut s'il existe. cette option est prioritaire su
--dump action=dump "++afficher les noms des branches" --dump action=dump "++afficher les noms des branches"
) )
if [ -n "$PmanRefBranch" -a -n "$PMAN_UNIQUE" ]; then if [ -n "$RefBranch" -a -n "$REF_UNIQUE" ]; then
args+=( args+=(
--checkout action=checkout "++\ --checkout action=checkout "++\
créer le cas échéant la branche $BranchDesc et basculer vers elle. créer le cas échéant la branche $BranchDesc et basculer vers elle.
c'est l'option par défaut" c'est l'option par défaut"
) )
elif [ -z "$PMAN_UNIQUE" ]; then elif [ -z "$REF_UNIQUE" ]; then
args+=( args+=(
--checkout action=checkout "\ --checkout action=checkout "\
créer le cas échéant la branche $BranchDesc et basculer vers elle. créer le cas échéant la branche $BranchDesc et basculer vers elle.
@ -273,19 +271,19 @@ c'est l'option par défaut"
) )
fi fi
if [ -n "$PMAN_MERGE_SRC" -a -n "$PMAN_MERGE_DEST" ]; then if [ -n "$MERGE_SRC" -a -n "$MERGE_DEST" ]; then
if [ -n "$PMAN_UNIQUE" ]; then if [ -n "$REF_UNIQUE" ]; then
usage="${usage}|--show|--merge" usage="${usage}|--show|--merge"
else else
usage="${usage} $PMAN_REF_BRANCH usage="${usage} $REF_BRANCH
--show|--merge" --show|--merge"
fi fi
[ "$PMAN_REF_BRANCH" != "$PMAN_MERGE_DEST" ] && bewareDir=" [ "$REF_BRANCH" != "$MERGE_DEST" ] && bewareDir="
NB: la fusion se fait dans le sens inverse" || bewareDir= NB: la fusion se fait dans le sens inverse" || bewareDir=
variables="\ variables="\
Les variables supplémentaires suivantes peuvent être définies: Les variables supplémentaires suivantes peuvent être définies:
BEFORE_MERGE_${PMAN_MERGE_SRC} BEFORE_MERGE_${MERGE_SRC}
AFTER_MERGE_${PMAN_MERGE_SRC}" AFTER_MERGE_${MERGE_SRC}"
args+=( args+=(
-w,--show '$action=show; inc@ ShowLevel' "\ -w,--show '$action=show; inc@ ShowLevel' "\
@ -300,7 +298,7 @@ fusionner la branche $MergeSrcDesc dans la branche $MergeDestDesc$bewareDir"
fusionner les modifications de la branche comme un seul commit" fusionner les modifications de la branche comme un seul commit"
) )
if [ -n "$PMAN_PREL_MERGE" ]; then if [ -n "$PREL_MERGE" ]; then
args+=( args+=(
-f,--force-merge ForceMerge=1 "++\ -f,--force-merge ForceMerge=1 "++\
forcer la fusion pour une branche qui devrait être traitée par prel" forcer la fusion pour une branche qui devrait être traitée par prel"
@ -315,9 +313,9 @@ pousser les branches vers leur origine après la fusion.
c'est l'option par défaut" c'est l'option par défaut"
) )
if [ -n "$PMAN_DELETE_MERGED" ]; then if [ -n "$DELETE_MERGED" ]; then
variables="${variables} variables="${variables}
AFTER_DELETE_${PMAN_MERGE_SRC}" AFTER_DELETE_${MERGE_SRC}"
args+=( args+=(
-k,--no-delete Delete= "\ -k,--no-delete Delete= "\
ne pas supprimer la branche $MergeSrcDesc après la fusion dans la branche ne pas supprimer la branche $MergeSrcDesc après la fusion dans la branche
@ -329,10 +327,10 @@ c'est l'option par défaut"
) )
fi fi
if [ -n "$PMAN_MERGE_DEST" ]; then if [ -n "$MERGE_DEST" ]; then
variables="${variables} variables="${variables}
BEFORE_PUSH_${PMAN_MERGE_DEST} BEFORE_PUSH_${MERGE_DEST}
AFTER_PUSH_${PMAN_MERGE_DEST}" AFTER_PUSH_${MERGE_DEST}"
fi fi
args+=( args+=(
@ -372,7 +370,7 @@ if [ -z "$loaded_config" -o -n "$chdir" -o -n "$ConfigFile" -o -n "$ConfigBranch
ensure_gitdir "$chdir" ensure_gitdir "$chdir"
load_branches all load_branches all
load_config load_config
set_pman_vars "$dir" set_pman_vars "$merge_dir"
load_branches current load_branches current
fi fi
resolve_should_push quiet resolve_should_push quiet