diff --git a/pdev b/pdev index 308f2d9..7987d0c 100755 --- a/pdev +++ b/pdev @@ -77,6 +77,7 @@ projdir= origin=origin action=branch merge_delete=1 +force_delete= log= diff= parse_opts "${PRETTYOPTS[@]}" \ @@ -87,6 +88,8 @@ parse_opts "${PRETTYOPTS[@]}" \ --online UTOOLS_VCS_OFFLINE= \ -m,--merge action=merge \ -k,--keep merge_delete= \ + -d,--delete action=delete \ + --force-delete '$action=delete; force_delete=1' \ -l,--log '$action=diff; log=1' \ -d,--diff '$action=diff; diff=1' \ @ args -- "$@" && set -- "${args[@]}" || die "$args" @@ -103,7 +106,6 @@ if ! git_have_branch develop; then fi setx branch=git_get_branch - if [ "$action" == branch ]; then feature="$1" source="${2:-develop}" @@ -154,6 +156,9 @@ Vous allez créer la nouvelle feature branch ${COULEUR_VERTE}$feature${COULEUR_N git_fast_forward "$feature" "" "$origin" fi + # mettre à jour la branche sur laquelle on se trouve + setx branch=git_get_branch + exit $? fi @@ -185,27 +190,44 @@ if [ "$action" == merge ]; then estepn "Intégration ${COULEUR_VERTE}$feature${COULEUR_NORMALE} --> ${COULEUR_BLEUE}develop${COULEUR_NORMALE}" ask_yesno "Voulez-vous continuer?" O || die - git checkout develop + git checkout develop || die git merge "$feature" -m "Intégration de la feature branch $feature" --no-ff || die - if [ -n "$merge_delete" ]; then - estepi "Suppression de la branche locale" - git branch -D "$feature" + # mettre à jour la branche sur laquelle on se trouve + setx branch=git_get_branch - if git_have_remote "$origin"; then - if [ -z "$UTOOLS_VCS_OFFLINE" ]; then - estepi "Suppression de la branche distante" - git push "$origin" ":$feature" - else - eimportant "\ -La branche $feature n'a plus lieu d'être, mais la configuration actuelle interdit de la supprimer dans le dépôt distant. -Veuillez le faire manuellement avec la commande suivante: - $(quoted_args git push "$origin" ":$feature")" - fi - fi + [ -n "$merge_delete" ] && action=delete +fi + +if [ "$action" == delete ]; then + if [ -z "$force_delete" ]; then + # vérifier que la branche a été fusionnée + git_is_merged "$feature" develop || die "Refus de supprimer la branche $feature: elle n'a pas été fusionnée dans develop" fi -elif [ "$action" == diff ]; then + if [ "$branch" == "$feature" ]; then + # si on est sur la branche en question, en sortir pour pouvoir la + # supprimer + git checkout develop || die + fi + + estepi "Suppression de la branche locale" + git branch -D "$feature" + + if git_have_remote "$origin"; then + if [ -z "$UTOOLS_VCS_OFFLINE" ]; then + estepi "Suppression de la branche distante" + git push "$origin" ":$feature" + elif git_have_rbranch "$feature" "$origin"; then + eimportant "\ +La branche $origin/$feature n'a plus lieu d'être, mais la configuration actuelle interdit de la supprimer. +Veuillez le faire manuellement avec la commande suivante: + $(quoted_args git push "$origin" ":$feature")" + fi + fi +fi + +if [ "$action" == diff ]; then if [ -n "$log" ]; then if [ -n "$feature" ]; then git log ${diff:+-p} develop.."$feature"