pman: améliorer l'ergonomie

This commit is contained in:
Jephté Clain 2025-03-03 06:07:52 +04:00
parent 0cfad79ec0
commit 9a2378ba74
4 changed files with 116 additions and 64 deletions

View File

@ -224,13 +224,15 @@ function load_config() {
if [ -n "$ConfigFile" ]; then
source "$ConfigFile" || die || return
elif [ -n "$ConfigBranch" ]; then
# c'est le seul cas où ConfigFile reste vide
if ! array_contains LocalBranches "$ConfigBranch"; then
die "$ConfigBranch: branche de configuration introuvable" || return
else
ac_set_tmpfile ConfigFile
git show "$ConfigBranch:.pman.conf" >"$ConfigFile" 2>/dev/null
[ -s "$ConfigFile" ] || die "$ConfigBranch: aucune configuration trouvée sur cette branche" || return
source "$ConfigFile"
local config
ac_set_tmpfile config
git show "$ConfigBranch:.pman.conf" >"$config" 2>/dev/null
[ -s "$config" ] || die "$ConfigBranch: aucune configuration trouvée sur cette branche" || return
source "$config"
fi
elif [ -f .pman.conf ]; then
ConfigFile="$(pwd)/.pman.conf"

View File

@ -25,6 +25,9 @@ function ensure_branches() {
}
function merge_action() {
[ -z "$ShouldPush" ] && enote "\
L'option --no-push a été forcée puisque ce dépôt n'a pas d'origine"
enote "\
Ce script va
- fusionner la branche ${COULEUR_BLEUE}$SrcBranch${COULEUR_NORMALE} dans ${COULEUR_ROUGE}$DestBranch${COULEUR_NORMALE}${Push:+
@ -54,7 +57,7 @@ EOF
fi
EOF
if [ -z "$ForbidDelete" ]; then
if [ -n "$ShouldDelete" ]; then
_scripta <<EOF
################################################################################
# delete
@ -94,26 +97,25 @@ EOF
fi
EOF
[ -n "$Delete" -o "$ForbidDelete" ] && Deleted=1 || Deleted=
[ -n "$Push" -o "$CantPush" ] && Pushed=1 || Pushed=
[ -n "$ShouldDelete" -a -n "$Delete" ] && ShouldDelete=
[ -n "$ShouldPush" -a -n "$Push" ] && ShouldPush=
if [ -n "$_NoRunScript" ]; then
einfo "Veuillez consulter le script $script pour le détail des opérations à effectuer"
elif ! "$script" merge ${Delete:+delete} ${Push:+push}; then
eimportant "\
Le script $script a été lancé avec les arguments 'merge${Delete:+ delete}${Push:+ push}'
Veuillez le consulter pour le détail des opérations qui n'ont pas pu êtres effectuées"
En cas d'erreur de merge, veuillez corriger les erreurs puis continuer avec
git merge --continue
Sinon, veuillez consulter le script et/ou le relancer
./$script${Delete:+ delete}${Push:+ push}"
die
elif [ -n "$Deleted" -a -n "$Pushed" ]; then
elif [ -n "$Delete" -a -n "$Push" ]; then
[ -n "$_KeepScript" ] || rm "$script"
else
local cmd
[ -n "$Deleted" ] || cmd="$cmd
./$script delete"
[ -n "$Pushed" ] || cmd="$cmd
./$script push"
einfo "\
Le script $script a été lancé avec les arguments 'merge${Delete:+ delete}${Push:+ push}'
Veuillez le consulter pour le détail des autres opérations à effectuer$cmd"
Vous pouvez consulter le script et/ou le relancer
./$script${ShouldDelete:+ delete}${ShouldPush:+ push}"
fi
}
@ -184,13 +186,12 @@ load_branches all
load_config "$MYNAME"
load_branches current "$1"
CantPush=
ShouldPush=1
[ -n "$Origin" ] || Origin=origin
if ! git_have_remote "$Origin" && [ -n "$Push" ]; then
ewarn "L'option --no-push a été forcée puisque ce dépôt n'a pas d'origine"
CantPush=1
ShouldPush=
fi
[ -n "$CantPush" ] && Push=
[ -z "$ShouldPush" ] && Push=
# puis faire l'action que l'on nous demande
case "$action" in
@ -200,21 +201,26 @@ show)
show_action "$@"
;;
merge)
ForbidDelete=
ShouldDelete=1
case "$SrcType" in
develop|release|hotfix)
die "$SrcBranch: cette branche doit être fusionnée dans $DestBranch avec prel"
;;
*)
# n'autoriser la suppression que pour feature
[ "$SrcType" == feature ] || ForbidDelete=1
[ "$SrcType" == feature ] || ShouldDelete=
;;
esac
[ -n "$ForbidDelete" ] && Delete=
[ -z "$ShouldDelete" ] && Delete=
git_ensure_cleancheckout
if ! array_contains LocalBranches "$SrcBranch"; then
# si la branche source n'existe pas, la créer
exec "$MYDIR/pman" "$FEATURE${SrcBranch#$FEATURE}"
args=(--origin "$Origin")
if [ -n "$ConfigFile" ]; then args+=(--config-file "$ConfigFile")
elif [ -n "$ConfigBranch" ]; then args+=(--config-branch "$ConfigBranch")
fi
[ -z "$Push" ] && args+=(--no-push)
exec "$MYDIR/pman" "${args[@]}" "$FEATURE${SrcBranch#$FEATURE}"
else
ensure_branches
merge_action "$@"

102
bin/pman
View File

@ -34,6 +34,16 @@ function show_action() {
# Initialisation
################################################################################
function resolve_should_push() {
ShouldPush=1
[ -n "$Origin" ] || Origin=origin
if ! git_have_remote "$Origin" && [ -n "$Push" ]; then
enote "L'option --no-push a été forcée puisque ce dépôt n'a pas d'origine"
ShouldPush=
fi
[ -z "$ShouldPush" ] && Push=
}
function _init_config() {
if [ ! -f .pman.conf -o -n "$ForceCreate" ]; then
ac_set_tmpfile config
@ -59,10 +69,11 @@ function _init_config() {
}
function init_repo_action() {
local -a push_branches; local config
[ ${#LocalBranches[*]} -eq 0 ] || die "Ce dépôt a déjà été initialisé"
local -a push_branches
[ -n "$Origin" ] || Origin=origin
_init_config || exit_with ewarn "Initialisation du dépôt annulée"
einfo "Création de la branche $MAIN"
@ -78,9 +89,11 @@ function init_repo_action() {
}
function init_config_action() {
[ -f .pman.conf ] && die "La configuration pman a déjà été initialisée"
local -a push_branches; config
local -a push_branches
[ -f .pman.conf -a -z "$ForceCreate" ] && die "La configuration pman a déjà été initialisée"
resolve_should_push
_init_config || exit_with ewarn "Initialisation de la configuration annulée"
git commit -m "configuration pman"
@ -89,17 +102,33 @@ function init_config_action() {
_push_branches
}
function init_develop_action() {
if [ -z "$DevelopBranch" ]; then
[ -n "$DEVELOP" ] || die "La branche DEVELOP n'a pas été définie"
function _ensure_main_branch() {
[ -n "$MAIN" ] || die "La branche MAIN n'a pas été définie"
[ -n "$MainBranch" ] || die "$MAIN: cette branche n'existe pas (le dépôt a-t-il été initialisé?)"
}
function checkout_main_action() {
_ensure_main_branch
git checkout -q "$MAIN"
}
function _ensure_develop_branch() {
[ -n "$DEVELOP" ] || die "La branche DEVELOP n'a pas été définie"
[ -n "$DevelopBranch" ] || die "$DEVELOP: cette branche n'existe pas (le dépôt a-t-il été initialisé?)"
}
function init_develop_action() {
local -a push_branches
if [ -z "$DevelopBranch" ]; then
_ensure_main_branch
_ensure_develop_branch
resolve_should_push
enote "Vous allez créer la branche ${COULEUR_VERTE}$DEVELOP${COULEUR_NORMALE} <-- ${COULEUR_BLEUE}$MAIN${COULEUR_NORMALE}"
ask_yesno "Voulez-vous continuer?" O || die
local -a push_branches
einfo "Création de la branche $DEVELOP"
git checkout -b "$DEVELOP" "$MAIN" || die
push_branches+=("$DEVELOP")
@ -109,17 +138,23 @@ function init_develop_action() {
git checkout -q "$DEVELOP"
}
function init_upstream_action() {
if [ -z "$UpstreamBranch" ]; then
function _ensure_upstream_branch() {
[ -n "$UPSTREAM" ] || die "La branche UPSTREAM n'a pas été définie"
[ -n "$DEVELOP" ] || die "La branche DEVELOP n'a pas été définie"
[ -n "$DevelopBranch" ] || die "$DEVELOP: cette branche n'existe pas (le dépôt a-t-il été initialisé?)"
[ -n "$UpstreamBranch" ] || die "$UPSTREAM: cette branche n'existe pas (le dépôt a-t-il été initialisé?)"
}
function init_upstream_action() {
local -a push_branches; local config
if [ -z "$UpstreamBranch" ]; then
_ensure_develop_branch
_ensure_upstream_branch
resolve_should_push
enote "Vous allez créer la branche ${COULEUR_VERTE}$UPSTREAM${COULEUR_NORMALE}"
ask_yesno "Voulez-vous continuer?" O || die
local -a push_branches; local config
# faire une copie de la configuration actuelle
ac_set_tmpfile config
cp "$ConfigFile" "$config"
@ -145,17 +180,23 @@ function init_upstream_action() {
git checkout -q "$UPSTREAM"
}
function init_dist_action() {
if [ -z "$DistBranch" ]; then
function _ensure_dist_branch() {
[ -n "$DIST" ] || die "La branche DIST n'a pas été définie"
[ -n "$MAIN" ] || die "La branche MAIN n'a pas été définie"
[ -n "$MainBranch" ] || die "$MAIN: cette branche n'existe pas (le dépôt a-t-il été initialisé?)"
[ -n "$DistBranch" ] || die "$DIST: cette branche n'existe pas (le dépôt a-t-il été initialisé?)"
}
function init_dist_action() {
local -a push_branches
if [ -z "$DistBranch" ]; then
_ensure_main_branch
_ensure_dist_branch
resolve_should_push
enote "Vous allez créer la branche ${COULEUR_VERTE}$DIST${COULEUR_NORMALE} <-- ${COULEUR_BLEUE}$MAIN${COULEUR_NORMALE}"
ask_yesno "Voulez-vous continuer?" O || die
local -a push_branches
einfo "Création de la branche $DIST"
git checkout -b "$DIST" "$MAIN" || die
push_branches+=("$DIST")
@ -166,18 +207,21 @@ function init_dist_action() {
}
function init_feature_action() {
local branch="${1#$FEATURE}"
[ -n "$branch" ] || die "Vous devez définir la nom de la branche à créer"
local -a push_branches; local branch
[ -n "$FEATURE" ] || die "La branche FEATURE n'a pas été définie"
branch="${1#$FEATURE}"
[ -n "$branch" ] || die "Vous devez spécifier le nom de la branche"
branch="$FEATURE$branch"
if ! array_contains AllBranches "$branch"; then
[ -n "$DEVELOP" ] || die "La branche DEVELOP n'a pas été définie"
[ -n "$DevelopBranch" ] || die "$DEVELOP: cette branche n'existe pas (le dépôt a-t-il été initialisé?)"
_ensure_develop_branch
resolve_should_push
enote "Vous allez créer la branche ${COULEUR_VERTE}$branch${COULEUR_NORMALE} <-- ${COULEUR_BLEUE}$DEVELOP${COULEUR_NORMALE}"
ask_yesno "Voulez-vous continuer?" O || die
local -a push_branches
einfo "Création de la branche $branch"
git checkout -b "$branch" "$DEVELOP" || die
push_branches+=("$branch")
@ -192,7 +236,7 @@ function init_action() {
case "$what" in
init|repo|r) init_repo_action "$@";;
config) init_config_action "$@";;
main|m) git checkout -q "$MAIN";;
main|m) checkout_main_action;;
develop|dev|d) init_develop_action "$@";;
upstream|up|u) init_upstream_action "$@";;
dist|x) init_dist_action "$@";;
@ -209,7 +253,7 @@ ConfigBranch=
ConfigFile=
action=init
Origin=
Push=1
[ -z "$PMAN_NO_PUSH" ] && Push=1 || Push=
ForceCreate=
args=(
"gérer un projet git"

View File

@ -44,6 +44,8 @@ function create_release_action() {
[ -n "$ManualRelease" ] && ewarn "\
L'option --no-merge a été forcée puisque ce dépôt ne supporte pas les releases automatiques"
[ -z "$ShouldPush" ] && enote "\
L'option --no-push a été forcée puisque ce dépôt n'a pas d'origine"
if [ -z "$Version" -a -n "$CurrentVersion" -a -f VERSION.txt ]; then
Version="$(<VERSION.txt)"
@ -129,26 +131,25 @@ EOF
fi
EOF
[ -n "$Merge" ] && Merged=1 || Merged=
[ -n "$Push" -o "$CantPush" ] && Pushed=1 || Pushed=
[ -z "$ManualRelease" -a -n "$Merge" ] && ShouldMerge= || ShouldMerge=1
[ -n "$ShouldPush" -a -n "$Push" ] && ShouldPush=
if [ -n "$_NoRunScript" ]; then
einfo "Veuillez consulter le script $script pour le détail des opérations à effectuer"
elif ! "$script" create ${Merge:+merge} ${Push:+push}; then
eimportant "\
Le script $script a été lancé avec les arguments 'create${Merge:+ merge}${Push:+ push}'
Veuillez le consulter pour le détail des opérations qui n'ont pas pu êtres effectuées"
En cas d'erreur de merge, veuillez corriger les erreurs puis continuer avec
git merge --continue
Veuillez aussi consulter le script et/ou le relancer
./$script${Push:+ push}"
die
elif [ -n "$Merged" -a -n "$Pushed" ]; then
elif [ -n "$Merge" -a -n "$Pushe" ]; then
[ -n "$_KeepScript" ] || rm "$script"
else
local cmd
[ -n "$Merged" ] || cmd="$cmd
./$script merge"
[ -n "$Pushed" ] || cmd="$cmd
./$script push"
einfo "\
Le script $script a été lancé avec les arguments 'create${Merge:+ merge}${Push:+ push}'
Veuillez le consulter pour le détail des autres opérations à effectuer$cmd"
Vous pouvez consulter le script et/ou le relancer
./$script${ShouldMerge:+ merge}${ShouldPush:+ push}"
fi
}
@ -238,13 +239,12 @@ load_branches current "$1"; shift
[ -n "$ManualRelease" ] && Merge=
[ -z "$Merge" ] && Push=
CantPush=
ShouldPush=1
[ -n "$Origin" ] || Origin=origin
if ! git_have_remote "$Origin" && [ -n "$Push" ]; then
ewarn "L'option --no-push a été forcée puisque ce dépôt n'a pas d'origine"
CantPush=1
ShouldPush=
fi
[ -n "$CantPush" ] && Push=
[ -z "$ShouldPush" ] && Push=
# puis faire l'action que l'on nous demande
case "$action" in