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

110
bin/ptool
View File

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