From de7d12aba687f213472ae26267b2148377e0b02c Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Fri, 20 Feb 2015 00:44:30 +0400 Subject: [PATCH] =?UTF-8?q?possibilit=C3=A9=20de=20sp=C3=A9cifier=20l'orig?= =?UTF-8?q?ine=20impl=C3=A9menter=20merge,=20log,=20diff?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/ulib/vcs | 2 +- pdev | 101 ++++++++++++++++++++++++++++++++++----------------- 2 files changed, 68 insertions(+), 35 deletions(-) diff --git a/lib/ulib/vcs b/lib/ulib/vcs index a93b3bd..b2ddb4f 100644 --- a/lib/ulib/vcs +++ b/lib/ulib/vcs @@ -571,7 +571,7 @@ function git_ensure_branch() { local branch="$1" source="${2:-master}" origin="${3:-origin}" [ -n "$branch" ] || return 2 git_have_branch "$branch" && return 1 - if git_have_rbranch "$branch"; then + if git_have_rbranch "$branch" "$origin"; then # une branche du même nom existe dans l'origine. faire une copie de cette branche git branch -t "$branch" "$origin/$branch" || return 2 else diff --git a/pdev b/pdev index 694c669..5f753ed 100755 --- a/pdev +++ b/pdev @@ -20,9 +20,8 @@ USAGE solution, sinon afficher un menu pour choisir la branche de destination. OPTIONS - --init - Créer la branche develop et la configurer le cas échéant pour qu'elle - traque la branche origin/develop + -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. @@ -34,49 +33,83 @@ OPTIONS 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 + 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 -feature="$1" -source="${2:-develop}" +setx branch=git_get_branch -if [ -z "$feature" ]; then - setx branch=git_get_branch - 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" +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 -fi - -# On est peut-être déjà sur la bonne branche -if git_is_branch "$feature"; then - git_track_branch "$feature" - exit 0 -fi - -# Créer/basculer vers une feature branch -git_ensure_cleancheckout -if git_have_branch "$feature"; then - git checkout "$feature" -else - estepn "\ + + # 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 checkout -b "$feature" "$source" + 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