2014-01-28 23:34:56 +04:00
|
|
|
#!/bin/bash
|
|
|
|
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
2015-03-19 15:40:19 +04:00
|
|
|
|
|
|
|
if [ $# -eq 1 -a "$1" == --nutools-completion ]; then
|
|
|
|
echo '
|
|
|
|
function __prel_completion() {
|
|
|
|
local cur
|
|
|
|
_get_comp_words_by_ref cur
|
|
|
|
COMPREPLY=($(compgen -W "$(__prel_branches)" "$cur"))
|
|
|
|
}
|
|
|
|
complete -F __prel_completion prel
|
|
|
|
'
|
|
|
|
exit 0
|
|
|
|
fi
|
|
|
|
|
2023-01-25 17:14:03 +04:00
|
|
|
source "$(dirname -- "$0")/lib/ulib/auto" || exit 1
|
|
|
|
urequire ptools
|
2014-01-28 23:34:56 +04:00
|
|
|
|
2015-03-23 07:56:32 +04:00
|
|
|
# XXX Ajouter une option pour fusionner les modifications d'une branche de
|
|
|
|
# pré-release dans develop
|
2014-01-28 23:34:56 +04:00
|
|
|
|
|
|
|
function display_help() {
|
|
|
|
uecho "$scriptname: basculer sur une branche de release
|
|
|
|
|
|
|
|
USAGE
|
2015-03-13 00:22:07 +04:00
|
|
|
$scriptname -u [SOURCE]
|
2015-03-13 07:11:05 +04:00
|
|
|
$scriptname -c [RELEASE [SOURCE]]
|
2015-03-13 00:22:07 +04:00
|
|
|
$scriptname -m|-l|-d [RELEASE]
|
2014-01-28 23:34:56 +04:00
|
|
|
|
|
|
|
- Vérifier s'il n'y a pas de modifications locales. Sinon, proposer de faire un
|
|
|
|
commit ou un stash.
|
2015-03-13 00:22:07 +04:00
|
|
|
- Avec l'option -c, s'il existe une branche de release, proposer de basculer
|
2015-03-13 07:11:05 +04:00
|
|
|
vers elle ou sur la branche master. Sinon, basculer sur la branche master.
|
2015-03-13 00:22:07 +04:00
|
|
|
- Avec l'option -u, proposer ou fixer une branche de release à créer. Si elle
|
|
|
|
existe déjà, basculer vers elle. Sinon, la créer en la basant sur SOURCE, qui
|
|
|
|
vaut par défaut develop
|
2014-01-28 23:34:56 +04:00
|
|
|
|
|
|
|
OPTIONS
|
2015-03-04 11:39:56 +04:00
|
|
|
-C, --projdir PROJDIR
|
|
|
|
Spécifier le répertoire de base du projet qui est dans git. Par défaut,
|
|
|
|
on travaille dans le répertoire courant et on laisse git trouver le
|
|
|
|
répertoire de base du projet. Avec cette option, le répertoire courant
|
|
|
|
est modifié avant de lancer les commandes git.
|
|
|
|
-O, --origin ORIGIN
|
|
|
|
Spécifier le nom de l'origine. Par défaut, utiliser 'origin'
|
2015-03-09 16:30:13 +04:00
|
|
|
-o, --offline
|
|
|
|
En cas de création d'une branche, ne pas pousser vers l'origine; ne pas
|
|
|
|
tenter le cas échéant de traquer la branche dans l'origine; ne pas
|
|
|
|
supprimer une branche dans l'origine. Cette option est automatiquement
|
|
|
|
activée si la variable UTOOLS_VCS_OFFLINE est définie.
|
|
|
|
--online
|
|
|
|
Annuler l'effet de la variable UTOOLS_VCS_OFFLINE: forcer le mode online
|
2015-03-13 00:22:07 +04:00
|
|
|
|
|
|
|
-c, --checkout
|
|
|
|
Basculer vers une branche de release existante. C'est l'option par
|
2015-03-13 07:11:05 +04:00
|
|
|
défaut. Si aucune branche de release n'existe, basculer vers master
|
2014-01-28 23:34:56 +04:00
|
|
|
-u, --update
|
2015-03-13 00:22:07 +04:00
|
|
|
Préparer une nouvelle release. Utiliser une des options -x, -z ou -p
|
|
|
|
pour spécifier le type de release à préparer. Si la branche qui serait
|
|
|
|
créée pour le type de release existe déjà, basculer vers cette branche.
|
|
|
|
S'il faut la créer, la baser sur la branche SOURCE, qui vaut par défaut
|
|
|
|
develop
|
|
|
|
--menu
|
2014-01-28 23:34:56 +04:00
|
|
|
-x, --major
|
|
|
|
-z, --minor
|
|
|
|
-p, --patchlevel
|
2015-03-13 00:22:07 +04:00
|
|
|
Utilisé avec l'option -u, soit afficher un menu pour choisir la version
|
|
|
|
de la nouvelle release (par défaut), soit préparer respectivement une
|
|
|
|
release majeure, mineure, ou pour correction de bug.
|
|
|
|
-v-OPT
|
|
|
|
Avec l'option -u, spécifier une option de pver permettant de choisir la
|
|
|
|
version de la nouvelle release. Les options supportées sont -v, -l, -a,
|
|
|
|
-b, -r et -R. Par exemple, si la version actuelle sur la branche master
|
|
|
|
est 0.2.3, les options '-uz -v-lbeta' permettent de préparer la release
|
|
|
|
0.3.0-beta
|
|
|
|
En principe, cette option n'a pas à être utilisée, puisque dans une
|
|
|
|
branche de release, on peut faire vivre les versions de pré-release
|
|
|
|
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.
|
2015-03-23 07:33:01 +04:00
|
|
|
-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
|
2015-09-08 09:47:26 +04:00
|
|
|
du numéro de version doit être faite d'une manière particulière.
|
2015-04-01 10:14:31 +04:00
|
|
|
-e, --edit
|
2016-10-06 00:18:54 +04:00
|
|
|
Editer le fichier CHANGES.md autogénéré par les options -u -w ou un
|
|
|
|
fichier CHANGES.txt existant. Cette option est surtout utile si -m est
|
|
|
|
utilisé avec -u, pour donner la possibilité de corriger la liste des
|
|
|
|
modifications avant leur enregistrement définitif.
|
2015-03-13 00:22:07 +04:00
|
|
|
|
2014-01-28 23:34:56 +04:00
|
|
|
-m, --merge
|
|
|
|
Si la branche actuelle est une branche de release, ou s'il existe une
|
|
|
|
branche de release, la merger dans master, puis dans develop, puis la
|
2016-11-22 15:28:28 +04:00
|
|
|
supprimer. A l'issu de cette opération, rester sur la branche develop.
|
2015-03-13 07:11:05 +04:00
|
|
|
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.
|
2015-04-01 10:14:31 +04:00
|
|
|
--delete
|
2015-03-26 20:06:56 +04:00
|
|
|
Supprimer une branche de release, à condition qu'elle aie déjà été
|
|
|
|
entièrement fusionnée dans la branch master
|
2015-04-01 10:14:31 +04:00
|
|
|
--force-delete
|
2015-03-26 20:08:35 +04:00
|
|
|
Supprimer une branche de release, même si elle n'a pas encore été
|
|
|
|
fusionnée dans la branche master
|
2015-03-26 20:06:56 +04:00
|
|
|
|
2015-05-22 13:25:36 +04:00
|
|
|
-s, --summary
|
|
|
|
Afficher la liste des différences entre la branche develop et la branche
|
|
|
|
master, comme elle serait générée par les options -u -w pour le fichier
|
2016-10-06 00:18:54 +04:00
|
|
|
CHANGES.txt (la syntaxe pour CHANGES.md est légèrement différente)
|
2014-01-28 23:34:56 +04:00
|
|
|
-l, --log
|
|
|
|
Afficher les modifications actuellement effectuée dans la branche de
|
|
|
|
release par rapport à develop.
|
|
|
|
-d, --diff
|
|
|
|
Afficher les modifications actuellement effectuée dans la branche de
|
2016-11-22 15:28:28 +04:00
|
|
|
release par rapport à develop, sous forme de diff.
|
|
|
|
|
|
|
|
OPTIONS AVANCEES
|
|
|
|
--uc, --upgrade-changes
|
|
|
|
Convertir un fichier CHANGES.txt en CHANGES.md"
|
2014-01-28 23:34:56 +04:00
|
|
|
}
|
|
|
|
|
2016-06-10 06:13:54 +04:00
|
|
|
function show_summary() {
|
|
|
|
git log --oneline --graph "$@" |
|
|
|
|
grep -vF '|\' | grep -vF '|/' | sed 's/\* //; s/^ /+ /' |
|
2016-11-22 15:28:28 +04:00
|
|
|
grep -v "Intégration de la branche release-" |
|
|
|
|
grep -v "Branche develop en version .*-SNAPSHOT"
|
2016-06-10 06:13:54 +04:00
|
|
|
}
|
|
|
|
|
2016-10-06 00:18:54 +04:00
|
|
|
function format_md() {
|
|
|
|
awk '
|
2016-10-06 00:26:56 +04:00
|
|
|
$0 == "" || $0 ~ /^#/ { print; next }
|
2016-10-06 00:18:54 +04:00
|
|
|
$1 == "+" {
|
|
|
|
$1 = "*"
|
|
|
|
$2 = "`" $2 "`"
|
|
|
|
print; next
|
|
|
|
}
|
|
|
|
$1 == "|" {
|
|
|
|
$1 = " *"
|
|
|
|
$2 = "`" $2 "`"
|
|
|
|
print; next
|
|
|
|
}
|
|
|
|
{
|
|
|
|
$1 = "* `" $1 "`"
|
|
|
|
print; next
|
|
|
|
}
|
|
|
|
'
|
|
|
|
}
|
|
|
|
|
2016-11-22 15:28:28 +04:00
|
|
|
function __get_newver_from_release() {
|
|
|
|
local relver filever
|
|
|
|
is_release_branch "$release" && relver="${release#release-}"
|
|
|
|
setx filever=pver --sw "" --allow-empty
|
|
|
|
if [ -n "$relver" -a "$filever" != "$relver" ]; then
|
|
|
|
newver="$filever"
|
|
|
|
ewarn "La version de la branche de release est différente de la version dans le fichier"
|
|
|
|
enote "La version effectivement sélectionnée est $newver"
|
|
|
|
elif [ -n "$filever" ]; then
|
|
|
|
newver="$filever"
|
|
|
|
elif [ -n "$relver" ]; then
|
|
|
|
newver="$relver"
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
2015-03-04 11:39:56 +04:00
|
|
|
projdir=
|
|
|
|
origin=origin
|
2015-03-23 07:53:50 +04:00
|
|
|
action=auto
|
|
|
|
checkout=
|
2015-03-31 17:59:47 +04:00
|
|
|
update=
|
2015-03-13 00:22:07 +04:00
|
|
|
incversion=
|
|
|
|
pver_opts=()
|
2015-03-23 07:33:01 +04:00
|
|
|
write=1
|
2015-04-01 10:14:31 +04:00
|
|
|
edit_changes=
|
2015-03-31 17:59:47 +04:00
|
|
|
merge=
|
|
|
|
force_delete=
|
2015-03-13 00:22:07 +04:00
|
|
|
log=
|
|
|
|
diff=
|
2014-01-28 23:34:56 +04:00
|
|
|
parse_opts "${PRETTYOPTS[@]}" \
|
|
|
|
--help '$exit_with display_help' \
|
2015-03-04 11:39:56 +04:00
|
|
|
-C:,--projdir: projdir= \
|
|
|
|
-O:,--origin: origin= \
|
2015-03-09 16:30:13 +04:00
|
|
|
-o,--offline UTOOLS_VCS_OFFLINE=1 \
|
|
|
|
--online UTOOLS_VCS_OFFLINE= \
|
2015-03-23 07:53:50 +04:00
|
|
|
-c,--checkout checkout=1 \
|
|
|
|
-u,--update '$update=1; [ -z "$incversion" ] && incversion=auto' \
|
|
|
|
--menu '$update=1; incversion=menu' \
|
|
|
|
-x,--major '$update=1; incversion=major' \
|
|
|
|
-z,--minor '$update=1; incversion=minor' \
|
|
|
|
-p,--patchlevel '$update=1; incversion=patchlevel' \
|
|
|
|
-v: '$update=1; add@ pver_opts' \
|
2015-03-23 07:33:01 +04:00
|
|
|
-w,--write write=1 \
|
|
|
|
-n,--no-write write= \
|
2015-04-01 10:14:31 +04:00
|
|
|
-e,--edit edit_changes=1 \
|
2015-03-23 07:53:50 +04:00
|
|
|
-m,--merge merge=1 \
|
2015-04-01 10:14:31 +04:00
|
|
|
--delete action=delete \
|
|
|
|
--force-delete '$action=delete; force_delete=1' \
|
2015-05-22 13:25:36 +04:00
|
|
|
-s,--summary action=summary \
|
2015-03-13 00:22:07 +04:00
|
|
|
-l,--log '$action=diff; log=1' \
|
|
|
|
-d,--diff '$action=diff; diff=1' \
|
2016-10-06 00:26:56 +04:00
|
|
|
--upgrade-changes,--uc action=upgrade-changes \
|
2014-01-28 23:34:56 +04:00
|
|
|
@ args -- "$@" && set -- "${args[@]}" || die "$args"
|
2015-03-04 11:39:56 +04:00
|
|
|
|
2015-03-23 07:53:50 +04:00
|
|
|
if [ "$action" == auto ]; then
|
|
|
|
if [ -n "$update" ]; then
|
|
|
|
action=update
|
|
|
|
elif [ -n "$merge" ]; then
|
|
|
|
action=merge
|
|
|
|
elif [ -n "$checkout" ]; then
|
|
|
|
action=checkout
|
2015-03-28 01:22:35 +04:00
|
|
|
else
|
|
|
|
# checkout par défaut
|
|
|
|
action=checkout
|
2015-03-23 07:53:50 +04:00
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2015-03-04 11:39:56 +04:00
|
|
|
if [ -n "$projdir" ]; then
|
|
|
|
cd "$projdir" || die
|
|
|
|
fi
|
|
|
|
|
2016-10-06 00:26:56 +04:00
|
|
|
if [ "$action" == upgrade-changes ]; then
|
|
|
|
[ -f CHANGES.txt ] || die "CHANGES.txt: fichier introuvable"
|
|
|
|
format_md <CHANGES.txt >CHANGES.md || die
|
|
|
|
rm CHANGES.txt
|
|
|
|
enote "Conversion CHANGES.txt --> CHANGES.md effectuée"
|
|
|
|
exit 0
|
|
|
|
fi
|
|
|
|
|
2015-03-04 11:39:56 +04:00
|
|
|
git_ensure_gitvcs
|
2015-03-13 00:22:07 +04:00
|
|
|
|
2016-11-28 08:35:29 +04:00
|
|
|
if [ -f .prel-noauto -a -n "$update" -a -n "$merge" ]; then
|
|
|
|
die "Vous ne pouvez pas faire de release automatique sur ce dépôt. Vous devez utiliser -u et -m séparement."
|
|
|
|
fi
|
|
|
|
|
2016-11-22 15:28:28 +04:00
|
|
|
setx vertype=pver --sw "" --show-source
|
|
|
|
[[ "$vertype" == pom* ]] && maven_update=1 || maven_update=
|
|
|
|
|
2015-09-08 09:47:26 +04:00
|
|
|
push_branches=()
|
|
|
|
push_tags=()
|
|
|
|
push_deferred=
|
|
|
|
[ -n "$UTOOLS_VCS_OFFLINE" ] && push_deferred= || push_deferred=1
|
|
|
|
[ -n "$update" -a -n "$merge" ] && UTOOLS_VCS_OFFLINE=1
|
|
|
|
|
2015-03-13 00:22:07 +04:00
|
|
|
setx branch=git_get_branch
|
|
|
|
|
2016-11-22 15:28:28 +04:00
|
|
|
update_opt=
|
2015-03-23 06:21:44 +04:00
|
|
|
if [ "$action" == update ]; then
|
2016-11-25 11:01:25 +04:00
|
|
|
git_ensure_cleancheckout
|
|
|
|
|
2016-11-22 15:28:28 +04:00
|
|
|
if [ -n "$maven_update" ]; then
|
|
|
|
setx oldver=pver --gw develop:
|
|
|
|
enote "La version de la branche develop est $oldver"
|
|
|
|
else
|
|
|
|
setx oldver=pver --gw master:
|
|
|
|
fi
|
2015-03-23 07:33:01 +04:00
|
|
|
newver=
|
2015-03-23 06:21:44 +04:00
|
|
|
|
2015-03-23 06:34:59 +04:00
|
|
|
if [ "$incversion" == auto ]; then
|
2015-03-23 06:42:51 +04:00
|
|
|
if [ ${#pver_opts[*]} -gt 0 ]; then
|
|
|
|
# des options ont été spécifiées, les honorer
|
2016-11-22 15:28:28 +04:00
|
|
|
setx newver=pver -s "$oldver" ${maven_update:+--maven-update -R} "${pver_opts[@]}"
|
2015-03-23 07:33:01 +04:00
|
|
|
release="release-$newver"
|
2015-03-23 06:34:59 +04:00
|
|
|
else
|
2015-03-23 06:42:51 +04:00
|
|
|
# sinon, prendre une décision en fonction des branches de release
|
|
|
|
# qui existent déjà
|
2015-03-28 01:11:24 +04:00
|
|
|
setx -a branches=list_release_branches "$origin"
|
2015-03-23 06:42:51 +04:00
|
|
|
if [ ${#branches[*]} -eq 0 ]; then
|
|
|
|
# en l'absence de branche de release, proposer d'en créer une
|
|
|
|
incversion=menu
|
|
|
|
elif [ ${#branches[*]} -eq 1 ]; then
|
|
|
|
# s'il n'y en a qu'une, la prendre
|
|
|
|
release="${branches[0]}"
|
|
|
|
else
|
|
|
|
# sinon, donner le choix dans un menu
|
|
|
|
array_add branches master
|
|
|
|
default_branch="$branch"
|
|
|
|
array_contains branches "$default_branch" || default_branch="${branches[0]}"
|
|
|
|
simple_menu release branches -d "$default_branch" \
|
2015-03-28 01:04:57 +04:00
|
|
|
-t "Basculer vers une branche de release" \
|
2015-03-23 06:42:51 +04:00
|
|
|
-m "Veuillez choisir la branche vers laquelle basculer"
|
|
|
|
fi
|
2015-03-23 06:34:59 +04:00
|
|
|
fi
|
2015-03-23 06:21:44 +04:00
|
|
|
fi
|
2016-11-22 15:28:28 +04:00
|
|
|
pver_opts=(${maven_update:+--maven-update -R} "${pver_opts[@]}")
|
2015-03-23 06:21:44 +04:00
|
|
|
case "$incversion" in
|
|
|
|
menu)
|
2015-03-23 07:33:01 +04:00
|
|
|
setx majorv=pver -s "$oldver" -ux "${pver_opts[@]}"
|
|
|
|
setx minorv=pver -s "$oldver" -uz "${pver_opts[@]}"
|
2015-04-12 12:30:12 +04:00
|
|
|
setx patchlevelv=pver -s "$oldver" -up "${pver_opts[@]}"
|
2016-11-25 11:01:25 +04:00
|
|
|
if [ -z "$maven_update" ]; then
|
|
|
|
release="release-$minorv"
|
|
|
|
else
|
|
|
|
release="release-$patchlevelv"
|
|
|
|
fi
|
2015-03-23 06:42:51 +04:00
|
|
|
branches=("release-$majorv" "release-$minorv" "release-$patchlevelv" master)
|
2015-03-23 06:21:44 +04:00
|
|
|
simple_menu release branches \
|
2015-03-28 01:04:57 +04:00
|
|
|
-t "Basculer vers une nouvelle branche de release" \
|
2015-03-23 06:21:44 +04:00
|
|
|
-m "Veuillez choisir la branche à créer"
|
2015-04-12 12:45:49 +04:00
|
|
|
[ "$release" != master ] && newver="${release#release-}"
|
2016-11-22 15:28:28 +04:00
|
|
|
if [ "$release" == "release-$majorv" ]; then
|
|
|
|
update_opt=-x
|
|
|
|
elif [ "$release" == "release-$minorv" ]; then
|
|
|
|
update_opt=-z
|
|
|
|
elif [ "$release" == "release-$patchlevelv" ]; then
|
|
|
|
update_opt=-p
|
|
|
|
fi
|
2015-03-23 06:21:44 +04:00
|
|
|
;;
|
|
|
|
major)
|
2015-03-23 07:33:01 +04:00
|
|
|
setx newver=pver -s "$oldver" -ux "${pver_opts[@]}"
|
|
|
|
release="release-$newver"
|
2016-11-22 15:28:28 +04:00
|
|
|
update_opt=-x
|
2015-03-23 06:21:44 +04:00
|
|
|
;;
|
|
|
|
minor)
|
2015-03-23 07:33:01 +04:00
|
|
|
setx newver=pver -s "$oldver" -uz "${pver_opts[@]}"
|
|
|
|
release="release-$newver"
|
2016-11-22 15:28:28 +04:00
|
|
|
update_opt=-z
|
2015-03-23 06:21:44 +04:00
|
|
|
;;
|
|
|
|
patchlevel)
|
2015-03-23 14:05:56 +04:00
|
|
|
setx newver=pver -s "$oldver" -up "${pver_opts[@]}"
|
2015-03-23 07:33:01 +04:00
|
|
|
release="release-$newver"
|
2016-11-22 15:28:28 +04:00
|
|
|
update_opt=-p
|
2015-03-23 06:21:44 +04:00
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
|
|
|
set -- "$release" "$1"
|
|
|
|
action=checkout
|
2015-03-13 07:11:05 +04:00
|
|
|
fi
|
|
|
|
|
2015-03-13 00:22:07 +04:00
|
|
|
if [ "$action" == checkout ]; then
|
|
|
|
release="$1"
|
|
|
|
source="${2:-develop}"
|
|
|
|
|
|
|
|
if [ -z "$release" ]; then
|
2015-03-28 01:11:24 +04:00
|
|
|
setx -a branches=list_release_branches "$origin"
|
2015-03-13 00:22:07 +04:00
|
|
|
|
|
|
|
if [ ${#branches[*]} -eq 0 ]; then
|
2015-03-13 07:11:05 +04:00
|
|
|
# en l'absence de branche de release, basculer sur master
|
|
|
|
release=master
|
|
|
|
elif [ ${#branches[*]} -eq 1 ]; then
|
|
|
|
# s'il n'y en a qu'une, la prendre
|
|
|
|
release="${branches[0]}"
|
2015-03-13 00:22:07 +04:00
|
|
|
else
|
2015-03-13 07:11:05 +04:00
|
|
|
# sinon, donner le choix dans un menu
|
2015-03-13 00:22:07 +04:00
|
|
|
array_add branches master
|
|
|
|
default_branch="$branch"
|
|
|
|
array_contains branches "$default_branch" || default_branch="${branches[0]}"
|
|
|
|
simple_menu release branches -d "$default_branch" \
|
2015-03-28 01:04:57 +04:00
|
|
|
-t "Basculer vers une branche de release" \
|
2015-03-13 00:22:07 +04:00
|
|
|
-m "Veuillez choisir la branche vers laquelle basculer"
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
|
|
|
# On est peut-être déjà sur la bonne branche
|
|
|
|
if git_is_branch "$release"; then
|
|
|
|
if [ -z "$UTOOLS_VCS_OFFLINE" ]; then
|
|
|
|
git_track_branch "$release" "$origin"
|
|
|
|
fi
|
2015-03-28 01:30:47 +04:00
|
|
|
git_fast_forward "$release" "" "$origin"
|
2015-03-13 00:22:07 +04:00
|
|
|
exit 0
|
|
|
|
fi
|
|
|
|
|
|
|
|
# Créer/basculer vers une release branch
|
|
|
|
git_ensure_cleancheckout
|
2015-03-28 01:04:57 +04:00
|
|
|
is_any_branch "$release" master release || die "$release: ce n'est pas une branche de release"
|
2015-03-23 07:33:01 +04:00
|
|
|
r=0
|
2015-09-08 10:14:13 +04:00
|
|
|
newbranch=
|
2015-03-13 00:22:07 +04:00
|
|
|
if git_have_branch "$release"; then
|
2015-03-23 07:33:01 +04:00
|
|
|
git checkout "$release"; r=$?
|
2015-04-01 08:30:28 +04:00
|
|
|
elif git_have_rbranch "$release"; then
|
|
|
|
git checkout "$release"; r=$?
|
2015-03-13 00:22:07 +04:00
|
|
|
else
|
|
|
|
estepn "\
|
2015-03-28 01:04:57 +04:00
|
|
|
Vous allez créer la nouvelle branche de release ${COULEUR_VERTE}$release${COULEUR_NORMALE}
|
2015-03-13 00:22:07 +04:00
|
|
|
à partir de la branche source ${COULEUR_BLEUE}$source${COULEUR_NORMALE}"
|
|
|
|
ask_yesno "Voulez-vous continuer?" O || die
|
|
|
|
|
2015-09-08 10:14:13 +04:00
|
|
|
newbranch=1
|
2015-03-13 00:22:07 +04:00
|
|
|
git_ensure_branch "$release" "$source" "$origin"
|
|
|
|
[ $? -eq 2 ] && die "Impossible de créer la branche $release. Veuillez vérifier que la branche $source existe"
|
2015-03-23 07:33:01 +04:00
|
|
|
git checkout "$release"; r=$?
|
|
|
|
|
2015-04-01 10:14:31 +04:00
|
|
|
if [ -z "$newver" ]; then
|
|
|
|
# le cas échéant, tenter de calculer la version en fonction de la release
|
2016-11-22 15:28:28 +04:00
|
|
|
__get_newver_from_release
|
2015-04-01 10:14:31 +04:00
|
|
|
fi
|
|
|
|
|
|
|
|
if [ "$r" -eq 0 -a -n "$write" ]; then
|
2015-09-08 10:14:13 +04:00
|
|
|
set cwd=pwd
|
|
|
|
setx workdir=git rev-parse --show-toplevel
|
|
|
|
[ -d "$workdir" ] && cd "$workdir"
|
|
|
|
|
2015-04-01 10:14:31 +04:00
|
|
|
commitmsg="Init changelog"
|
|
|
|
if [ -n "$newver" ]; then
|
|
|
|
pver -uv "$newver" && commitmsg="Init changelog & version $newver"
|
|
|
|
fi
|
|
|
|
|
2015-04-12 12:45:49 +04:00
|
|
|
version="$newver"
|
|
|
|
[ -n "$version" ] || version="$release"
|
|
|
|
|
|
|
|
changelog="## Version $version du $(date +%d/%m/%Y-%H:%M)"
|
2015-04-01 10:14:31 +04:00
|
|
|
setx mergebase=git merge-base master "$release"
|
2016-10-06 00:18:54 +04:00
|
|
|
tmpcmd=(show_summary "$mergebase..$release")
|
|
|
|
if [ -f CHANGES.txt ]; then
|
|
|
|
changes=CHANGES.txt
|
|
|
|
else
|
|
|
|
changes=CHANGES.md
|
|
|
|
array_add tmpcmd // format_md
|
|
|
|
fi
|
|
|
|
setxp modifs "${tmpcmd[@]}"
|
2015-04-01 10:14:31 +04:00
|
|
|
[ -n "$modifs" ] && changelog="$changelog
|
|
|
|
|
|
|
|
$modifs"
|
|
|
|
|
|
|
|
ac_set_tmpfile tmpchanges
|
|
|
|
echo "$changelog" >>"$tmpchanges"
|
|
|
|
|
|
|
|
if [ -n "$edit_changes" ]; then
|
|
|
|
estep "Lancement d'un éditeur pour vérifier la liste des modifications"
|
|
|
|
"${EDITOR:-vi}" "$tmpchanges"
|
2015-03-23 07:33:01 +04:00
|
|
|
fi
|
2015-04-01 10:14:31 +04:00
|
|
|
|
2016-10-06 00:18:54 +04:00
|
|
|
if [ -f "$changes" ]; then
|
2015-04-01 10:14:31 +04:00
|
|
|
echo >>"$tmpchanges"
|
2016-10-06 00:18:54 +04:00
|
|
|
cat "$changes" >>"$tmpchanges"
|
2015-04-01 10:14:31 +04:00
|
|
|
fi
|
2016-10-06 00:18:54 +04:00
|
|
|
cat "$tmpchanges" >"$changes"
|
2015-04-01 10:14:31 +04:00
|
|
|
ac_clean "$tmpchanges"
|
|
|
|
|
|
|
|
git add -A
|
|
|
|
git commit -m "$commitmsg"
|
2015-09-08 10:14:13 +04:00
|
|
|
|
|
|
|
cd "$cwd"
|
2015-03-23 07:33:01 +04:00
|
|
|
fi
|
|
|
|
fi
|
2015-03-28 01:30:47 +04:00
|
|
|
if [ "$r" -eq 0 ]; then
|
|
|
|
# éventuellement fast-forwarder automatiquement
|
|
|
|
git_fast_forward "$release" "" "$origin"
|
|
|
|
fi
|
2015-03-23 07:33:01 +04:00
|
|
|
|
2015-09-08 09:47:26 +04:00
|
|
|
set -- "$release"
|
2015-03-23 07:53:50 +04:00
|
|
|
if [ "$r" -eq 0 -a -n "$merge" ]; then
|
2015-03-31 17:59:47 +04:00
|
|
|
# mettre à jour la branche sur laquelle on se trouve
|
|
|
|
setx branch=git_get_branch
|
2015-03-23 07:53:50 +04:00
|
|
|
action=merge
|
2015-09-08 10:14:13 +04:00
|
|
|
elif [ "$r" -eq 0 -a -n "$newbranch" ]; then
|
2015-09-08 09:47:26 +04:00
|
|
|
action=push
|
|
|
|
array_addu push_branches "$release"
|
2015-03-23 07:53:50 +04:00
|
|
|
else
|
|
|
|
exit "$r"
|
|
|
|
fi
|
2015-03-23 07:33:01 +04:00
|
|
|
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
|
2015-03-28 01:04:57 +04:00
|
|
|
is_release_branch "$release" || die "$release: ce n'est pas une branche de release"
|
2015-03-23 07:33:01 +04:00
|
|
|
elif ! is_develop_branch "$release"; then
|
|
|
|
die "Aucune branche de release n'existe, vous devez fusionner à partir de develop"
|
|
|
|
fi
|
2015-03-31 17:59:47 +04:00
|
|
|
git_have_branch "$release" || die "$release: branche introuvable"
|
2015-03-23 07:33:01 +04:00
|
|
|
elif is_release_branch "$branch"; then
|
|
|
|
release="$branch"
|
|
|
|
fi
|
|
|
|
|
2016-02-26 14:03:31 +04:00
|
|
|
final_branch= # branche sur laquelle se placer après avoir fusionné la branche de release
|
2015-03-23 07:33:01 +04:00
|
|
|
if [ "$action" == merge ]; then
|
|
|
|
confirm=
|
|
|
|
|
|
|
|
if [ -z "$release" ]; then
|
|
|
|
if [ ${#branches[*]} -eq 0 ]; then
|
2015-03-28 01:04:57 +04:00
|
|
|
ewarn "Aucune branche de release n'a été préparée."
|
2015-03-23 07:53:50 +04:00
|
|
|
ewarn "La branche develop sera fusionnée directement dans master."
|
2015-03-23 07:33:01 +04:00
|
|
|
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" \
|
2015-03-28 01:04:57 +04:00
|
|
|
-t "Choix de la branche de release" \
|
2015-03-23 07:33:01 +04:00
|
|
|
-m "Veuillez choisir la branche"
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2015-03-23 13:51:06 +04:00
|
|
|
estepn "Intégration ${COULEUR_VERTE}$release${COULEUR_NORMALE} --> ${COULEUR_BLEUE}master${COULEUR_NORMALE}"
|
2015-03-23 07:33:01 +04:00
|
|
|
ask_yesno $confirm "Voulez-vous continuer?" O || die
|
|
|
|
|
2015-03-31 17:59:47 +04:00
|
|
|
git checkout master || die
|
2015-03-23 07:53:50 +04:00
|
|
|
git merge "$release" -m "Intégration de la branche $release" --no-ff || die
|
2015-03-23 07:33:01 +04:00
|
|
|
|
2015-03-31 18:53:32 +04:00
|
|
|
if [ -z "$newver" ]; then
|
|
|
|
# le cas échéant, tenter de calculer la version en fonction de la release
|
2016-11-22 15:28:28 +04:00
|
|
|
__get_newver_from_release
|
2015-03-31 18:53:32 +04:00
|
|
|
fi
|
|
|
|
|
2015-03-31 16:06:05 +04:00
|
|
|
if [ -n "$newver" ]; then
|
2015-03-31 18:53:32 +04:00
|
|
|
estepn "Création du tag $newver"
|
2015-09-08 09:47:26 +04:00
|
|
|
array_addu push_tags "$newver"
|
2015-04-01 10:14:31 +04:00
|
|
|
git tag --force "$newver" || die
|
2015-04-16 10:54:47 +04:00
|
|
|
if git_have_remote "$origin"; then
|
|
|
|
if [ -z "$UTOOLS_VCS_OFFLINE" ]; then
|
|
|
|
git push "$origin" tag "$newver"
|
2015-09-08 09:47:26 +04:00
|
|
|
elif [ -z "$push_deferred" ]; then
|
2015-04-16 10:54:47 +04:00
|
|
|
eimportant "Le tag $newver n'a pas été poussé vers l'origine.
|
|
|
|
Il faudra le faire manuellement avec la commande suivante:
|
|
|
|
$(qvals git push "$origin" tag "$newver")
|
|
|
|
ou celle-ci pour pour pousser TOUS les tags:
|
|
|
|
$(qvals git push "$origin" --tags)"
|
|
|
|
fi
|
|
|
|
fi
|
2015-03-31 16:06:05 +04:00
|
|
|
fi
|
|
|
|
|
2015-03-23 07:33:01 +04:00
|
|
|
if [ "$release" != develop ]; then
|
2015-03-23 13:51:06 +04:00
|
|
|
estepn "Intégration ${COULEUR_VERTE}$release${COULEUR_NORMALE} --> ${COULEUR_BLEUE}develop${COULEUR_NORMALE}"
|
2015-03-23 07:33:01 +04:00
|
|
|
git checkout develop
|
2015-03-23 07:53:50 +04:00
|
|
|
git merge "$release" -m "Intégration de la branche $release" --no-ff || die
|
2016-11-22 15:28:28 +04:00
|
|
|
|
|
|
|
if [ -n "$maven_update" ]; then
|
2016-11-25 11:01:25 +04:00
|
|
|
[ -n "$update_opt" ] || update_opt=-p
|
2016-11-22 15:28:28 +04:00
|
|
|
pver -u $update_opt -S
|
|
|
|
git add -A
|
|
|
|
git commit -m "Branche develop en version $(pver --show)" || die
|
|
|
|
fi
|
2015-03-31 17:59:47 +04:00
|
|
|
fi
|
2015-03-23 07:33:01 +04:00
|
|
|
|
2015-03-31 17:59:47 +04:00
|
|
|
# mettre à jour la branche sur laquelle on se trouve
|
|
|
|
git checkout master || die
|
|
|
|
setx branch=git_get_branch
|
2015-03-23 07:33:01 +04:00
|
|
|
|
2015-03-31 18:53:32 +04:00
|
|
|
action=delete
|
2016-02-26 14:03:31 +04:00
|
|
|
final_branch=develop
|
2015-03-31 17:59:47 +04:00
|
|
|
fi
|
2015-03-23 07:33:01 +04:00
|
|
|
|
2015-04-01 12:34:02 +04:00
|
|
|
if [ "$action" == delete -a "$release" != develop ]; then
|
2015-03-31 17:59:47 +04:00
|
|
|
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 "\
|
2015-03-31 16:06:05 +04:00
|
|
|
La branche $origin/$release n'a plus lieu d'être, mais la configuration actuelle interdit de la supprimer.
|
2015-03-23 07:33:01 +04:00
|
|
|
Veuillez le faire manuellement avec la commande suivante:
|
2015-03-23 07:36:28 +04:00
|
|
|
$(qvals git push "$origin" ":$release")"
|
2015-03-23 07:33:01 +04:00
|
|
|
fi
|
2015-03-13 00:22:07 +04:00
|
|
|
fi
|
2015-09-08 09:47:26 +04:00
|
|
|
|
|
|
|
action=push
|
|
|
|
array_addu push_branches master
|
|
|
|
array_addu push_branches develop
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [ "$action" == push -a -n "$push_deferred" ]; then
|
|
|
|
if git_have_remote "$origin"; then
|
|
|
|
estepi "Mise à jour de l'origine"
|
|
|
|
for tag in "${push_tags[@]}"; do
|
|
|
|
git push "$origin" tag "$tag"
|
|
|
|
done
|
|
|
|
for branch in "${push_branches[@]}"; do
|
|
|
|
setx rbranch=git_get_branch_rbranch "$branch" "$origin"
|
|
|
|
rbranch="${rbranch#refs/remotes/$origin/}"
|
|
|
|
git push "$origin" "$branch:$rbranch"
|
|
|
|
done
|
|
|
|
fi
|
2015-03-31 17:59:47 +04:00
|
|
|
fi
|
2015-03-13 00:22:07 +04:00
|
|
|
|
2015-05-22 13:25:36 +04:00
|
|
|
if [ "$action" == summary ]; then
|
|
|
|
setx mergebase=git merge-base master develop
|
2016-06-10 06:13:54 +04:00
|
|
|
show_summary "$mergebase..develop"
|
2015-05-22 13:25:36 +04:00
|
|
|
|
|
|
|
elif [ "$action" == diff ]; then
|
2015-03-23 07:33:01 +04:00
|
|
|
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
|
2015-03-13 00:22:07 +04:00
|
|
|
fi
|
2016-02-26 14:03:31 +04:00
|
|
|
|
|
|
|
# en fin de traitement, revenir le cas échéant sur $final_branch
|
|
|
|
if [ -n "$final_branch" ]; then
|
|
|
|
git checkout "$final_branch" || die
|
|
|
|
fi
|