From 8d4d35dde53e8490287e16b33826731c56eb9654 Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Mon, 23 Mar 2015 07:33:01 +0400 Subject: [PATCH] =?UTF-8?q?mettre=20=C3=A0=20jour=20la=20version=20avec=20?= =?UTF-8?q?pver?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- todo/prel | 137 ++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 122 insertions(+), 15 deletions(-) diff --git a/todo/prel b/todo/prel index 4a864ff..ea1bfbc 100755 --- a/todo/prel +++ b/todo/prel @@ -81,6 +81,13 @@ OPTIONS jusqu'à la release finale. Ainsi, la branche de release est nommée d'après la version finale, mais le projet peut recevoir une version de pré-release incrémentale. + -w, --write + Si une nouvelle branche est créée avec -u, mettre à jour le fichier + VERSION.txt avec pver. C'est l'option par défaut. + -n, --no-write + Si une nouvelle branche est créée avec -u, NE PAS mettre à jour le + fichier VERSION.txt avec pver. Utiliser cette option si la mise à jour + du numéro de version doit être faite par manière particulière. -m, --merge Si la branche actuelle est une branche de release, ou s'il existe une @@ -102,6 +109,7 @@ origin=origin action=checkout incversion= pver_opts=() +write=1 log= diff= parse_opts "${PRETTYOPTS[@]}" \ @@ -117,6 +125,8 @@ parse_opts "${PRETTYOPTS[@]}" \ -z,--minor '$action=update; incversion=minor' \ -p,--patchlevel '$action=update; incversion=patchlevel' \ -v: '$action=update; add@ pver_opts' \ + -w,--write write=1 \ + -n,--no-write write= \ -m,--merge action=merge \ -l,--log '$action=diff; log=1' \ -d,--diff '$action=diff; diff=1' \ @@ -131,13 +141,14 @@ git_ensure_gitvcs setx branch=git_get_branch if [ "$action" == update ]; then - setx version=pver -g "" + setx oldver=pver -g "" + newver= if [ "$incversion" == auto ]; then if [ ${#pver_opts[*]} -gt 0 ]; then # des options ont été spécifiées, les honorer - setx specv=pver -s "$version" "${pver_opts[@]}" - release="release-$specv" + setx newver=pver -s "$oldver" "${pver_opts[@]}" + release="release-$newver" else # sinon, prendre une décision en fonction des branches de release # qui existent déjà @@ -161,9 +172,9 @@ if [ "$action" == update ]; then fi case "$incversion" in menu) - setx majorv=pver -s "$version" -ux "${pver_opts[@]}" - setx minorv=pver -s "$version" -uz "${pver_opts[@]}" - setx patchlevelv=pver -g "$version" -up "${pver_opts[@]}" + setx majorv=pver -s "$oldver" -ux "${pver_opts[@]}" + setx minorv=pver -s "$oldver" -uz "${pver_opts[@]}" + setx patchlevelv=pver -g "$oldver" -up "${pver_opts[@]}" release="release-$minorv" branches=("release-$majorv" "release-$minorv" "release-$patchlevelv" master) simple_menu release branches \ @@ -171,19 +182,25 @@ if [ "$action" == update ]; then -m "Veuillez choisir la branche à créer" ;; major) - setx majorv=pver -s "$version" -ux "${pver_opts[@]}" - release="release-$majorv" + setx newver=pver -s "$oldver" -ux "${pver_opts[@]}" + release="release-$newver" ;; minor) - setx minorv=pver -s "$version" -uz "${pver_opts[@]}" - release="release-$minorv" + setx newver=pver -s "$oldver" -uz "${pver_opts[@]}" + release="release-$newver" ;; patchlevel) - setx patchlevelv=pver -g "$version" -up "${pver_opts[@]}" - release="release-$patchlevelv" + setx newver=pver -g "$oldver" -up "${pver_opts[@]}" + release="release-$newver" ;; 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 @@ -223,8 +240,9 @@ if [ "$action" == checkout ]; then # Créer/basculer vers une release branch git_ensure_cleancheckout is_any_branch "$release" master release || die "$release: ce n'est pas une release branch" + r=0 if git_have_branch "$release"; then - git checkout "$release" + git checkout "$release"; r=$? else estepn "\ Vous allez créer la nouvelle release branch ${COULEUR_VERTE}$release${COULEUR_NORMALE} @@ -233,8 +251,97 @@ Vous allez créer la nouvelle release branch ${COULEUR_VERTE}$release${COULEUR_N git_ensure_branch "$release" "$source" "$origin" [ $? -eq 2 ] && die "Impossible de créer la branche $release. Veuillez vérifier que la branche $source existe" - git checkout "$release" + git checkout "$release"; r=$? + + if [ "$r" -eq 0 -a -n "$newver" ]; then + if pver -uv "$newver"; then + git add -A + git commit -m "Initialiser la version $newver" + fi + fi fi - exit $? + exit "$r" +fi + +setx -a branches=list_release_branches +setb have_release_branches=[ ${#branches[*]} -gt 0 ] + +release="$1" +if [ -n "$release" ]; then + if [ -n "$have_release_branches" ]; then + is_release_branch "$release" || die "$release: ce n'est pas une release branch" + 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" +elif is_release_branch "$branch"; then + release="$branch" +fi + +if [ "$action" == merge ]; then + confirm= + + if [ -z "$release" ]; then + if [ ${#branches[*]} -eq 0 ]; then + ewarn "Aucune release branch n'a été préparée. +Si vous continuez, la branche develop sera fusionnée directement dans master." + release=develop + confirm=-y + elif [ ${#branches[*]} -eq 1 ]; then + release="${branches[0]}" + estepn "Autosélection de $release" + else + default_release="$branch" + array_contains branches "$default_release" || default_release="${branches[0]}" + simple_menu release branches -d "$default_release" \ + -t "Choix de la release branch" \ + -m "Veuillez choisir la branche" + fi + fi + + estepn "\ +Intégration de la branche ${COULEUR_VERTE}$release${COULEUR_NORMALE} +dans la branche de destination ${COULEUR_BLEUE}master${COULEUR_NORMALE}" + ask_yesno $confirm "Voulez-vous continuer?" O || die + + git checkout master + git merge "$release" -m "Intégration de la release branch $release" --no-ff || die + + if [ "$release" != develop ]; then + git checkout develop + git merge "$release" -m "Intégration de la release branch $release" --no-ff || die + + git checkout master + + 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" + else + eimportant "\ +La branche $release 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" ":$release")" + fi + fi + fi + +elif [ "$action" == diff ]; then + if [ -n "$log" ]; then + if [ -n "$release" ]; then + git log ${diff:+-p} master.."$release" + else + git log ${diff:+-p} master..develop + fi + elif [ -n "$diff" ]; then + if [ -n "$release" ]; then + git diff master.."$release" + else + git diff master..develop + fi + fi fi