diff --git a/lib/ulib/ptools b/lib/ulib/ptools index 3e878d2..b8f286a 100644 --- a/lib/ulib/ptools +++ b/lib/ulib/ptools @@ -28,7 +28,7 @@ function is_hotfix_branch() { local branch; branch="$(__get_branch "$1")" || return 2 [[ "$branch" == hotfix-* ]] } -function is_topic_branch() { +function is_feature_branch() { local branch; branch="$(__get_branch "$1")" || return 2 [ "$branch" == "master" ] && return 1 [ "$branch" == "develop" ] && return 1 @@ -36,3 +36,17 @@ function is_topic_branch() { [[ "$branch" == hotfix-* ]] && return 1 return 0 } + +function list_release_branches() { + git_list_branches | grep '^release-' +} +function list_hotfix_branches() { + git_list_branches | grep '^hotfix-' +} +function list_feature_branches() { + git_list_branches | + grep -vF master | + grep -vF develop | + grep -v '^release-' | + grep -v '^hotfix-' +} diff --git a/lib/ulib/vcs b/lib/ulib/vcs index 73b299f..a93b3bd 100644 --- a/lib/ulib/vcs +++ b/lib/ulib/vcs @@ -576,6 +576,7 @@ function git_ensure_branch() { git branch -t "$branch" "$origin/$branch" || return 2 else # créer une nouvelle branche du nom spécifié + git_have_branch "$source" || return 2 git branch "$branch" "$source" || return 2 if git_have_remote "$origin"; then git push "$origin" "$branch" && git_track_branch "$branch" "$origin" diff --git a/pdev b/pdev index 1f19bf5..694c669 100755 --- a/pdev +++ b/pdev @@ -7,16 +7,16 @@ function display_help() { uecho "$scriptname: basculer sur une branche de développement USAGE - $scriptname [options] [TOPIC [SOURCE]] + $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 TOPIC est spécifié, et si on n'est pas déjà sur cette branche, basculer +- 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 TOPIC n'est pas spécifié, basculer sur develop s'il s'agit de la seule +- 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 @@ -24,14 +24,14 @@ OPTIONS Créer la branche develop et la configurer le cas échéant pour qu'elle traque la branche origin/develop -m, --merge - Si la branche actuelle est une branche de topic, la merger dans develop + 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 branche de - topic par rapport à develop. + Afficher les modifications actuellement effectuée dans la feature + branch par rapport à develop. -d, --diff - Afficher les modifications actuellement effectuée dans la branche de - topic par rapport à develop, sous forme de diff." + Afficher les modifications actuellement effectuée dans la feature branch + par rapport à develop, sous forme de diff." } parse_opts "${PRETTYOPTS[@]}" \ @@ -40,20 +40,43 @@ parse_opts "${PRETTYOPTS[@]}" \ git_ensure_gitvcs if ! git_have_branch develop; then - estepn "Création de la branche develop" + estepn "Configuration de la branche develop" git_ensure_branch develop - [ $? -eq 2 ] && die "Une erreur s'est produite pendant la création de la branche develop" + [ $? -eq 2 ] && die "Impossible de créer la branche develop. Veuillez vérifier que la branche master existe" fi -git_track_branch develop -topic="$1" -source="$2" +feature="$1" +source="${2:-develop}" -if [ -n "$topic" ]; then - # Créer/basculer vers une branche de topic - : +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" + 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 - # Créer/basculer vers la branche de développement - : -fi \ No newline at end of file + 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" +fi