#!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 source "$(dirname -- "$0")/../load.sh" || exit 1 require: git pman pman.conf git_cleancheckout_DIRTY="\ Vous avez des modifications locales. Enregistrez ces modifications avant de fusionner la branche" function _merge_action() { enote "\ Ce script va - fusionner la branche ${COULEUR_BLEUE}$MergeSrc${COULEUR_NORMALE} dans ${COULEUR_ROUGE}$MergeDest${COULEUR_NORMALE}${Push:+ - pousser les branches modifiées}" ask_yesno "Voulez-vous continuer?" O || die local script=".git/pman-merge.sh" local -a push_branches delete_branches local hook local comment= local or_die=" || exit 1" _mscript_start _scripta < DEST. DEST est calculé en fonction de REF -t, --merge-to REF spécifier la branche de référence et indiquer que la fusion se fait dans le sens SRC --> REF. SRC est calculé en fonction de REF" fi ref="$1"; shift merge_dir=to [ -n "$ref" ] || die "vous spécifier la branche de référence" case "$ref" in -f|--merge-from) ref="$1"; shift merge_dir=from ;; -f*) ref="${ref#-f}" merge_dir=from ;; -t|--merge-to) ref="$1"; shift merge_dir=to ;; -t*) ref="${ref#-t}" merge_dir=to ;; esac REF_BRANCH="${ref^^}" array_contains PMAN_BRANCHES "$REF_BRANCH" || die "$ref: invalid branch" else REF_BRANCH="PMAN_TOOL_${MYNAME^^}"; REF_BRANCH="${!REF_BRANCH}" fi if check_gitdir; then load_branches all load_config set_pman_vars "$merge_dir" load_branches current loaded_config=1 else set_pman_vars "$merge_dir" fi RefDesc= MergeSrcDesc= MergeDestDesc= if [ -n "$REF_BRANCH" ]; then RefDesc="${COULEUR_BLANCHE}<$REF_BRANCH>" [ -n "$RefBranch" -a -n "$REF_UNIQUE" ] && RefDesc="$RefDesc ($RefBranch)" RefDesc="$RefDesc${COULEUR_NORMALE}" fi if [ -n "$MERGE_SRC" ]; then MergeSrcDesc="${COULEUR_BLEUE}<$MERGE_SRC>" [ -n "$MergeSrc" -a -n "$REF_UNIQUE" ] && MergeSrcDesc="$MergeSrcDesc ($MergeSrc)" MergeSrcDesc="$MergeSrcDesc${COULEUR_NORMALE}" fi if [ -n "$MERGE_DEST" ]; then MergeDestDesc="${COULEUR_ROUGE}<$MERGE_DEST>" [ -n "$MergeDest" -a -n "$REF_UNIQUE" ] && MergeDestDesc="$MergeDestDesc ($MergeDest)" MergeDestDesc="$MergeDestDesc${COULEUR_NORMALE}" fi if [ -n "$REF_UNIQUE" ] then purpose="gérer la branche $RefDesc" else purpose="gérer les branches $RefDesc" fi usage="--checkout" variables= chdir_def=(chdir= "répertoire dans lequel se placer avant de lancer les opérations") origin_def=(Origin= "++origine à partir de laquelle les branches distantes sont considérées") config_branch_def=(ConfigBranch= "++branche à partir de laquelle charger la configuration") config_file_def=(ConfigFile= "++\ fichier de configuration des branches. le fichier .pman.conf dans le répertoire du dépôt est utilisé par défaut s'il existe. cette option est prioritaire sur --config-branch") fake_def=(_Fake=1 "++option non documentée") keep_script_def=(_KeepScript=1 "++option non documentée") dump_action_def=(action=dump "++afficher les noms des branches") checkout_action_def=('$:' "++non applicable") show_action_def=('$:' "++non applicable") rebase_action_def=('$:' "++non applicable") merge_action_def=('$:' "++non applicable") tech_merge_def=('$:' "++non applicable") squash_def=('$:' "++non applicable") force_merge_def=('$:' "++non applicable") no_push_def=('$:' "++non applicable") push_def=('$:' "++non applicable") no_delete_def=('$:' "++non applicable") delete_def=('$:' "++non applicable") after_merge_def=('$:' "++non applicable") if [ -n "$RefBranch" -a -n "$REF_UNIQUE" ]; then checkout_action_def=(action=checkout "++\ créer le cas échéant la branche $RefDesc et basculer vers elle. c'est l'option par défaut") elif [ -z "$REF_UNIQUE" ]; then checkout_action_def=(action=checkout "\ créer le cas échéant la branche $RefDesc et basculer vers elle. c'est l'option par défaut") else checkout_action_def=(action=checkout "\ créer la branche $MergeDestDesc et basculer vers elle. c'est l'option par défaut") fi if [ -n "$MERGE_SRC" -a -n "$MERGE_DEST" ]; then if [ -n "$REF_UNIQUE" ] then usage="${usage}|--show|--merge" else usage="${usage} $REF_BRANCH --show|--merge" fi if [ "$REF_BRANCH" != "$MERGE_SRC" ] then bewareDir=" NB: la fusion se fait dans le sens inverse" else bewareDir= fi variables="Les variables supplémentaires suivantes peuvent être définies: BEFORE_MERGE_${MERGE_SRC} AFTER_MERGE_${MERGE_SRC}" show_action_def=('$action=show; inc@ ShowLevel' "\ lister ce qui serait fusionné dans la branche $MergeDestDesc") rebase_action_def=('$:' "++non implémenté") # rebase_action_def=(action=rebase "\ #lancer git rebase -i sur la branche $MergeSrcDesc. cela permet de réordonner #les commits pour nettoyer l'historique avant la fusion") merge_action_def=(action=merge "\ fusionner la branche $MergeSrcDesc dans la branche $MergeDestDesc$bewareDir") tech_merge_def=(TechMerge=1 "++option non documentée") squash_def=(SquashMsg= "fusionner les modifications de la branche comme un seul commit") [ -n "$PREL_MERGE" ] && force_merge_def=(ForceMerge=1 "++\ forcer la fusion pour une branche qui devrait être traitée par prel") no_push_def=(Push= "ne pas pousser les branches vers leur origine après la fusion") push_def=(Push=1 "++\ pousser les branches vers leur origine après la fusion. c'est l'option par défaut") if [ -n "$DELETE_MERGED" ]; then variables="${variables} AFTER_DELETE_${MERGE_SRC}" no_delete_def=(Delete= "\ ne pas supprimer la branche $MergeSrcDesc après la fusion dans la branche $MergeDestDesc. cette option ne devrait pas être utilisée avec --squash") delete_def=(Delete=1 "++\ supprimer la branche $MergeSrcDesc après la fusion dans la branche $MergeDestDesc. c'est l'option par défaut") fi [ -n "$MERGE_DEST" ] && variables="${variables} BEFORE_PUSH_${MERGE_DEST} AFTER_PUSH_${MERGE_DEST}" after_merge_def=(AfterMerge= "évaluer le script spécifié après une fusion *réussie*") fi args=( "$purpose" "\ $usage CONFIGURATION Le fichier .pman.conf contient la configuration des branches. $variables" -d:,--chdir:BASEDIR "${chdir_def[@]}" -O:,--origin "${origin_def[@]}" -B:,--config-branch "${config_branch_def[@]}" -c:,--config-file:CONFIG "${config_file_def[@]}" --fake "${fake_def[@]}" --keep-script "${keep_script_def[@]}" --dump "${dump_action_def[@]}" --checkout "${checkout_action_def[@]}" -w,--show "${show_action_def[@]}" -b,--rebase "${rebase_action_def[@]}" -m,--merge "${merge_action_def[@]}" --tech-merge "${tech_merge_def[@]}" -s:,--squash:COMMIT_MSG "${squash_def[@]}" -f,--force-merge "${force_merge_def[@]}" -n,--no-push "${no_push_def[@]}" --push "${push_def[@]}" -k,--no-delete "${no_delete_def[@]}" --delete "${delete_def[@]}" -a:,--after-merge "${after_merge_def[@]}" ) parse_args "$@"; set -- "${args[@]}" if [ -z "$loaded_config" -o -n "$chdir" -o -n "$ConfigFile" -o -n "$ConfigBranch" ]; then # charger la configuration ensure_gitdir "$chdir" load_branches all load_config set_pman_vars "$merge_dir" load_branches current fi resolve_should_push quiet "${action}_action" "$@"