diff --git a/pdev b/pdev index 4c2fc30..e0239c7 100755 --- a/pdev +++ b/pdev @@ -55,6 +55,12 @@ OPTIONS -k, --keep Avec l'option -m, ne pas supprimer une feature branch après l'avoir fusionnée dans develop. + -z, --delete + Supprimer une feature branch, à condition qu'elle aie déjà été + entièrement fusionnée dans la branch develop + -Z, --force-delete + Supprimer une feature branch, même si elle n'a pas encore été fusionnée + dans la branche develop -l, --log -d, --diff @@ -71,6 +77,7 @@ projdir= origin=origin action=branch merge_delete=1 +force_delete= log= diff= parse_opts "${PRETTYOPTS[@]}" \ @@ -81,6 +88,8 @@ parse_opts "${PRETTYOPTS[@]}" \ --online UTOOLS_VCS_OFFLINE= \ -m,--merge action=merge \ -k,--keep merge_delete= \ + -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" @@ -97,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,7 +162,7 @@ fi feature="$1" if [ -n "$feature" ]; then is_feature_branch "$feature" || die "$feature: ce n'est pas une feature branch" - git_have_branch "$feature" || die "$feature: branche invalide" + git_have_branch "$feature" || die "$feature: branche introuvable" elif is_feature_branch "$branch"; then feature="$branch" fi @@ -179,27 +187,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 merge "$feature" -m "Intégration de la feature branch $feature" --no-ff || die + git checkout develop || die + git merge "$feature" -m "Intégration de la branche $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" diff --git a/prel b/prel index 49a8ee6..0a598dd 100755 --- a/prel +++ b/prel @@ -93,6 +93,13 @@ 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. + -z, --delete + Supprimer une branche de release, à condition qu'elle aie déjà été + entièrement fusionnée dans la branch master + -Z, --force-delete + Supprimer une branche de release, même si elle n'a pas encore été + fusionnée dans la branche master + -l, --log Afficher les modifications actuellement effectuée dans la branche de release par rapport à develop. @@ -104,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[@]}" \ @@ -128,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" @@ -208,12 +218,6 @@ if [ "$action" == update ]; then ;; esac - if [ -z "$newver" ]; then - # le cas échéant, tenter de calculer la version en fonction de la - # release - [[ "$release" == release-* ]] && newver="${release#release-}" - fi - set -- "$release" "$1" action=checkout fi @@ -280,6 +284,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 @@ -297,7 +304,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 @@ -326,11 +333,16 @@ 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 [ -z "$newver" ]; then + # le cas échéant, tenter de calculer la version en fonction de la release + is_release_branch "$release" && newver="${release#release-}" + fi + if [ -n "$newver" ]; then - estep "Création du tag $newver" + estepn "Création du tag $newver" git tag "$newver" || die fi @@ -338,26 +350,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" + 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"