migration prel

This commit is contained in:
Jephté Clain 2025-10-20 20:55:35 +04:00
parent a732d22d92
commit bf4d934daa
3 changed files with 203 additions and 261 deletions

View File

@ -37,10 +37,10 @@ PMAN_TOOL_PWIP=FEATURE
PMAN_TOOL_PMAIN=MAIN PMAN_TOOL_PMAIN=MAIN
PMAN_TOOL_PDIST=DIST PMAN_TOOL_PDIST=DIST
UPSTREAM_BASE= ; UPSTREAM_MERGE_FROM= ; UPSTREAM_MERGE_TO=DEVELOP ; UPSTREAM_PREL= ; UPSTREAM_DELETE= UPSTREAM_BASE= ; UPSTREAM_MERGE_FROM= ; UPSTREAM_MERGE_TO=DEVELOP ; UPSTREAM_PREL= ; UPSTREAM_DELETE=
DEVELOP_BASE=MAIN ; DEVELOP_MERGE_FROM=FEATURE ; DEVELOP_MERGE_TO=MAIN ; DEVELOP_PREL=to ; DEVELOP_DELETE=from DEVELOP_BASE=MAIN ; DEVELOP_MERGE_FROM=FEATURE ; DEVELOP_MERGE_TO=MAIN ; DEVELOP_PREL=from ; DEVELOP_DELETE=to
MAIN_BASE= ; MAIN_MERGE_FROM=DEVELOP ; MAIN_MERGE_TO=DIST ; MAIN_PREL=from ; MAIN_DELETE= MAIN_BASE= ; MAIN_MERGE_FROM=DEVELOP ; MAIN_MERGE_TO=DIST ; MAIN_PREL=to ; MAIN_DELETE=
DIST_BASE=MAIN ; DIST_MERGE_FROM=MAIN ; DIST_MERGE_TO= ; DIST_PREL= ; DIST_DELETE= DIST_BASE=MAIN ; DIST_MERGE_FROM=MAIN ; DIST_MERGE_TO= ; DIST_PREL= ; DIST_DELETE=
FEATURE_BASE=DEVELOP ; FEATURE_MERGE_FROM= ; FEATURE_MERGE_TO=DEVELOP ; FEATURE_PREL= ; FEATURE_DELETE=to FEATURE_BASE=DEVELOP ; FEATURE_MERGE_FROM= ; FEATURE_MERGE_TO=DEVELOP ; FEATURE_PREL= ; FEATURE_DELETE=from
function get_base_branch() { function get_base_branch() {
# afficher la branche depuis laquelle créer la branche $1 # afficher la branche depuis laquelle créer la branche $1
@ -112,8 +112,8 @@ function should_delete_merged() {
* PMAN_MERGE_TO -- code de la branche destination dans laquelle la fusion est * 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 faite depuis PMAN_REF_BRANCH. vide si la branche n'a pas de destination
* PMAN_DIR -- direction de la fusion: * PMAN_DIR -- direction de la fusion:
'from' si on fait PMAN_MERGE_FROM --> PMAN_REF_BRANCH 'from' si on fait PMAN_REF_BRANCH --> PMAN_MERGE_TO
'to' 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_PREL_MERGE -- si la fusion devrait se faire avec prel
* PMAN_DELETE_MERGED -- s'il faut supprimer la branche source après la fusion * PMAN_DELETE_MERGED -- s'il faut supprimer la branche source après la fusion
@ -144,18 +144,16 @@ function set_pman_vars() {
PMAN_MERGE_FROM=$(get_merge_from_branch "$PMAN_REF_BRANCH") PMAN_MERGE_FROM=$(get_merge_from_branch "$PMAN_REF_BRANCH")
PMAN_MERGE_TO=$(get_merge_to_branch "$PMAN_REF_BRANCH") PMAN_MERGE_TO=$(get_merge_to_branch "$PMAN_REF_BRANCH")
if [ -n "$1" ]; then PMAN_DIR="$1" if [ -n "$1" ]; then PMAN_DIR="$1"
else PMAN_DIR=to else PMAN_DIR=from
#elif [ -n "$PMAN_MERGE_TO" ]; then PMAN_DIR=to
#else PMAN_DIR=from
fi fi
PMAN_PREL_MERGE=$(should_prel_merge "$PMAN_REF_BRANCH" "$PMAN_DIR" && echo 1) 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) PMAN_DELETE_MERGED=$(should_delete_merged "$PMAN_REF_BRANCH" "$PMAN_DIR" && echo 1)
case "$PMAN_DIR" in case "$PMAN_DIR" in
to) from)
PMAN_MERGE_SRC="$PMAN_REF_BRANCH" PMAN_MERGE_SRC="$PMAN_REF_BRANCH"
PMAN_MERGE_DEST="$PMAN_MERGE_TO" PMAN_MERGE_DEST="$PMAN_MERGE_TO"
;; ;;
from) to)
PMAN_MERGE_SRC="$PMAN_MERGE_FROM" PMAN_MERGE_SRC="$PMAN_MERGE_FROM"
PMAN_MERGE_DEST="$PMAN_REF_BRANCH" PMAN_MERGE_DEST="$PMAN_REF_BRANCH"
;; ;;
@ -216,7 +214,7 @@ $1 == "|" {
} }
function _list_commits() { function _list_commits() {
local source="${1:-$SrcBranch}" dest="${2:-$DestBranch}" mergebase local source="${1:-$PmanMergeSrc}" dest="${2:-$PmanMergeDest}" 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/^\* +/+ /' |
@ -224,7 +222,7 @@ function _list_commits() {
} }
function _show_diff() { function _show_diff() {
local source="${1:-$SrcBranch}" dest="${2:-$DestBranch}" mergebase local source="${1:-$PmanMergeSrc}" dest="${2:-$PmanMergeDest}" 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"
} }
@ -306,7 +304,7 @@ function ensure_gitdir() {
} }
function load_branches() { function load_branches() {
local what="${1:-all}"; shift local branch what="${1:-all}"; shift
case "$what" in case "$what" in
all) all)
[ -n "$Origin" ] || Origin=origin [ -n "$Origin" ] || Origin=origin
@ -316,30 +314,6 @@ function load_branches() {
setx -a AllBranches=git_list_pbranches "$Origin" setx -a AllBranches=git_list_pbranches "$Origin"
;; ;;
current) current)
SrcBranch="$1"
[ -n "$SrcBranch" ] || SrcBranch="$CurrentBranch"
case "$SrcBranch" in
"$UPSTREAM") SrcType=upstream; DestBranch="$DEVELOP";;
"$FEATURE"*) SrcType=feature; DestBranch="$DEVELOP";;
"$DEVELOP") SrcType=develop; DestBranch="$MAIN";;
"$RELEASE"*) SrcType=release; DestBranch="$MAIN";;
"$HOTFIX"*) SrcType=hotfix; DestBranch="$MAIN";;
"$MAIN") SrcType=main; DestBranch="$DIST";;
"$DIST") SrcType=dist; DestBranch=;;
*) SrcType=; DestBranch=;;
esac
case "$DestBranch" in
"$UPSTREAM") DestType=upstream;;
"$FEATURE"*) DestType=feature;;
"$DEVELOP") DestType=develop;;
"$RELEASE"*) DestType=release;;
"$HOTFIX"*) DestType=hotfix;;
"$MAIN") DestType=main;;
"$DIST") DestType=dist;;
*) DestType=;;
esac
local branch
UpstreamBranch= UpstreamBranch=
FeatureBranches=() FeatureBranches=()
DevelopBranch= DevelopBranch=
@ -469,10 +443,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="$SrcBranch") $(echo_setv SrcBranch="$PmanMergeSrc")
$(echo_setv SrcType="$SrcType") $(echo_setv DestBranch="$PmanMergeDest")
$(echo_setv DestBranch="$DestBranch")
$(echo_setv DestType="$DestType")
merge= merge=
delete= delete=
@ -492,32 +464,32 @@ function _mscript_merge_branch() {
local msg local msg
# basculer sur la branche # basculer sur la branche
_scripta "switch to branch $DestBranch" <<EOF _scripta "switch to branch $PmanMergeDest" <<EOF
$comment$(qvals git checkout "$DestBranch")$or_die $comment$(qvals git checkout "$PmanMergeDest")$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 $SrcBranch" <<EOF _scripta "squash merge $PmanMergeSrc" <<EOF
$comment$(qvals git merge "$SrcBranch" --squash)$or_die $comment$(qvals git merge "$PmanMergeSrc" --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 $SrcBranch" msg="Intégration de la branche $PmanMergeSrc"
[ -n "$TechMerge" ] && msg="<pman>$msg" [ -n "$TechMerge" ] && msg="<pman>$msg"
_scripta "merge $SrcBranch" <<EOF _scripta "merge $PmanMergeSrc" <<EOF
$comment$(qvals git merge "$SrcBranch" --no-ff -m "$msg")$or_die $comment$(qvals git merge "$PmanMergeSrc" --no-ff -m "$msg")$or_die
EOF EOF
fi fi
array_addu push_branches "$DestBranch" array_addu push_branches "$PmanMergeDest"
} }
function _mscript_delete_branch() { function _mscript_delete_branch() {
_scripta "delete branch $SrcBranch" <<EOF _scripta "delete branch $PmanMergeSrc" <<EOF
$comment$(qvals git branch -D "$SrcBranch")$or_die $comment$(qvals git branch -D "$PmanMergeSrc")$or_die
EOF EOF
array_addu delete_branches ":$SrcBranch" array_addu delete_branches ":$PmanMergeSrc"
} }
################################################################################ ################################################################################
@ -529,13 +501,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="$SrcBranch") $(echo_setv SrcBranch="$PmanMergeSrc")
$(echo_setv SrcType="$SrcType")
$(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="$DestBranch") $(echo_setv DestBranch="$PmanMergeDest")
$(echo_setv DestType="$DestType")
create= create=
merge= merge=
@ -564,7 +534,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" "$SrcBranch")$or_die $(qvals git checkout -b "$ReleaseBranch" "$PmanMergeSrc")$or_die
EOF EOF
# créer le changelog # créer le changelog
@ -624,3 +594,146 @@ function _rscript_delete_release_branch() {
$comment$(qvals git branch -D "$ReleaseBranch")$or_die $comment$(qvals git branch -D "$ReleaseBranch")$or_die
EOF EOF
} }
################################################################################
# Outils
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}
CurrentBranch=$CurrentBranch
LocalBranches=${LocalBranches[*]}
RemoteBranches=${RemoteBranches[*]}
AllBranches=${AllBranches[*]}
UpstreamBranch=$UpstreamBranch
FeatureBranches=${FeatureBranches[*]}
DevelopBranch=$DevelopBranch
ReleaseBranch=$ReleaseBranch
HotfixBranch=$HotfixBranch
MainBranch=$MainBranch
DistBranch=$DistBranch
"
}
function resolve_unique_branch() {
if [ "$PMAN_REF_BRANCH" == FEATURE ]; then
if [ $# -gt 0 ]; then
PmanRefBranch="$FEATURE${1#$FEATURE}"
elif [[ "$CurrentBranch" == "$FEATURE"* ]]; then
PmanRefBranch="$CurrentBranch"
elif [ ${#FeatureBranches[*]} -eq 0 ]; then
die "Vous devez spécifier la branche de feature"
elif [ ${#FeatureBranches[*]} -eq 1 ]; then
PmanRefBranch="${FeatureBranches[0]}"
else
simple_menu \
PmanRefBranch 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é"
fi
if [ "$PMAN_DIR" == from ]; then
PmanMergeSrc="$PmanRefBranch"
elif [ "$PMAN_DIR" == to ]; then
PmanMergeDest="$PmanRefBranch"
fi
}
function _ensure_ref_branch() {
[ -n "$PmanRefBranch" ] || die "\
La branche $PMAN_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é?)"
}
function _ensure_base_branch() {
[ -n "$PmanBaseBranch" ] || die "\
La branche $PMAN_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é?)"
}
function checkout_action() {
local -a push_branches
[ -n "$PMAN_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"
ask_yesno "Voulez-vous basculer sur cette branche?" O || die
git checkout "$PmanRefBranch"
else
_ensure_base_branch
resolve_should_push
enote "Vous allez créer la branche ${COULEUR_BLEUE}$PmanRefBranch${COULEUR_NORMALE} <-- ${COULEUR_ROUGE}$PmanBaseBranch${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")
_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.
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.
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"
}
function _show_action() {
local commits
setx commits=_list_commits "$PmanMergeSrc" "$PmanMergeDest"
if [ -n "$commits" ]; then
if [ $ShowLevel -ge 2 ]; then
{
echo "\
# Commits à fusionner $PmanMergeSrc --> $PmanMergeDest
$commits
"
_sd_COLOR=always _show_diff
} | less -eRF
else
einfo "Commits à fusionner $PmanMergeSrc --> $PmanMergeDest"
eecho "$commits"
fi
fi
}
function show_action() {
git_check_cleancheckout || ewarn "$git_cleancheckout_DIRTY"
[ -n "$PMAN_UNIQUE" ] || resolve_unique_branch "$@"
ensure_merge_branches
_show_action "$@"
}

View File

@ -7,33 +7,7 @@ git_cleancheckout_DIRTY="\
Vous avez des modifications locales. Vous avez des modifications locales.
Enregistrez ces modifications avant de créer une release" Enregistrez ces modifications avant de créer une release"
function show_action() { function ensure_rel_infos() {
local commits
setx commits=_list_commits
if [ -n "$commits" ]; then
if [ $ShowLevel -ge 2 ]; then
{
echo "\
# Commits à fusionner $SrcBranch --> $DestBranch
$commits
"
_sd_COLOR=always _show_diff
} | less -eRF
else
einfo "Commits à fusionner $SrcBranch --> $DestBranch"
eecho "$commits"
fi
fi
}
function ensure_branches() {
[ -n "$SrcBranch" -a -n "$DestBranch" ] ||
die "$SrcBranch: Aucune configuration de fusion trouvée pour cette branche"
array_contains LocalBranches "$SrcBranch" || die "$SrcBranch: branche source introuvable"
array_contains LocalBranches "$DestBranch" || die "$DestBranch: branche destination introuvable"
Tag="$TAG_PREFIX$Version$TAG_SUFFIX" Tag="$TAG_PREFIX$Version$TAG_SUFFIX"
local -a tags local -a tags
setx -a tags=git tag -l "${TAG_PREFIX}*${TAG_SUFFIX}" setx -a tags=git tag -l "${TAG_PREFIX}*${TAG_SUFFIX}"
@ -71,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}$SrcBranch${COULEUR_NORMALE} - créer la branche de release ${COULEUR_VERTE}$ReleaseBranch${COULEUR_NORMALE} <-- ${COULEUR_BLEUE}$PmanMergeSrc${COULEUR_NORMALE}
- la provisionner avec une description des changements - la provisionner avec une description des changements
- la fusionner dans la branche destination ${COULEUR_ROUGE}$DestBranch${COULEUR_NORMALE}${Push:+ - la fusionner dans la branche destination ${COULEUR_ROUGE}$PmanMergeDest${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}$SrcBranch${COULEUR_NORMALE} - créer la branche de release ${COULEUR_VERTE}$ReleaseBranch${COULEUR_NORMALE} <-- ${COULEUR_BLEUE}$PmanMergeSrc${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"
@ -123,8 +97,8 @@ EOF
$BEFORE_MERGE_RELEASE $BEFORE_MERGE_RELEASE
)$or_die )$or_die
EOF EOF
_rscript_merge_release_branch "$DestBranch" "$Tag" _rscript_merge_release_branch "$PmanMergeDest" "$Tag"
_rscript_merge_release_branch "$SrcBranch" _rscript_merge_release_branch "$PmanMergeSrc"
_rscript_delete_release_branch _rscript_delete_release_branch
[ -n "$AFTER_MERGE_RELEASE" ] && _scripta <<EOF [ -n "$AFTER_MERGE_RELEASE" ] && _scripta <<EOF
( (
@ -183,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}$DestBranch${COULEUR_NORMALE}" dans la branche destination ${COULEUR_ROUGE}$PmanMergeDest${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}$DestBranch${COULEUR_NORMALE}" dans la branche destination ${COULEUR_ROUGE}$PmanMergeDest${COULEUR_NORMALE}"
ask_yesno "Voulez-vous continuer?" O || die ask_yesno "Voulez-vous continuer?" O || die
} }
@ -206,14 +180,14 @@ _Fake=
_KeepScript= _KeepScript=
action=release action=release
ShowLevel=0 ShowLevel=0
[ -z "$PMAN_NO_MERGE" ] && Merge=1 || Merge= Merge=1
[ -z "$PMAN_NO_PUSH" ] && Push=1 || Push= Push=1
Version= Version=
CurrentVersion= CurrentVersion=
ForceCreate= ForceCreate=
args=( args=(
"faire une nouvelle release à partir de la branche source" "faire une nouvelle release"
" -v VERSION [source] " -v VERSION
CONFIGURATION CONFIGURATION
Le fichier .pman.conf contient la configuration des branches. Les variables Le fichier .pman.conf contient la configuration des branches. Les variables
@ -261,8 +235,10 @@ parse_args "$@"; set -- "${args[@]}"
# charger la configuration # charger la configuration
ensure_gitdir "$chdir" ensure_gitdir "$chdir"
load_branches all load_branches all
load_config "$MYNAME" load_config
load_branches current "$1"; shift PMAN_REF_BRANCH=DEVELOP
set_pman_vars
load_branches current
[ -n "$Merge" -a -n "$NOAUTO" ] && ManualRelease=1 || ManualRelease= [ -n "$Merge" -a -n "$NOAUTO" ] && ManualRelease=1 || ManualRelease=
[ -n "$ManualRelease" ] && Merge= [ -n "$ManualRelease" ] && Merge=
@ -272,19 +248,12 @@ resolve_should_push quiet
# puis faire l'action que l'on nous demande # puis faire l'action que l'on nous demande
case "$action" in case "$action" in
show) show) show_action "$@";;
git_check_cleancheckout || ewarn "$git_cleancheckout_DIRTY"
ensure_branches
show_action "$@"
;;
release) release)
[ -z "$_Fake" ] && git_ensure_cleancheckout [ -z "$_Fake" ] && git_ensure_cleancheckout
ensure_branches ensure_merge_branches
case "$SrcType" in ensure_rel_infos
release) merge_release_action "$@";; create_release_action "$@"
hotfix) merge_hotfix_action "$@";;
*) create_release_action "$@";;
esac
;; ;;
*) *)
die "$action: action non implémentée" die "$action: action non implémentée"

162
bin/ptool
View File

@ -7,146 +7,6 @@ git_cleancheckout_DIRTY="\
Vous avez des modifications locales. Vous avez des modifications locales.
Enregistrez ces modifications avant de fusionner la branche" Enregistrez ces modifications avant de fusionner la branche"
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}
CurrentBranch=$CurrentBranch
LocalBranches=${LocalBranches[*]}
RemoteBranches=${RemoteBranches[*]}
AllBranches=${AllBranches[*]}
UpstreamBranch=$UpstreamBranch
FeatureBranches=${FeatureBranches[*]}
DevelopBranch=$DevelopBranch
ReleaseBranch=$ReleaseBranch
HotfixBranch=$HotfixBranch
MainBranch=$MainBranch
DistBranch=$DistBranch
"
}
function resolve_unique_branch() {
if [ "$PMAN_REF_BRANCH" == FEATURE ]; then
if [ $# -gt 0 ]; then
PmanRefBranch="$FEATURE${1#$FEATURE}"
elif [[ "$CurrentBranch" == "$FEATURE"* ]]; then
PmanRefBranch="$CurrentBranch"
elif [ ${#FeatureBranches[*]} -eq 0 ]; then
die "Vous devez spécifier la branche de feature"
elif [ ${#FeatureBranches[*]} -eq 1 ]; then
PmanRefBranch="${FeatureBranches[0]}"
else
simple_menu \
PmanRefBranch 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é"
fi
if [ "$PMAN_DIR" == to ]; then
PmanMergeSrc="$PmanRefBranch"
elif [ "$PMAN_DIR" == from ]; then
PmanMergeDest="$PmanRefBranch"
fi
}
function _ensure_ref_branch() {
[ -n "$PmanRefBranch" ] || die "\
La branche $PMAN_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é?)"
}
function _ensure_base_branch() {
[ -n "$PmanBaseBranch" ] || die "\
La branche $PMAN_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é?)"
}
function checkout_action() {
local -a push_branches
[ -n "$PMAN_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"
ask_yesno "Voulez-vous basculer sur cette branche?" O || die
git checkout "$PmanRefBranch"
else
_ensure_base_branch
resolve_should_push
enote "Vous allez créer la branche ${COULEUR_BLEUE}$PmanRefBranch${COULEUR_NORMALE} <-- ${COULEUR_ROUGE}$PmanBaseBranch${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")
_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.
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.
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"
}
function _show_action() {
local commits
setx commits=_list_commits "$PmanMergeSrc" "$PmanMergeDest"
if [ -n "$commits" ]; then
if [ $ShowLevel -ge 2 ]; then
{
echo "\
# Commits à fusionner $PmanMergeSrc --> $PmanMergeDest
$commits
"
_sd_COLOR=always _show_diff
} | less -eRF
else
einfo "Commits à fusionner $PmanMergeSrc --> $PmanMergeDest"
eecho "$commits"
fi
fi
}
function show_action() {
git_check_cleancheckout || ewarn "$git_cleancheckout_DIRTY"
[ -n "$PMAN_UNIQUE" ] || resolve_unique_branch "$@"
ensure_merge_branches
_show_action "$@"
}
function _merge_action() { function _merge_action() {
enote "\ enote "\
Ce script va Ce script va
@ -304,10 +164,10 @@ USAGE
OPTIONS OPTIONS
REF REF
-t, --merge-to REF -f, --merge-from REF
spécifier la branche de référence et indiquer que la fusion se fait dans spécifier la branche de référence et indiquer que la fusion se fait dans
le sens REF --> DEST. DEST est calculé en fonction de REF le sens REF --> DEST. DEST est calculé en fonction de REF
-f, --merge-from REF -t, --merge-to REF
spécifier la branche de référence et indiquer que la fusion se fait dans spécifier la branche de référence et indiquer que la fusion se fait dans
le sens SRC --> REF. SRC est calculé en fonction de REF" le sens SRC --> REF. SRC est calculé en fonction de REF"
fi fi
@ -317,14 +177,6 @@ OPTIONS
[ -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
-t|--merge-to)
ref="$1"; shift
dir=to
;;
-t*)
ref="${ref#-t}"
dir=to
;;
-f|--merge-from) -f|--merge-from)
ref="$1"; shift ref="$1"; shift
dir=from dir=from
@ -333,6 +185,14 @@ OPTIONS
ref="${ref#-f}" ref="${ref#-f}"
dir=from dir=from
;; ;;
-t|--merge-to)
ref="$1"; shift
dir=to
;;
-t*)
ref="${ref#-t}"
dir=to
;;
esac esac
PMAN_TOOL= PMAN_TOOL=
PMAN_REF_BRANCH="${ref^^}" PMAN_REF_BRANCH="${ref^^}"
@ -420,7 +280,7 @@ if [ -n "$PMAN_MERGE_SRC" -a -n "$PMAN_MERGE_DEST" ]; then
usage="${usage} $PMAN_REF_BRANCH usage="${usage} $PMAN_REF_BRANCH
--show|--merge" --show|--merge"
fi fi
[ "$PMAN_REF_BRANCH" != "$PMAN_MERGE_SRC" ] && bewareDir=" [ "$PMAN_REF_BRANCH" != "$PMAN_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: