diff --git a/prel b/prel index bc619ac..f45e032 100755 --- a/prel +++ b/prel @@ -93,10 +93,10 @@ OPTIONS S'il n'existe pas de branche de release, proposer de fusionner les modifications de la branche develop dans la branche master, sans préparer de branche de release au préalable. - -d, --delete + -z, --delete Supprimer une branche de release, à condition qu'elle aie déjà été entièrement fusionnée dans la branch master - --force-delete + -Z, --force-delete Supprimer une branche de release, même si elle n'a pas encore été fusionnée dans la branche master @@ -111,12 +111,13 @@ OPTIONS projdir= origin=origin action=auto -update= -merge= checkout= +update= incversion= pver_opts=() write=1 +merge= +force_delete= log= diff= parse_opts "${PRETTYOPTS[@]}" \ @@ -135,6 +136,8 @@ parse_opts "${PRETTYOPTS[@]}" \ -w,--write write=1 \ -n,--no-write write= \ -m,--merge merge=1 \ + -z,--delete action=delete \ + -Z,--force-delete '$action=delete; force_delete=1' \ -l,--log '$action=diff; log=1' \ -d,--diff '$action=diff; diff=1' \ @ args -- "$@" && set -- "${args[@]}" || die "$args" @@ -287,6 +290,9 @@ Vous allez créer la nouvelle branche de release ${COULEUR_VERTE}$release${COULE fi if [ "$r" -eq 0 -a -n "$merge" ]; then + # mettre à jour la branche sur laquelle on se trouve + setx branch=git_get_branch + set -- "$release" action=merge else @@ -304,7 +310,7 @@ if [ -n "$release" ]; then elif ! is_develop_branch "$release"; then die "Aucune branche de release n'existe, vous devez fusionner à partir de develop" fi - git_have_branch "$release" || die "$release: branche invalide" + git_have_branch "$release" || die "$release: branche introuvable" elif is_release_branch "$branch"; then release="$branch" fi @@ -333,7 +339,7 @@ if [ "$action" == merge ]; then estepn "Intégration ${COULEUR_VERTE}$release${COULEUR_NORMALE} --> ${COULEUR_BLEUE}master${COULEUR_NORMALE}" ask_yesno $confirm "Voulez-vous continuer?" O || die - git checkout master + git checkout master || die git merge "$release" -m "Intégration de la branche $release" --no-ff || die if [ -n "$newver" ]; then @@ -345,26 +351,45 @@ if [ "$action" == merge ]; then estepn "Intégration ${COULEUR_VERTE}$release${COULEUR_NORMALE} --> ${COULEUR_BLEUE}develop${COULEUR_NORMALE}" git checkout develop git merge "$release" -m "Intégration de la branche $release" --no-ff || die + fi - git checkout master + # mettre à jour la branche sur laquelle on se trouve + git checkout master || die + setx branch=git_get_branch - estepi "Suppression de la branche locale" - git branch -D "$release" + [ -n "$merge_delete" ] && action=delete +fi - if git_have_remote "$origin"; then - if [ -z "$UTOOLS_VCS_OFFLINE" ]; then - estepi "Suppression de la branche distante" - git push "$origin" ":$release" - elif git_have_rbranch "$release" "$origin"; then - eimportant "\ +if [ "$action" == delete ]; then + if [ -z "$force_delete" ]; then + # vérifier que la branche a été fusionnée + git_is_merged "$release" master || die "Refus de supprimer la branche $release: elle n'a pas été fusionnée dans master" + git_is_merged "$release" develop || die "Refus de supprimer la branche $release: elle n'a pas été fusionnée dans develop" + fi + + if [ "$branch" == "$release" ]; then + # si on est sur la branche en question, en sortir pour pouvoir la + # supprimer + git checkout master || die + fi + + estepi "Suppression de la branche locale" + git branch -D "$release" + + if git_have_remote "$origin"; then + if [ -z "$UTOOLS_VCS_OFFLINE" ]; then + estepi "Suppression de la branche distante" + git push "$origin" ":$release" + elif git_have_rbranch "$release" "$origin"; then + eimportant "\ La branche $origin/$release n'a plus lieu d'être, mais la configuration actuelle interdit de la supprimer. Veuillez le faire manuellement avec la commande suivante: $(qvals git push "$origin" ":$release")" - fi fi fi +fi -elif [ "$action" == diff ]; then +if [ "$action" == diff ]; then if [ -n "$log" ]; then if [ -n "$release" ]; then git log ${diff:+-p} master.."$release"