#!/bin/bash # -*- 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 urequire DEFAULTS ptools function display_help() { uecho "$scriptname: basculer sur une branche de développement USAGE $scriptname [options] [FEATURE [SOURCE]] - Vérifier l'existence de la branche develop. La créer si nécessaire en la basant sur [origin/]master. - Vérifier s'il n'y a pas de modifications locales. Sinon, proposer de faire un commit ou un stash. - Si FEATURE est spécifié, et si on n'est pas déjà sur cette branche, basculer vers cette nouvelle branche. S'il s'agit d'une nouvelle branche, la baser sur la branche SOURCE, qui vaut par défaut develop - Si FEATURE n'est pas spécifié, basculer sur develop s'il s'agit de la seule solution, sinon afficher un menu pour choisir la branche de destination. OPTIONS -O, --origin ORIGIN Spécifier le nom de l'origine. Par défaut, utiliser 'origin' -m, --merge Si la branche actuelle est une feature branch, la merger dans develop puis la supprimer. Puis basculer sur la branche develop. -l, --log Afficher les modifications actuellement effectuée dans la feature branch par rapport à develop. -d, --diff Afficher les modifications actuellement effectuée dans la feature branch par rapport à develop, sous forme de diff." } origin=origin action=branch parse_opts "${PRETTYOPTS[@]}" \ --help '$exit_with display_help' \ -O:,--origin: origin= \ -m,--merge action=merge \ -l,--log action=log \ -d,--diff action=diff \ @ args -- "$@" && set -- "${args[@]}" || die "$args" git_ensure_gitvcs if ! git_have_branch develop; then estepn "Configuration de la branche develop" git_ensure_branch develop master "$origin" [ $? -eq 2 ] && die "Impossible de créer la branche develop. Veuillez vérifier que la branche master existe" fi setx branch=git_get_branch if [ "$action" == branch ]; then feature="$1" source="${2:-develop}" if [ -z "$feature" ]; then setx -a branches=list_feature_branches if [ ${#branches[*]} -eq 0 ]; then # En l'absence de feature branch, basculer sur develop feature=develop else array_ins branches develop simple_menu feature branches -d "$branch" \ -t "Basculer vers une feature 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 "$feature"; then git_track_branch "$feature" "$origin" exit 0 fi # Créer/basculer vers une feature branch git_ensure_cleancheckout if git_have_branch "$feature"; then git checkout "$feature" else estepn "\ Vous allez créer la nouvelle feature branch ${COULEUR_VERTE}$feature${COULEUR_NORMALE} à partir de la branche source ${COULEUR_BLEUE}$source${COULEUR_NORMALE}" ask_yesno "Voulez-vous continuer?" O || die git_ensure_branch "$feature" "$source" "$origin" [ $? -eq 2 ] && die "Impossible de créer la branche $feature. Veuillez vérifier que la branche $source existe" git checkout "$feature" fi elif [ "$action" == merge ]; then is_feature_branch || exit 0 estepn "Intégration de la feature branch ${COULEUR_VERTE}$branch${COULEUR_NORMALE} dans ${COULEUR_BLEUE}develop${COULEUR_NORMALE}" git checkout develop git merge "$branch" -m "Intégration de la feature branch $branch" --no-ff || die estepi "Suppression de la branche locale" git branch -d "$branch" if git_have_remote origin; then estepi "Suppression de la branche distante" git push origin ":$branch" fi elif [ "$action" == log ]; then is_feature_branch || exit 0 git log develop.."$branch" elif [ "$action" == diff ]; then is_feature_branch || exit 0 git diff develop..."$branch" fi