début d'implémentation de prel -c

This commit is contained in:
Jephte CLAIN 2015-03-13 00:22:07 +04:00
parent 3f925ca982
commit 2b2b7f5480
1 changed files with 108 additions and 11 deletions

119
todo/prel
View File

@ -1,6 +1,7 @@
#!/bin/bash #!/bin/bash
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
source "$(dirname "$0")/lib/ulib/ulib" || exit 1 source "$(dirname "$0")/../lib/ulib/ulib" || exit 1
#source "$(dirname "$0")/lib/ulib/ulib" || exit 1
urequire DEFAULTS ptools urequire DEFAULTS ptools
# XXX ajouter la possibilité de faire des pré-releases, --alpha, --beta, --rc # XXX ajouter la possibilité de faire des pré-releases, --alpha, --beta, --rc
@ -12,12 +13,18 @@ function display_help() {
uecho "$scriptname: basculer sur une branche de release uecho "$scriptname: basculer sur une branche de release
USAGE USAGE
$scriptname [options] [SOURCE] $scriptname -c [RELEASE [SOURCE]]
$scriptname -u [SOURCE]
$scriptname -m|-l|-d [RELEASE]
- Vérifier s'il n'y a pas de modifications locales. Sinon, proposer de faire un - Vérifier s'il n'y a pas de modifications locales. Sinon, proposer de faire un
commit ou un stash. commit ou un stash.
- Si aucune branche de release n'existe, assumer -u -z pour préparer une release - Avec l'option -c, s'il existe une branche de release, proposer de basculer
mineure. Sinon, basculer simplement sur la branche de release. vers elle ou sur la branche master. Sinon, proposer un choix de branche de
release à créer.
- 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
OPTIONS OPTIONS
-C, --projdir PROJDIR -C, --projdir PROJDIR
@ -34,21 +41,39 @@ OPTIONS
activée si la variable UTOOLS_VCS_OFFLINE est définie. activée si la variable UTOOLS_VCS_OFFLINE est définie.
--online --online
Annuler l'effet de la variable UTOOLS_VCS_OFFLINE: forcer le mode online Annuler l'effet de la variable UTOOLS_VCS_OFFLINE: forcer le mode online
-c, --checkout
Basculer vers une branche de release existante. C'est l'option par
défaut. Si aucune branche de release n'existe, assumer -u --menu
-u, --update -u, --update
Préparer une release. Utiliser une des options -x, -z ou -p pour Préparer une nouvelle release. Utiliser une des options -x, -z ou -p
spécifier le type de release à préparer. S'il faut créer une nouvelle pour spécifier le type de release à préparer. Si la branche qui serait
branche, la baser sur la branche SOURCE, qui vaut par défaut develop 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
-x, --major -x, --major
-z, --minor -z, --minor
-p, --patchlevel -p, --patchlevel
Utilisé avec l'option -u, préparer respectivement une release majeure, Utilisé avec l'option -u, soit afficher un menu pour choisir la version
mineure (par défaut), et pour correction de bug. 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.
-m, --merge -m, --merge
Si la branche actuelle est une branche de release, ou s'il existe une 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 branche de release, la merger dans master, puis dans develop, puis la
supprimer. Puis basculer sur la branche master. supprimer. Puis basculer sur la branche master.
Si la branche actuelle est une branche de topic et qu'il n'existe aucune
branche de release, assumer les options -u -z -m
-l, --log -l, --log
Afficher les modifications actuellement effectuée dans la branche de Afficher les modifications actuellement effectuée dans la branche de
release par rapport à develop. release par rapport à develop.
@ -59,12 +84,27 @@ OPTIONS
projdir= projdir=
origin=origin origin=origin
action=checkout
incversion=
pver_opts=()
log=
diff=
parse_opts "${PRETTYOPTS[@]}" \ parse_opts "${PRETTYOPTS[@]}" \
--help '$exit_with display_help' \ --help '$exit_with display_help' \
-C:,--projdir: projdir= \ -C:,--projdir: projdir= \
-O:,--origin: origin= \ -O:,--origin: origin= \
-o,--offline UTOOLS_VCS_OFFLINE=1 \ -o,--offline UTOOLS_VCS_OFFLINE=1 \
--online UTOOLS_VCS_OFFLINE= \ --online UTOOLS_VCS_OFFLINE= \
-c,--checkout '$action=checkout' \
-u,--update '$action=update; [ -z "$incversion" ] && incversion=auto' \
--menu '$action=update; incversion=menu' \
-x,--major '$action=update; incversion=major' \
-z,--minor '$action=update; incversion=minor' \
-p,--patchlevel '$action=update; incversion=patchlevel' \
-v: pver_opts \
-m,--merge action=merge \
-l,--log '$action=diff; log=1' \
-d,--diff '$action=diff; diff=1' \
@ args -- "$@" && set -- "${args[@]}" || die "$args" @ args -- "$@" && set -- "${args[@]}" || die "$args"
if [ -n "$projdir" ]; then if [ -n "$projdir" ]; then
@ -72,3 +112,60 @@ if [ -n "$projdir" ]; then
fi fi
git_ensure_gitvcs git_ensure_gitvcs
setx branch=git_get_branch
if [ "$action" == checkout ]; then
release="$1"
source="${2:-develop}"
if [ -z "$release" ]; then
setx -a branches=list_release_branches
if [ ${#branches[*]} -eq 0 ]; then
# En l'absence de release branch, proposer un choix de nouvelle
# branche à créer
setx major=pver -g "" -ux
setx minor=pver -g "" -uz
setx patchlevel=pver -g "" -up
release="release-$minor"
branches=("release-$major" "release-$minor" "release-$patchlevel" master)
simple_menu release branches \
-t "Basculer vers une nouvelle release branch" \
-m "Veuillez choisir la branche à créer"
else
array_add branches master
default_branch="$branch"
array_contains branches "$default_branch" || default_branch="${branches[0]}"
simple_menu release branches -d "$default_branch" \
-t "Basculer vers une release branch" \
-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
exit 0
fi
# 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"
if git_have_branch "$release"; then
git checkout "$release"
else
estepn "\
Vous allez créer la nouvelle release branch ${COULEUR_VERTE}$release${COULEUR_NORMALE}
à partir de la branche source ${COULEUR_BLEUE}$source${COULEUR_NORMALE}"
ask_yesno "Voulez-vous continuer?" O || die
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"
fi
exit $?
fi